看了user_procedures的定义:看来除包外,过程名字直接使用null。
SELECT
O.NAME AS "OBJECT_NAME",
NULL AS "PROCEDURE_NAME",
O.ID AS "OBJECT_ID",
1 AS "SUBPROGRAM_ID",
NULL AS "OVERLOAD",
(
CASE O.INFO1 & 0x01
WHEN 1 THEN
'PROCEDURE'
WHEN 0 THEN
'FUNCTION'
ELSE
'UNKNOWN'
END) AS "OBJECT_TYPE",
(
CASE O.INFO2
WHEN 65 THEN
'YES'
ELSE
'NO'
END) AS "AGGREGATE",
(
CASE O.INFO1 & 0x10
WHEN 0 THEN
'NO'
ELSE
'YES'
END) AS "PIPELINED",
CLS_SCH.NAME AS "IMPLTYPEOWNER",
CLS_O.NAME AS "IMPLTYPENAME",
'YES' AS "PARALLEL",
'NO' AS "INTERFACE",
(
CASE O.INFO1 & 0x40
WHEN 0 THEN
'NO'
ELSE
'YES'
END) AS "DETERMINISTIC",
(
CASE O.INFO1 & 0x20
WHEN 0 THEN
'DEFINER'
ELSE
'CURRENT_USER'
END) AS "AUTHID"
FROM
TSYSOBJECTS AS O
LEFT JOIN TSYSOBJECTS AS CLS_O ON CLS_O.ID = CAST(O.INFO3 AS INT)
LEFT JOIN TSYSOBJECTS AS CLS_SCH ON CLS_O.SCHID = CLS_SCH.ID
WHERE
(O."TYPE$" = 'SCHOBJ'
AND O."SUBTYPE$" = 'PROC'
AND O.PID = SYS_CONTEXT('USERENV', 'CURRENT_USERID'))
UNION ALL
SELECT
O_PKG.NAME AS "OBJECT_NAME",
I.NAME AS "PROCEDURE_NAME",
I.PKGID AS "OBJECT_ID",
I.MTDID + 1 AS "SUBPROGRAM_ID",
OVERLOAD,
'PACKAGE' AS "OBJECT_TYPE",
AGGREGATE,
PIPELINED,
IMPLTYPEOWNER,
IMPLTYPENAME,
PARALLEL,
INTERFACE,
DETERMINISTIC,
(
CASE O_PKG.INFO1 & 0x20
WHEN 0 THEN
'DEFINER'
ELSE
'CURRENT_USER'
END) AS "AUTHID"
FROM
SYS.SYSPKGPROCINFOS AS I,
TSYSOBJECTS AS O_PKG,
TSYSOBJECTS AS O_SCH
WHERE
(I.PKGID = O_PKG.ID
AND O_SCH.ID = O_PKG.SCHID
AND SYS_CONTEXT('USERENV', 'CURRENT_USERID') = O_SCH.PID)
|