Stored procedures ORA-00936错误:插入查询在过程中不起作用

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

它显示的是ORA-00936:Oracle11g中缺少表达式错误

试一试

像这样使用

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;