2011-04-18 17 views
1

我在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; 
+4

80%的时间根本不需要临时表 - 你可以在一个SQL中完成。另外20%的时间,您可以使用全局临时表或PL/SQL数组。 – 2011-04-18 13:24:55

回答

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; 

然而,真的是不好的做法在Oracle中,以在第一时间动态创建这样的临时表。你为什么这样做?一旦我们知道,也许我们可以提出一个更好的选择。

+1

创建一个全局临时表。没有人能看到你的数据,你可以避免立即执行。 – 2011-04-18 13:20:26

+0

@Thomas:我可能会提出这样的看法,但目前我不知道这是否是Namita真正需要的。 – 2011-04-18 13:24:03

+1

这是我的经验,当一个pl/sql过程执行立即创建表时,它最有可能从另一个RDBMS移动代码。但就像你我不完全确定请求是什么。这就是为什么我留下评论,而不是回答。 – 2011-04-18 13:30:40