Stored procedures ORA-00936错误:插入查询在过程中不起作用
它显示的是ORA-00936:Oracle11g中缺少表达式错误 试一试 像这样使用Stored procedures ORA-00936错误:插入查询在过程中不起作用,stored-procedures,plsql,oracle11g,Stored Procedures,Plsql,Oracle11g,它显示的是ORA-00936:Oracle11g中缺少表达式错误 试一试 像这样使用 execute immediate 'insert into ' || rec.destinationtable || '(' || rec.destinationcolumn || ',' || rec.destinationcolumn1 || ') values ( (select ' || rec.sourcecolumn || ' from ' || rec.sourcetable||' ),(sel
execute immediate 'insert into ' || rec.destinationtable || '(' || rec.destinationcolumn || ',' || rec.destinationcolumn1 || ') values ( (select ' || rec.sourcecolumn || ' from ' || rec.sourcetable||' ),(select ' || rec.sourcecolumn || ' from ' || rec.sourcetable||'))';
如果指定要插入的cloumn名称,请在查询中省略“values”短语
execute immediate 'insert into ' || rec.destinationtable ||
'(' || rec.destinationcolumn || ',' || rec.destinationcolumn1 || ')
( select ' || rec.sourcecolumn || ' from ' || rec.sourcetable||' ,
select ' || rec.sourcecolumn || ' from ' || rec.sourcetable||')';
如果执行上述表达式,则会得到如下结果:
'insert into '
|| rec.destinationtable
|| '(' || rec.destinationcolumn
|| ',' || rec.destinationcolumn1
|| ') values ( select '
|| rec.sourcecolumn
|| ' from '
|| rec.sourcetable
|| ' ,select '
|| rec.sourcecolumn
|| ' from '
|| rec.sourcetable || ')';
这不是有效的insert语句
您正在使用VALUES子句并提供两个表达式,但这些表达式本身就是子查询,因此需要用括号括起来,例如:
insert into [destinationtable]
([destinationcolumn]
,[destinationcolumn1]
)
values (
select [sourcecolumn] from [sourcetable]
,select [sourcecolumn] from [sourcetable]
)
因此,您需要在表达式中包含它们,例如:
insert into [destinationtable]
([destinationcolumn]
,[destinationcolumn1]
)
values (
( select [sourcecolumn] from [sourcetable] )
, ( select [sourcecolumn] from [sourcetable] )
)
要使代码更加清晰,可以执行以下操作:
execute immediate
'insert into '
|| rec.destinationtable
|| '(' || rec.destinationcolumn
|| ',' || rec.destinationcolumn1
|| ') values ( ( select '
|| rec.sourcecolumn
|| ' from '
|| rec.sourcetable
|| ' ) , ( select '
|| rec.sourcecolumn
|| ' from '
|| rec.sourcetable || ' ) )';
经过深思熟虑,我已经取消了否决票。但是,您的答案并不完全正确-子查询select x from y,select z from a将不起作用。
execute immediate
'insert into '
|| rec.destinationtable
|| '(' || rec.destinationcolumn
|| ',' || rec.destinationcolumn1
|| ') values ( ( select '
|| rec.sourcecolumn
|| ' from '
|| rec.sourcetable
|| ' ) , ( select '
|| rec.sourcecolumn
|| ' from '
|| rec.sourcetable || ' ) )';
DECLARE
source1 VARCHAR2(1000);
source2 VARCHAR2(1000);
BEGIN
source1 := 'select ' || rec.sourcecolumn || ' from ' || rec.sourcetable;
source2 := 'select ' || rec.sourcecolumn || ' from ' || rec.sourcetable;
execute immediate
'insert into ' || rec.destinationtable
|| '(' || rec.destinationcolumn
|| ',' || rec.destinationcolumn1
|| ') values ('
|| '(' || source1 || ')'
|| ', (' || source2 || ')'
|| ')';
END;