ORA-00926: отсутствует ключевое слово VALUES при использовании вставки в таблицу в качестве select * from при немедленном выполнении - PullRequest
0 голосов
/ 27 мая 2019

У меня есть две таблицы emp1 и emp2. ​​Я хочу создать emp3 с помощью emp1 и emp2. ​​Все это мне нужно сделать, чтобы выполнить plsql для автоматизации кода

Я пробовал кодировать, но получаю

ORA-00926: отсутствует ключевое слово VALUES ORA-06512: в строке 9

declare
v1  varchar2(2000);
begin 
for i in 1..2
loop
v1:='insert into emp3 as select * from emp'||i||'where 1=1;';
execute immediate v1;
end loop;
end;

ORA-00926: отсутствует ключевое слово VALUES ORA-06512: в строке 9. У меня есть условие где больше, но я просто использовал таблицы «где 1 = 1» и больше, но мне нужна логика для этого, спасибо!

Ответы [ 2 ]

2 голосов
/ 27 мая 2019

Во-первых, я не думаю, что есть as.

Во-вторых, если вы распечатаете sql, проблема, вероятно, будет очевидна.

Вы можете попробовать это:

insert into emp3 
    select * from emp'||i||' where 1=1;'
0 голосов
/ 27 мая 2019

Динамический SQL сложен, потому что он превращает ошибки компиляции в ошибки времени выполнения. Например, в этом случае вам не хватает начального пробела перед where:

v1:='insert into emp3 as select * from emp'||i||'where 1=1;';
------------------------------------------------^ 

Это означает, что фактический SQL, который пытается выполнить ваш код, равен

insert into emp3 as select * from emp1where 1=1;

Что не является допустимым SQL и поэтому вы получаете ошибку.

Другая ошибка в том, что нам не нужно включать завершающий символ в конце строки. Таким образом, правильный код должен быть

v1:='insert into emp3 as select * from emp'||i||' where 1=1';

В будущем вам следует использовать код включения для отображения динамического оператора. Вы находитесь на полпути, присваивая инструкцию переменной до ее выполнения. Так что вам просто нужно войти в систему, что может быть так просто, как

dbms_output.put_line(v1);

Гораздо проще обнаружить шаровые объекты в собранной строке, чем пытаться интерпретировать объединение шаблонов и переменных.

...