如何在SELECT中执行CREATE Oracle SQL语句?

时间:2011-09-07 08:50:32

标签: oracle oracle10g

这是SQL:

    select 'create table XX_' || replace(replace(trim(table_id),'-','_'),'%','X') || '_LOOKUP as select * from prn_tcodes where trim(table_id) = ''' || trim(table_id) || ''';'
from  prn_tcodes
group by table_id;

我希望执行生成的SQL语句,有没有办法?

我正在使用Oracle 10g

谢谢你,,,

3 个答案:

答案 0 :(得分:3)

作为假脱机的替代方法,您可以将其作为匿名PL / SQL块运行(未经过测试!)

DECLARE 
  cursor all_codes 
      select 'create table XX_' || 
             replace(replace(trim(table_id),'-','_'),'%','X') || 
             '_LOOKUP as select * from prn_tcodes where trim(table_id) = ''' ||
             trim(table_id) as sql_stmt
      from  prn_tcodes
      group by table_id;

   rec all_codes%ROWTYPE;
BEGIN
   FOR rec IN get_objects LOOP
   BEGIN
      EXECUTE IMMEDIATE rec.sql_stmt;
   END LOOP;
END;
/

(请注意,生成的语句不再包含尾随;

答案 1 :(得分:2)

将上述脚本假脱机到文件,然后执行该文件。

spool myoutput.sql

-- Your SQL here

spool off;
@myoutput;

答案 2 :(得分:0)

您想要执行动态SQL,因此请查看execute immediate(请参阅更多信息herehere)。