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

时间:2015-07-13 15:44:32

标签: c# oracle stored-procedures

要使用C#的输出参数调用存储过程,我需要获取数据类型和相应参数的大小。我正在使用Oracle.DataAccess库。如何从Oracle数据库的存储过程元数据中获取此信息?

有人在这个答案(How to determine size property for stored procedure output parameters in C# data access layer)中让表格查询SQL Server,但是我希望在Oracle中调用存储过程。

2 个答案:

答案 0 :(得分:1)

这是查询

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

答案 1 :(得分:0)

我建议稍微修改一下:

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 是相同的,因此您将获得两个“真实”过程的参数和包内的程序。如果两者都想要,则将两种对象类型保留在那里,如果您只想要“真实”过程,则删除 'PACKAGE'