Getting a list of functions and procedure signature from oracle(从 oracle 获取函数列表和过程签名)
本文介绍了从 oracle 获取函数列表和过程签名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否有任何查询可以为我提供函数/过程的签名详细信息.我在看返回类型,函数名,参数类型,是否为IN/OUT/INOUT.
Is there any query which can provide me signature details of a Function/Procedure. I am looking at return type, function name, argument types, whether IN/OUT/INOUT.
我知道这个 线程,但它只提供名称
I am aware of this thread, but it provides only names
推荐答案
这是一个生成 PL/SQL 函数原型的小脚本:
Here's a little script that produces PL/SQL function prototypes:
DECLARE
-- Local variables here
strPrev_object VARCHAR2(30);
strReturn_type VARCHAR2(30);
strProcedure_definition VARCHAR2(32767);
BEGIN
-- This dumps out subprogram definitions. It doesn't try to build
-- package scripts; instead, it dumps the package procedures as though they were defined
-- individually, with package name preceding subprogram name.
FOR aRow IN (SELECT *
FROM USER_ARGUMENTS a
INNER JOIN (SELECT PACKAGE_NAME, OBJECT_NAME, MAX(SEQUENCE) AS MAX_SEQUENCE
FROM USER_ARGUMENTS
GROUP BY PACKAGE_NAME, OBJECT_NAME)
USING (PACKAGE_NAME, OBJECT_NAME)
WHERE PACKAGE_NAME IS NULL AND
OBJECT_NAME = '<your package, procedure, or function>'
ORDER BY PACKAGE_NAME, OBJECT_NAME, SEQUENCE)
LOOP
strProcedure_definition := NULL;
IF strPrev_object IS NOT NULL AND
strPrev_object <> aRow.OBJECT_NAME
THEN
IF strReturn_type IS NULL THEN
DBMS_OUTPUT.PUT_LINE(' );');
ELSE
DBMS_OUTPUT.PUT_LINE(' ) RETURN ' || strReturn_type || ';');
END IF;
DBMS_OUTPUT.PUT_LINE('');
END IF;
IF aRow.SEQUENCE = 1 THEN
IF aRow.ARGUMENT_NAME IS NULL THEN
strProcedure_definition := 'FUNCTION ';
strReturn_type := aRow.DATA_TYPE;
ELSE
strProcedure_definition := 'PROCEDURE ';
strReturn_type := NULL;
END IF;
IF aRow.PACKAGE_NAME IS NOT NULL THEN
strProcedure_definition := strProcedure_definition || aRow.PACKAGE_NAME || '.' || aRow.OBJECT_NAME || '(';
ELSE
strProcedure_definition := strProcedure_definition || aRow.OBJECT_NAME || '(';
END IF;
DBMS_OUTPUT.PUT_LINE(strProcedure_definition);
END IF;
IF aRow.ARGUMENT_NAME IS NOT NULL THEN
DBMS_OUTPUT.PUT_LINE(' ' || aRow.ARGUMENT_NAME || ' ' ||
CASE aRow.IN_OUT WHEN 'IN/OUT' THEN 'IN OUT' ELSE aRow.IN_OUT END || ' ' ||
aRow.DATA_TYPE || CASE WHEN aRow.SEQUENCE <> aRow.MAX_SEQUENCE THEN ',' ELSE '' END
);
END IF;
strPrev_object := aRow.OBJECT_NAME;
END LOOP; -- aRow
IF strReturn_type IS NULL THEN
DBMS_OUTPUT.PUT_LINE(' );');
ELSE
DBMS_OUTPUT.PUT_LINE(') RETURN ' || strReturn_type || ';');
END IF;
END;
分享和享受.
这篇关于从 oracle 获取函数列表和过程签名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:从 oracle 获取函数列表和过程签名


猜你喜欢
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 更改自动增量起始编号? 2021-01-01
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- 导入具有可变标题的 Excel 文件 2021-01-01
- SQL 临时表问题 2022-01-01
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01