2014-01-20 32 views
4

我想在程序中創建一個表。我試圖把創建查詢字符串,然後立即執行字符串。例如:如何在oracle的程序裏面創建一個表?

create or replace procedure hr.temp is 
    var1 varchar2(4000); 
begin 
    var1:='create table hr.temp(
      id number)'; 
    execute immediate var1; 
end temp; 

但是當我執行這個過程,我得到的錯誤:

ORA-00911: invalid character 
ORA-06512: at "SYS.TEMP", line 6 
. 
. 
. 

有什麼辦法,我可以做到這一點?

+3

做***不*** ***在SYS帳戶中創建程序。不要這樣做。永遠。 (一旦你將該過程移動到一個適當的賬戶中:在動態SQL中你不能指定';'字符,執行immediate只能執行一個語句,所以不需要終止字符) –

+0

由於你的建議我改變了它到hr schema,但結果是一樣的 –

+0

我刪除了';'字符,現在當我執行過程時,它開始但沒有結束,就像程序在循環中永遠不會結束! –

回答

1

試試這個。它應該工作...

create or replace procedure hr.temp is 
    var1 varchar2(4000); 
BEGIN 
    var1:='create table hr.temp2(
      id number)'; 
    EXECUTE IMMEDIATE var1; 
end temp; 
0

m.r'a_horse_with_no_name'的答案是正確的。第一點是我不應該在sys模式中創建表。

第二點是動態sql我不應該在動態sql中使用;字符。

相關問題