2011-09-07 78 views
0

这里是SQL:如何在SELECT中执行CREATE Oracle 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

谢谢,,,

回答

2

阀芯你上面的脚本到一个文件,然后执行该文件。

spool myoutput.sql 

-- Your SQL here 

spool off; 
@myoutput; 
+0

谢谢你的工作,但没有@myoutput,它说这个声明没有被正确地终止。 它究竟做了什么? –

+0

'spool'命令指示SQL * Plus(我假设您使用的是SQL * Plus)将所有输出写入到您指定的文件,以及回显到屏幕; 'spool off'关闭文件。 “@”操作符按文件名执行SQL文件...如果出现这种错误,可能我对分号过于自由;)或者生成的SQL有问题:查看myoutput .sql文件并按照您的预期检查它。 – Xophmeister

0

要执行动态SQL,因此,请检查execute immediate(见更多信息herehere)。

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; 
/

(请注意,生成的语句不包括尾随;更多)

+0

它没有工作..我认为它需要一些调整:) 谢谢 –

+0

你遇到什么问题/错误? –