【发布时间】:2012-03-06 06:30:55
【问题描述】:
我需要获取 PL/SQL 过程的参数定义。
在 MS SQL 上,我们使用Information_schema.Parameters; Oracle 中的对应项(如果有)是什么?
【问题讨论】:
标签: oracle sql-server-2008 plsql information-schema
我需要获取 PL/SQL 过程的参数定义。
在 MS SQL 上,我们使用Information_schema.Parameters; Oracle 中的对应项(如果有)是什么?
【问题讨论】:
标签: oracle sql-server-2008 plsql information-schema
大部分(如果不是全部)相同的数据可以在 Oracle 中从ALL_ARGUMENTS 数据字典表中访问。 ALL_ARGUMENTS 显示您有权执行的所有过程的参数。 USER_ARGUMENTS 显示您拥有的所有过程的参数。 DBA_ARGUMENTS 向您显示数据库中存在的所有过程的参数,但您需要额外的权限才能访问 DBA_* 视图。
【讨论】:
关于存储过程参数的大部分信息都可以在ALL_ARGUMENTS 和USER_ARGUMENTS 和DBA_ARGUMENTS 中找到
这是一个使用USER_ARGUMENTS的快速示例
CREATE OR REPLACE PROCEDURE my_proc
(p_number IN NUMBER,
p_varchar IN OUT VARCHAR2 ,
p_clob IN OUT NOCOPY CLOB,
p_timestamp OUT TIMESTAMP
)
IS
BEGIN
NULL;
END;
/
CREATE OR REPLACE FUNCTION my_func
(p_date IN DATE,
p_varchar IN VARCHAR2)
RETURN BOOLEAN
IS
BEGIN
return TRUE;
END;
/
SELECT package_name,object_name, argument_name, IN_OUT , pls_type ,position
FROM user_arguments
WHERE object_name IN ('MY_PROC','MY_FUNC')
ORDER BY package_name, object_name, position;
它给出了..的输出。
Procedure created.
Function created.
PACKAGE_NAME OBJECT_NAME ARGUMENT_NAME IN_OUT PLS_TYPE POSITION
--------------------- ------------------------------ ------------------------- --------- -------------------- ----------
MY_FUNC OUT BOOLEAN 0
MY_FUNC P_DATE IN DATE 1
MY_FUNC P_VARCHAR IN VARCHAR2 2
MY_PROC P_NUMBER IN NUMBER 1
MY_PROC P_VARCHAR IN/OUT VARCHAR2 2
MY_PROC P_CLOB IN/OUT CLOB 3
MY_PROC P_TIMESTAMP OUT TIMESTAMP 4
7 rows selected.
如您所见,它包含最有用的信息.. 但没有显示 NOCOPY 提示。 为 null 的 ARGUMENT_NAME 是函数的“返回值”
ALL_ 和 DBA_ 版本将有一个额外的 OWNER 列。
关于存储过程本身的其他信息可以在 ALL_PROCEDURES 、 ALL_PLSQL_OBJECT_SETTINGS 和 ALL_OBJECTS 中找到,具体取决于您要查找的详细程度。
【讨论】: