此代码有效:
uno:=1;
dos :='insert into TRABAJADOR('||inValuesToInsert||') values('||inValuestoPas||')';
execute IMMEDIATE dos using uno,addColN, addColS(8),addColD,addColS(100),
addColS(60),addFKColN('DEPT'),addFKColS('PAIS'),addFKColS('CATEGORIA') ;
但我需要像这样执行立即执行语句(变量tres包含下面的数据,对不起语法,我知道它做得不好):
tres:= 'dos using uno,addColN, addColS(8),addColD,addColS(100),
addColS(60),addFKColN('DEPT'),addFKColS('PAIS'),addFKColS('CATEGORIA')'
uno:=1;
dos :='insert into TRABAJADOR('||inValuesToInsert||') values('||inValuestoPas||')';
execute IMMEDIATE dos using tres;
这可能吗?如果不可能,请给我另一个建议。感谢
答案 0 :(得分:0)
首先,您需要了解SQL查询字符串的随机部分(例如,' from table1 t1 join table2 t2 '
)和参数之间的区别。参数是一个特定的占位符,它总是表示稍后将在运行时提供的某些内容(字段,变量等)的值。在USING
语句的EXECUTE IMMEDIATE
子句中,您只能使用参数。如果要在运行时从部件构造查询,可以执行此操作,但必须通过不同的方法处理字段和参数的名称。例如:
declare
field_list varchar2(100) := 'my_field1, my_field2, my_field3';
table_name varchar2(30) := 'my_table';
v1 number := 1;
v2 number := 2;
v3 number := 3;
begin
execute immediate 'insert into ' || table_name || '(' || field_list ||
') values (:p1, :p2, :p3)' using v1, v2, v3;
end;
/
此处:P1
,:P2
和:P3
是参数,将由变量v1
,v2
和v3
中的值替换。从服务器的角度来看,table_name
和field_list
不是参数,而是数据库对象的静态名称。