2016-04-18 139 views
-2

我不能在管線18除去錯誤PLS-00103:在需要下列之一時出現符號:

ERROR:PLS-00103:出現符號 「=」 期待的 一個時以下:恆異常 表LONG_雙裁判焦時間時間戳間隔日期二進制民族性格的nchar

我的方法:

CREATE OR REPLACE PROCEDURE create_schedule(id IN VARCHAR2,ac1st IN ARCHAR2,ac2nd IN VARCHAR2,ac3rd IN VARCHAR2 ,sleeper IN VARCHAR2) 
AS 
BEGIN 
DECLARE 
    query_str VARCHAR2(512); 
    ac1 VARCHAR2(10); 
    ac2 VARCHAR2(10); 
    ac3 VARCHAR2(10); 
    slp VARCHAR2(10); 
    ac1 := 'ac1st'||id; 
    ac2 := 'ac2nd'||id; 
    ac3 := 'ac3rd'||id; 
    slp := 'sleeper'||id; 

    query_str := 'alter table schedule 
    add(:1 number default (:2) not null , 
    :3 number default (:4) not null , 
    :5 number default (:6) not null , 
    :7 number default (:8) not null )'; 
    EXECUTE IMMEDIATE query_str using ac1,ac1st,ac2,ac2nd,ac3,ac3rd,slp,sleeper ; 
commit; 
END create_schedule ; 
/
+0

不能使用動態DDL語句綁定變量。但是,爲什麼要向表中添加列 - 當然,添加時間表應該創建一個新行,而不是修改表結構?這看起來像一個非常糟糕的數據模型。 –

回答

0

你有一些錯誤(ARCHAR2參數的BEGIN位置,不需要DECLARE):

CREATE OR REPLACE PROCEDURE create_schedule(id IN VARCHAR2,ac1st IN VARCHAR2,ac2nd IN VARCHAR2,ac3rd IN VARCHAR2 ,sleeper IN VARCHAR2) 
AS 
    query_str VARCHAR2(512); 
    ac1 VARCHAR2(10); 
    ac2 VARCHAR2(10); 
    ac3 VARCHAR2(10); 
    slp VARCHAR2(10); 
begin 
    ac1 := 'ac1st'||id; 
    ac2 := 'ac2nd'||id; 
    ac3 := 'ac3rd'||id; 
    slp := 'sleeper'||id; 

    query_str := 'alter table schedule 
    add(:1 number default (:2) not null , 
    :3 number default (:4) not null , 
    :5 number default (:6) not null , 
    :7 number default (:8) not null )'; 
    EXECUTE IMMEDIATE query_str using ac1,ac1st,ac2,ac2nd,ac3,ac3rd,slp,sleeper ; 
commit; 
END create_schedule ; 
/
+0

修正了編譯錯誤,但並未真正*解釋*他們得到的確切錯誤(來自':='在錯誤的地方並被視爲聲明的無效部分,因爲您指出了錯誤出)。 –

相關問題