2017-02-20 3 views
0

2つのテーブル(名前はTRO_W.desc_tabとTRO_W.DET_TAB)からテーブルTemp198にデータを挿入するためにsqlを作成する必要があります。一部がテーブルに基づいて実行時に提供されているので、私は以下のクエリを書いた:plsql-テーブルフォームにデータを挿入する2つのテーブルにエラーがあります

DECLARE 
WSTS  VARCHAR2(2) := 'PP'; 
WDET VARCHAR2(100) := ''; 
WDESC VARCHAR2(100) := ''; 
CTR  NUMBER(6)  := 0; 
L_SQL  VARCHAR2(5000) := ''; 
BEGIN 
    FOR t in (SELECT DISTINCT(E_Id) FROM EnTab ORDER BY E_Id ASC) 
    LOOP 
    CTR := CTR + 1; 
    WDESC := 'TRO_W' || t.e_id || '.desc_tab'; 
    WDET := 'TRO_W' || t.e_id || '.det_tab; 
    L_SQL := 'INSERT INTO Temp198 (STS, T_ID,TENT1, TENT2, VIADATE, VIDDATE, FRMEV) ' || 
      'SELECT :p1, ,B.T_ID, TENT1, A.TENT2, A.VIADATE, A.VIDDATE, :p2 from ' || 
      WDESC B, WDET A || ' WHERE A.T_ID = B.T_ID'; 
    EXECUTE IMMEDIATE L_SQL USING WSTS, CTR; 
    END LOOP; 
EXCEPTION 
    WHEN OTHERS then 
    raise_application_error(-20000, 'Command failed: ' || l_sql, true); 
END; 
/
COMMIT; 

をしかし、この与えているエラー: 発生しまし記号「B」のいずれかを期待して、次 を(* @ %& = - +; < />でMOD残りは <>または=や〜=> = < = <>と等||部材SUBMULTISET間 LIKE4 LIKEC LIKE2 06550. 00000レムないで - 「行を! %s、列%s:\ n%s " *原因:通常、PL/SQLコンパイル・エラー *処置:

誰かが私のクエリで何が間違っているかを確認して、示唆できますか?

+0

は 'カラム名のはずPP'、または固定文字列値ということです挿入しているすべての行に対してSTS列が設定されていますか? –

答えて

0

あなたは誤った場所にテーブルエイリアスAとBを持っています。彼らは、コマンドを構成する文字列リテラルの一部である必要があり:

L_SQL := 'INSERT INTO Temp198 (STS, T_ID,TENT1, TENT2, VIADATE, VIDDATE, FRMEV) ' || 
     'SELECT :p1, ,B.T_ID, TENT1, A.TENT2, A.VIADATE, A.VIDDATE, :p2 from ' || 
     WDESC || ' B, ' || WDET || ' A WHERE A.T_ID = B.T_ID'; 

それとも現代の結合構文を使用して:

L_SQL := 'INSERT INTO Temp198 (STS, T_ID,TENT1, TENT2, VIADATE, VIDDATE, FRMEV) ' || 
     'SELECT :p1, ,B.T_ID, TENT1, A.TENT2, A.VIADATE, A.VIDDATE, :p2 from ' || 
     WDESC || ' B JOIN ' || WDET || ' A ON A.T_ID = B.T_ID'; 
+0

ありがとうございました! – Mishti

0

パラメータを使用して選択する列を指定することはできません。

L_SQL := 'INSERT INTO Temp198 (STS, T_ID,TENT1, TENT2, VIADATE, VIDDATE, FRMEV) ' || 
      'SELECT PP ,B.T_ID, TENT1, A.TENT2, A.VIADATE, A.VIDDATE, '||CTR||' from ' || 
      WDESC B||','||WDET A || ' WHERE A.T_ID = B.T_ID'; 
関連する問題