【问题标题】:How to get stored procedure parameter types and sizes in Oracle?如何在 Oracle 中获取存储过程参数类型和大小?
【发布时间】:2015-10-01 23:26:39
【问题描述】:

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

有人在此答案 (How to determine size property for stored procedure output parameters in C# data access layer) 中提供了用于查询 SQL Server 的表,但我希望在 Oracle 中调用存储过程。

【问题讨论】:

    标签: c# oracle stored-procedures


    【解决方案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
    

    【讨论】:

    • data_length、data_precision、Data_scale 和 radix 在我的 Varchar2 数据类型的存储过程中都显示为 NULL。 varchar2 参数没有大小吗?我应该在我的 C# 代码中为它们设置一些默认值吗?
    • 没关系。有趣的是,当您输入参数时 - 无需担心设置大小。仅对于输出参数,您需要为字符串类型(varchar2、nvarchar2 等)设置大小。不适用于数字
    • 这是关于 oracle 的事情 - 你将 SP 定义为 xyz(p1 varchar2 )
    【解决方案2】:

    我建议稍微修改一下:

    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'

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 2017-02-21
      • 2015-07-29
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 2011-09-18
      • 2011-09-06
      相关资源
      最近更新 更多