执行立即创建表和更新表

nam*_*ode 1 plsql

我正在使用execute immediate创建pl/sql中的临时表,并在表中插入为什么要创建表.

之后我更新了表格.但我得到错误表不存在,因为它不是创建表thr立即执行

示例代码---------

begin
  execute immediate 'create table t23 as  select ''1'' aa from dual'; 
  update t23 set aa ='2' where aa='1';
  COMMIT ;
end;
Run Code Online (Sandbox Code Playgroud)

Ton*_*ews 9

您正在使用静态SQL来执行更新,并且在PL/SQL运行之前对此进行了验证,因此发现它引用了当前不存在的表.您可以使用动态SQL来执行更新:

begin
  execute immediate 'create table t23 as  select ''1'' aa from dual'; 
  execute immediate 'update t23 set aa =''2'' where aa=''1''';
  COMMIT ;
end;
Run Code Online (Sandbox Code Playgroud)

但是,在Oracle中,首先动态创建这样的临时表确实是不好的做法.你为什么这样做?一旦我们知道也许我们可以提出更好的选择.