2016-12-24 5 views
-1

Ich habe versucht, die folgenden Insert Auswahlabfrage mit LEFT JOIN mit einer Oracle-Datenbank zu schreiben:Einfügen wählen In ORACLE

insert into tables (TABLE_NAME,DATA_LENGTH,NUM_ROWS) 
SELECT user_tables.TABLE_NAME 
     ,SUM(ALL_TAB_COLUMNS.DATA_LENGTH) 
     ,user_tables.NUM_ROWS 
    FROM user_tables 
    LEFT JOIN ALL_TAB_COLUMNS 
     ON user_tables.TABLE_NAME = ALL_TAB_COLUMNS.TABLE_NAME 
    WHERE OWNER= 'SYSTEM' 
    AND (user_tables.TABLE_NAME ='TIMELEVEL' 
     OR user_tables.TABLE_NAME ='CHANLEVEL' 
     OR user_tables.TABLE_NAME = 'CUSTLEVEL' 
    OR user_tables.TABLE_NAME = 'PRODLEVEL' 
    OR user_tables.TABLE_NAME = 'ACTVARS') 
GROUP BY user_tables.TABLE_NAME ; 

Das gibt dem folgenden Fehler:

ORA-00904 : "NUM_ROWS" : invalid identifier 

Die DDL einer Tabelle ist :

CREATE TABLE tables (name_tables VARCHAR2(60) 
     ,tuple VARCHAR2(50), 
     taille_tuple VARCHAR2(50)) 
+2

Was ist der Unterschied zwischen einer Oracle-Datenbank oder MySQL? Sie haben es getaggt sowohl – chiliNUT

+3

Ihre Tabellenerstellungsanweisung zeigt, dass es keine Spalte namens 'num_rows' hat. Oder einen der anderen Spaltennamen in Ihrer 'Einfügung'. Haben Sie die Syntax der Insert einfach falsch verstanden? –

+0

Hatte gerade einen DOH Moment – GurV

Antwort

2

das Problem ist der INSERT Teil der Aussage:

insert into tables (TABLE_NAME,DATA_LENGTH,NUM_ROWS) 

Die Klausel in Klammern gibt die Zielspalten in der eingefügten Tabelle an. Ihre Version verwendet Namen aus Spalten in den abgefragten Tabellen, die sich von den Spalten in tables unterscheiden. Diese Klausel ist optional: Wir müssen nur die Zielspalten angeben, wenn wir nicht alle Spalten füllen. Aber wenn es da ist, müssen die Namen übereinstimmen, also

insert into tables (name_tables,tuple,taille_tuple) 
+0

mit diesem Hut auf dir sieht aus wie eine Zeile aus einem Billy Joel Song: "Du hattest den Dom Perignon in deiner Hand und den Mond auf deiner Nase" ... :-) –

+0

@BobJarvis - jetzt ich bin "wir haben das Feuer nicht gestartet" :) – APC

+0

Erstaunlich! Vielen Dank @Apc –

Verwandte Themen