我正在尝试使用标准ADO.NET API - DbConnection.GetSchema调用获取Oracle包中声明的过程的存储过程元数据(过程名称,参数类型,参数名称等) . 我正在使用ODP驱动程序 .
我看到Package列在'Packages'和'PackageBodies'元数据集合中 . 过程参数显示在“参数”和“过程参数”集合中 . 我没有看到通过包元数据获取过程信息的方法 . 即使该过程没有任何参数,此过程的“ProcedureParameters”集合中也有一行 .
我的问题:要获取过程元数据,我是否必须查询'ProcedureParameters'集合并搜索具有所需包名称的条目?然后,我可以根据参数信息构建过程元数据 . 是否有更短或更快的方式来获取相同的信息?
2 回答
我不确定如何使用ADO.NET获得此功能,但您可以直接查询数据库以获取此信息,如下所示:
运行上述查询后,您将拥有一个结果集,其中包含PROCEDURE_NAME . 根据包名称和PROCEDURE_NAME,您可以使用以下查询查找参数信息:
分享和享受 .
在Bob的帮助下,我使用以下查询来获取包中定义的存储过程列表 .
这将返回特定用户的所有存储过程 . 然后我可以使用'ProcedureParameters'集合来获取它们的参数信息 .
注意:不要查询SYS.DBA_PROCEDURES表 . 用于执行查询的用户凭据可能没有该表的“选择”权限 .