0

您好我正在尝试使用 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 中尝试时有效。

有谁知道如何实现这一目标。

谢谢

4

3 回答 3

3

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';
于 2009-11-06T15:27:10.287 回答
2

Thx for the replies, I think I have found my answer.

So for anyone who is interested, as Vincent said, I think to make it work you'll have to create your own 'DESC'. The Oracle View to use is 'user_arguments', you get the function/procedure names, argument names and types, argument position, etc...

Select * from user_arguments where package_name = 'my_package'
于 2009-11-06T15:44:28.967 回答
1

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

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
于 2009-11-06T15:26:14.937 回答