2017-12-13 10 views
0

すべての手順をOracleからDB2データベースに移行する必要があります。私が知りたいのは、どうすればいいですかの構文が内部にあります.IFとしてOracleが動作します。オラクルで使用されてきたIF SET OracleからDB2へ

変数ps_iPkCooperativaで、0

オラクルコード受け取っている:私はDB2でこれをどのように行うのです

BEGIN 
    SELECT CCOOP 
     INTO ps_iPkCooperativa 
     FROM COOP 
    EXCEPTION 
     WHEN NO_DATA_FOUND 
     THEN ps_iPkCooperativa := 0; 
END; 

を?

答えて

0

は、DB2へのこのような変換することができます:名前が示すように、特異全体かのように、 考えることができ、ATOMIC複合文

BEGIN ATOMIC 
    DECLARE ps_iPkCooperativa INT; 

     SELECT CCOOP 
      INTO ps_iPkCooperativa 
      FROM COOP;   
    SIGNAL SQLSTATE '02000' -- means no_data_found 
      SET MESSAGE_TEXT='No Data Found '; 
      SET ps_iPkCooperativa = 0; 
    [email protected] 

を未処理のエラー状態が発生した場合、 その時点までに実行されたすべてのステートメントは、 と同様に失敗したとみなされ、したがってロールバックされます。 アトミック複合ステートメントは、内にネストできません。アトミック 複合ステートメント

また、あなたはSAVEPOINT Sを使用するか、明示的なを発行することはできませんATOMIC複合文の中から Sまたは ロールバックCOMMIT。

COMMIT NOTE、ROLLBACKセーブポイントATOMIC複合文は ATOMIC複合文の中に許可されていませんネストされました。

+0

Barbaros Ozhan、私は上記のクエリを実行しましたが、私がdb2で実行しようとすると、それを実行できません。 \t 'GPRSD001.COOP FROM ps_iPkCooperativa INTO \t \t CCOOP を選択します。 SIGNAL SQLSTATE '02000' \t SET ps_iPkCooperativa = 0; ' – Luiz

+0

セミコロンの末尾に '0200'をつける必要があります。 – Luiz

+0

@Luizはい、そうです、ごめんなさい。私は 'SET MESSAGE_TEXT = 'No Data Found';'部分を追加しました。 –