2016-04-18 12 views
-2

私は18行でエラーPLS-00103は、次のいずれかを期待したときにシンボルが発生しました:

ERRORを削除することはできません:PLS-00103を:記号 "=" の 1を期待して発生しました次のように一定の例外 テーブルLONG_ダブルREF char型のタイムスタンプ間隔日

マイ手順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文のバインド変数を使用することはできません:あなたは、いくつかのミス(ARCHAR2パラメータ、BEGINの位置、不要なDECLARE)を持っています。しかし、なぜ列をテーブルに追加しているのですか?スケジュールを追加すると、テーブル構造を変更するのではなく、新しい行が作成されるはずです。それは本当に悪いデータモデルのように見えます。 –

答えて

0
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

これはコンパイルエラーを修正しますが、正確なエラーを実際に説明するわけではありません(間違った場所にある ':='から、あなたが指摘した間違いのために宣言の無効な部分とみなされますでる)。 –

関連する問題