2011-09-07 38 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

你遇到什麼問題/錯誤? –