如何在Oracle中获取存储过程参数类型和大小

本文关键字:类型 参数 存储过程 获取 Oracle | 更新日期: 2023-09-27 18:02:38

要从c#调用带有输出参数的存储过程,我需要获得相应参数的数据类型和大小。我正在使用神谕。DataAccess图书馆。如何从Oracle数据库上的存储过程元数据中获取这些信息?

有人在这个答案中给出了查询SQL Server的表(如何确定c#数据访问层中存储过程输出参数的大小属性),但是我希望在Oracle中调用存储过程。

如何在Oracle中获取存储过程参数类型和大小

查询

select  a.OBJECT_NAME, data_type, sequence, in_out, data_length, data_precision, Data_scale, radix
from USER_PROCEDURES P inner join USER_ARGUMENTS a on P.OBJECT_NAME = a.OBJECT_NAME
where a.OBJECT_NAME = 'Stored Proc name'
order by sequence

我建议做一点修改:

select  a.package_name,a.OBJECT_NAME,a.argument_name, a.data_type, a.sequence, a.in_out, a.data_length, a.data_precision, a.Data_scale, a.radix
from USER_ARGUMENTS a 
join user_OBJECTS O ON O.OBJECT_ID = A.OBJECT_ID
where a.OBJECT_NAME = 'your stored procname'
and o.OBJECT_TYPE in ('PACKAGE','PROCEDURE')
order by a.object_id,sequence;

如果您有一个名为Get_ID的过程(例如),并且您也有一个名为Get_ID的包中的过程,它们的object_name是相同的,因此您将获得两个"real"的参数。程序和包内的程序。如果你两者都想要,那么就把这两个对象类型留在那里,如果你只想要&;real&;程序,然后删除'PACKAGE'