2016-12-24 58 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 –