2017-08-23 8 views
-2

私の手順には以下のようなコードがあります。プロシージャーを呼び出すと、右かっこのエラーが欠落しています。私は、プロシージャの外でそれをテストすると、すぐ実行句を実行することなく、正常に動作します。 誰も私が間違いを解消するためにplsを助けるだろうか?右括弧エラーが即座に実行されない

EXECUTE IMMEDIATE ' 
    INSERT INTO prehledcen 
    (id_obchodu 
    ,id_obchodu_poradi 
    ,smer 
    ,typceny 
    ,vzdalenost 
    ,hodnotaceny 
    ,kid) 
    SELECT a.id_obchodu 
      ,a.id_obchodu_poradi 
      ,smer 
      ,''PredchoziLast'' 
      ,predchozi_last_time - datum_obchodu 
      ,predchozi_last 
      ,kid 
     FROM middle_office.f_d_obchody_zmeny_test a 
    INNER JOIN (SELECT id_obchodu 
        ,id_obchodu_poradi 
        ,MAX(dwh_insert_process) dwh_insert_process 
        ,MIN(insert_sysdate) insert_sysdate 
       FROM middle_office.f_d_obchody_zmeny_test b 
       GROUP BY id_obchodu 
         ,id_obchodu_poradi) b 
     ON b.id_obchodu = a.id_obchodu 
    AND b.id_obchodu_poradi = a.id_obchodu_poradi 
    AND a.dwh_insert_process = b.dwh_insert_process 
    WHERE (datum_obchodu >= ' || v_datum_od || ' OR 
     (datum_obchodu < ' || v_datum_od || ' AND b.insert_sysdate >= ' || v_datum_od || '))'; 
+1

なぜ動的ステートメントを使用しますか?例によると、その理由はありません。 –

+1

'v_datum_od 'の値は何ですか?とにかくバインド変数を使うべきです。 –

答えて

1

私はあなたがv_datum_odに悪い値を持っていると仮定します。これを試してみてください:

EXECUTE IMMEDIATE ' 
    INSERT INTO prehledcen 
    ... 
    WHERE (datum_obchodu >= :d1 OR (datum_obchodu < :d2 AND b.insert_sysdate >= :d3))' 
USING v_datum_od, v_datum_od, v_datum_od; 
+0

は現在正常に動作します、ありがとうございます! – JanFi86

関連する問題