【问题标题】:How to get parameters properties from a stored procedure in Oracle?如何从 Oracle 中的存储过程中获取参数属性?
【发布时间】:2017-08-24 08:53:20
【问题描述】:

我正在开发一个管理面板,我们可以在其中确定哪些 stored proceduresviews 可以在 Oracle 12c 模式中从我们的微服务平台中的服务中调用。

服务必须知道过程需要哪些参数,以及视图有哪些可用列,才能调用它们。

我是管理面板,过程或视图的创建者可以通过输入这些信息来注册它,例如对象的名称、每个参数的名称、长度和数据类型。

但是如果用户只键入对象的名称然后SQL SELECT 会在表中检索过程的参数属性,并且与视图的列的属性相同,那会更优雅,因此面板会自动注册这些配置。

任何人都可以发布关于如何实现此目的的查询吗?我是 Oracle 的新手,我不知道如何查询对象元数据。

【问题讨论】:

    标签: oracle stored-procedures views oracle12c


    【解决方案1】:

    这可用于视图(我使用了 USER_... 元数据视图,但您可以使用 DBA_... 取决于用户授权):

    SELECT A.TABLE_NAME, A.COLUMN_NAME, A.DATA_TYPE
      FROM USER_TAB_COLUMNS A
      INNER JOIN USER_VIEWS B ON A.TABLE_NAME = B.VIEW_NAME
    /* WHERE A.TABLE_NAME = 'xxxx' */
     ORDER BY TABLE_NAME, COLUMN_ID;
    

    【讨论】:

      【解决方案2】:

      我相信您正在寻找这样的东西。

      SELECT *
        FROM SYS.DBA_PROCEDURES
        WHERE OBJECT_TYPE = 'PROCEDURE' 
        AND   OBJECT_NAME = 'xxxx' 
      

      一旦你有了它,你就可以从这样的东西中获取参数。

      SELECT *
        FROM SYS.ALL_ARGUMENTS  
        where object_name  = 'procedure_name';
      

      【讨论】:

      • 据我所知,PROCEDURE_NAME 列的值仅适用于作为包一部分的程序。对于不属于包(独立)的过程,只有OBJECT_NAME 包含名称。所以可能你可以消除条件PROCEDURE_NAME IS NOT NULL
      • @etsa,好点子,感谢您指出这一点,代码已更新。
      • 您不需要 SYS。如果您使用 SELECT * FROM USER_ARGUMENTS,则为前缀
      猜你喜欢
      • 2017-02-21
      • 2016-10-21
      • 2012-02-11
      • 2023-03-12
      • 1970-01-01
      • 2014-11-01
      • 2011-12-03
      • 2013-08-01
      • 2022-08-24
      相关资源
      最近更新 更多