我有两个表emp1和emp2,我想通过使用emp1和emp2创建emp3,我需要做plsql来使代码自动化
我尝试编码但是得到了
ORA-00926:第9行缺少VALUES关键字ORA-06512:
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行。 我有一个更大的where条件,但是我只使用了'where 1 = 1'和更大的表,但是我需要逻辑来表示感谢!
答案 0 :(得分:2)
首先,我认为没有as
。
第二,如果您打印出了sql,问题可能很明显。
您可以尝试以下方法:
insert into emp3
select * from emp'||i||' where 1=1;'
答案 1 :(得分:0)
动态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);
在组装的字符串中发现bloomers比尝试解释样板和变量的串联要容易得多。