Plsql 有可能像这样立即执行吗

Plsql 有可能像这样立即执行吗,plsql,plsqldeveloper,Plsql,Plsqldeveloper,此代码适用于: 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') ;

此代码适用于:

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')  ; 
但是我需要像这样执行execute immediate语句(变量tres包含下面的数据,很抱歉语法错误,我知道它做得不好):


这可能吗?如果不可能,请给我另一个建议。谢谢

首先,您需要了解SQL查询字符串的随机部分(例如,
“来自表1 t1连接表2 t2”
)和参数之间的区别。参数是一个特定的占位符,它始终表示稍后在运行时提供的某些内容(字段、变量等)的值。在
executeimmediate
语句的
USING
子句中,只能使用参数。如果您想在运行时从部件构造查询,您可以这样做,但必须通过不同的方法处理字段和参数的名称。例如:

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
中的值替换<从服务器的角度来看,代码>表名和字段列表不是参数,而是数据库对象的静态名称。

我知道这一部分,但我对这个表几乎一无所知,因为它可能是任何表,我需要动态地这样做。这就是为什么我不能传递这些变量的原因,因为我不知道这些列的数量或信息。如果你能告诉我另一种方法。thx任何way@otoniel.cantillo那你就知道你需要什么了。在您的示例中,Ii不清楚如何接收要插入的表、列和值的名称,所以我不能说其他内容。
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;
/