【问题标题】:Return a 'DESC package' in PHP using OCI使用 OCI 在 PHP 中返回“DESC 包”
【发布时间】:2010-12-13 21:06:31
【问题描述】:

您好,我正在尝试使用 OCI8 直接从 PHP 获取有关 Oracle 包的信息:

$sql = 'DESC my_package'; $stmt = oci_parse($conn, $sql); oci_execute($stmt);

返回:

警告:oci_execute() [function.oci-execute]: ORA-00900: 第 16 行 /oci8_test.php 中的 SQL 语句无效

我知道该命令在我在 SQLPlus 中尝试过时有效。

有谁知道如何做到这一点。

谢谢

【问题讨论】:

    标签: php sql oracle oci8 ora-00900


    【解决方案1】:

    谢谢大家的回复,我想我已经找到答案了。

    因此,正如文森特所说,对于任何感兴趣的人,我认为要使其发挥作用,您必须创建自己的“DESC”。 要使用的 Oracle 视图是“user_arguments”,您可以获得函数/过程名称、参数名称和类型、参数位置等...

    从 user_arguments 中选择 * 其中 package_name = 'my_package'

    【讨论】:

    • k 只使用 'all_ARGUMENTS' 而不是 'user_ARGUMENTS'
    • 这在 Oracle 中相当标准。
    【解决方案2】:

    DESC 是一个 SQL Plus 命令。

    我已经离开 Oracle 几年了,但请查看数据字典。例如,对于您可以在下面执行的表格。 Packages 也必须有一些东西。 DESC MY_TABLE

    等价于

    SELECT 
    column_name "Name", 
    nullable "Null?",
    concat(concat(concat(data_type,'('),data_length),')') "Type"
    FROM user_tab_columns
    WHERE table_name='TABLE_NAME_TO_DESCRIBE';
    

    【讨论】:

    • 是的,我一直在查看数据字典视图,但还没有找到可以描述包和过程的视图(即:参数和类型的数量)。 'user_procedures' 视图提供了程序列表和名称,但没有更多信息。
    • 试试 USER_SOURCE。但是我认为您可能必须解析出参数和类型,但也许您可以在某个地方获得它们。
    【解决方案3】:

    DESC 是一个SQL*Plus 命令,它不会在SQL*Plus 之外起作用。您可以通过任何工具查询数据字典来编写自己的DESC

    SQL> SELECT column_name, data_type, data_length,
      2         data_precision, data_scale, nullable
      3    FROM all_tab_columns
      4   WHERE table_name = 'T';
    
    
    COLUMN_NAME  DATA_TYPE  DATA_LENGTH DATA_PRECISION DATA_SCALE NULLABLE
    ------------ ---------- ----------- -------------- ---------- --------
    COLUMN1      CHAR                 6                           Y
    COLUMN2      CHAR                 6                           Y
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      相关资源
      最近更新 更多