Pergunta

Oi Eu estou tentando obter informações sobre um pacote Oracle diretamente do PHP usando OCI8:

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

Este retornos:

Warning: oci_execute() [function.oci-execute]: ORA-00900: invalid SQL statement in /oci8_test.php on line 16

Eu sei o comando funciona como eu tentei em SQLPlus.

Alguém sabe como conseguir isso.

Thx

Foi útil?

Solução 2

Thx para as respostas, eu acho que encontrei a minha resposta.

Assim, para quem está interessado, como disse Vincent, eu acho que para fazê-lo funcionar você terá que criar o seu próprio 'DESC'. The Oracle Vista para uso é 'user_arguments', você obtém os nomes função / procedimento, nomes de argumentos e tipos, posição do argumento, etc ...

Select * from user_arguments where package_name = 'my_package'

Outras dicas

DESC é um comando SQL Plus.

Eu estive longe da Oracle para alguns anos agora, mas olhar para o dicionário de dados. Por exemplo, para tabelas que você poderia fazer a seguir. Deve haver algo de pacotes também. DESC MINHA_TABELA

é equivalente a

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';

DESC é um comando SQL*Plus, não vai funcionar fora do SQL*Plus. Você pode escrever seu próprio DESC consultando o Dictionnary dados a partir de qualquer ferramenta:

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top