2009-11-06 17 views
0

Salut, je suis en train d'obtenir des informations sur un package Oracle directement à partir de PHP en utilisant OCI8:Retour d'un 'paquet DESC' en PHP utilisant OCI

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

ce retour:

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

Je sais que le La commande fonctionne comme je l'ai essayé dans SQLPlus.

Est-ce que quelqu'un sait comment y parvenir?

Thx

Répondre

2

Thx pour les réponses, je pense que j'ai trouvé ma réponse.

Donc, pour ceux qui sont intéressés, comme l'a dit Vincent, je pense que pour que ça fonctionne, vous devrez créer votre propre 'DESC'. Oracle View à utiliser est « user_arguments », vous obtenez les noms fonctions/procédures, noms d'arguments et types, la position d'arguments, etc ...

 
Select * from user_arguments where package_name = 'my_package' 
+0

maintenant mon problème est d'accéder à cette vue d'un autre schéma! – ddallala

+0

k il suffit d'utiliser 'all \ _ARGUMENTS' au lieu de 'user \ _ARGUMENTS' – ddallala

+0

c'est assez standard dans Oracle. –

1

DESC est une commande SQL*Plus, il ne fonctionnera pas sur SQL*Plus. Vous pouvez écrire votre propre DESC en interrogeant les données à partir de Dictionnary un outil:

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 
3

est un SQL DESC plus commande.

Je suis loin d'Oracle depuis quelques années, mais je me penche sur le dictionnaire de données. Par exemple pour les tables que vous pourriez faire ci-dessous. Il doit y avoir aussi quelque chose pour les paquets. MA_TABLE CEEPC

est équivalent à

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

ya J'ai cherché à travers les vues du dictionnaire de données, mais ont encore trouver celui qui décrirait les paquets et les procédures (ie: nombre de paramètres et de types). La vue 'user_procedures' donne une liste et un nom de procédures mais pas beaucoup plus d'informations. – ddallala

+0

Essayez USER_SOURCE. Mais je pense que vous devrez peut-être analyser les paramètres et les types, mais peut-être vous pouvez les obtenir quelque part. – Kuberchaun