Metadatenabfrage mit Oracle8 OCI8

crazyPower

Mitglied
Moin,

ich möchte eine Abfrage erstellen, die mir für jede Tabelle einer Datenbank alle Feldnamen mit den zugehörigen Parametern ausgibt.
In TOAD kann ich per
Code:
 desc TABELLENUSER.TABELLENNAME
diese Abfrage starten. Scheinbar ist diese Abfrage, bzw. Syntax im OCI8-Modul nicht implementiert.

Ich habe also folgendes Script:
PHP:
  $sql='Select owner, table_name from all_tables where owner=\'MAXIMO\'';
 				 $dbconn = OCILogon(MAX_DBUSER, MAX_DBPASS, MAX_DB);
 				 $stmt = OCIParse($dbconn, $sql);
  				    OCIExecute($stmt);
 				 $nrows = OCIFetchStatement($stmt,$result);
  
 				 for ($i=0; $i<$nrows; $i++){
 					 $sql='desc MAXIMO.'.$result['TABLE_NAME'][$i];
 					 $stmt = OCIParse($dbconn, $sql);
 					 OCIExecute($stmt);
 					 $nrows1 = OCIFetchStatement($stmt,$result1); 
 					 $print_r(result1);
  				   }

Die Abfrage nach den Tabellen klappt noch, aber dann hapert es, und ich bekomme folgenden Fehler geworfen:
Code:
  Warning:  ociexecute(): OCIStmtExecute: ORA-00900: invalid SQL statement  in C:\\htdocs\NSU_Test\fp921\mtd.php on line 7
   
   Warning:  ocifetchstatement(): OCIFetchStatement: ORA-24374: Definition nicht erfolgt vor Abruf oder Ausführen und Abruf  in C:\htdocs\NSU_Test\fp921\mtd.php on line 8
   Array ( )

Datenbank: Oracle 8.1.7.2
PHP: 4.3.11
OCI:1.183.2.17
Apache: 2.0.54 (Win32)

Danke für eure Hilfe.

cp
 
Hallo!

DESC existiert nicht wirklich im SQL Sprachschatz von Oracle. Das ist nur eine Art Makro von SQLPlus bzw. Toad ...

Gruß Tom
 
Hi,
Danke für die Auskunft. Wo kann man sowas nachlesen?
Die eigentliche Frage lautet dann:
Und wie kann ich eine ähnliche Funktionalität erhalten?

cu

cP
 
Hi,

kenne mich mit Oracle nicht wirklich aus, aber schreib mal anstelle von

$sql='desc MAXIMO.'.$result['TABLE_NAME'][$i];

folgendes:

$sql='desc MAXIMO.'.$result[table_name'][$i];

Wenn Oracle den Spaltennamen nicht in Großbuchstaben konvertiert, greifst Du sonst auf einen nicht vorhandenen Index zu.

Ist das $i an der richtigen Position? Gehört das nicht vor [table_name']? Ist eine Frage der Array Struktur, die von OCIFetchStatement zurückgegeben wird.
 
Hi,

auch dir danke für deine Antwort. Die for-Wiederholung stimmt schon so, Das array habe ich zuvor mit print_r geprüft. Es liegt wohl doch daran, das "desc" nicht in SQL definiert ist.

cu

cP
 
Hallo!

...einfach nam unter google nach Oracle Datadictionary suchen
Dann findest du beispielsweise dies hier: http://www.sts.tu-harburg.de/teaching/docu/oracle/dictionary.html

Schau mal hier:
Code:
SQL> SELECT table_name, tablespace_name FROM user_tables WHERE table_name ='FOO';

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
FOO                            USERS



SQL> SELECT utc.COLUMN_NAME,utc.DATA_TYPE,utc.DATA_LENGTH,utc.DATA_PRECISION,utc.NULLABLE, ucc.COMMENTS FROM user_tab_columns utc INNER JOIN user_col_comments ucc ON utc.TABLE_NAME = ucc.TABLE_NAME AND utc.column_name = ucc.column_name WHERE utc.table_name = 'FOO';

COLUMN_NAME                    DATA_TYPE                                                                                          DATA_LENGTH DATA_PRECISION N COMMENTS

ID                             NUMBER                                                                                                      22                N Testkommentar
DATA                           VARCHAR2                                                                                                    32                Y

Gruß Tom
 
Zurück