2012-04-05 79 views
2

是否可以在一個EXECUTE IMMEDIATE塊中執行一些sql命令?EXECUTE IMMEDIATE'一些命令'

什麼是錯的語法如下:

declare 
    pragma autonomous_transaction; 
begin   
    execute immediate 
    'begin 
     COMMENT ON TABLE t1 IS ''description1''; 
     COMMENT ON TABLE t2 IS ''description2'';    
    end;'; 
end; 

對於一個SQL命令時,它工作得很好:

declare 
    pragma autonomous_transaction; 
begin   
    execute immediate ' COMMENT ON TABLE t1 IS ''description1'' '; 
end; 
+2

爲什麼你需要在一個聲明中做到這一點? – 2012-04-05 15:45:33

+0

你得到什麼錯誤? – 2012-04-05 15:54:30

+0

在單個語句中執行將需要更少的重構) – Nikita 2012-04-05 19:54:25

回答

5

beginend在字符串中執行立即將被視爲PL/SQL匿名塊。在PL/SQL中不允許使用DDL,例如COMMENT。如果是的話,你不需要立即使用execute。 Oracle基本上可以同時使用PL/SQL語句塊或單個SQL語句。雖然也有批量SQL語句的API。

因此,要在PL/SQL塊或過程中運行COMMENT,您將需要execute immediate語句。

如果沒有更多的背景知識,我不能明智地評論這是否是正確的方法,或者如果只有兩個評論陳述會更好。

+0

謝謝!如果我理解正確,在一個execute immediate blok中沒有這樣的查詢來評論某些表? – Nikita 2012-04-05 16:21:35

+0

你明白了。 – 2012-04-05 19:06:10

1

好了,你可以此:

begin   
    execute immediate 
    'begin 
     execute immediate ''COMMENT ON TABLE t1 IS ''''description1'''' ''; 
     execute immediate ''COMMENT ON TABLE t2 IS ''''description2'''' ''; 
    end;'; 
end; 

但沒有多少點。

相關問題