2016-12-24 3 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 into tables (TABLE_NAME,DATA_LENGTH,NUM_ROWS) 

Предложение в круглых скобках указывает целевые столбцы во вставленной таблице. Ваша версия использует имена из столбцов в запрошенных таблицах, которые отличаются от столбцов в tables. Этот раздел является необязательным: нам нужно указывать только целевые столбцы, когда мы не заполняем все столбцы. Но если это так, имена должны совпадать, поэтому

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

с этой шляпой на вас похож на линию песни Билли Джоэля: «У вас был Дом Периньон в руке и луна вверх по твоему носу» ... :-) –

+0

@BobJarvis - теперь я 'm "мы не запустили огонь" :) – APC

+0

Удивительно! спасибо большое @Apc –

Смежные вопросы