2016-12-24 38 views
-1

我試着寫與LEFT下面插入選擇查詢的JOIN使用Oracle數據庫:插入選擇在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 ; 

這給了下面的錯誤:

ORA-00904 : "NUM_ROWS" : invalid identifier 

一個表的DDL是:

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

Oracle數據庫或MySQL之間有什麼區別?你有它標記兩個 – chiliNUT

+3

你的表創建語句顯示它沒有一個名爲'num_rows'的列。或者你的'insert'中的其他列名稱。你剛剛誤解了插入語法嗎? –

+0

剛剛有一個DOH時刻 – GurV

回答

2

的問題是語句的INSERT部分:

insert into tables (TABLE_NAME,DATA_LENGTH,NUM_ROWS) 

圓括號中的子句指定插入表中的目標列。您的版本使用查詢表中列的名稱,這些列與tables中的列不同。該子句是可選的:我們只需要在不填充所有列時指定目標列。但如果它在那裏,名稱需要匹配,所以

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

與你的帽子上看起來像一首比利喬爾的歌曲:「你有手中的唐培裏儂和你的鼻子上的月亮......」:-) –

+0

@BobJarvis - 現在我'米'我們沒有開火':) – APC

+0

令人驚歎!非常感謝@Apc –