DB2 9.5 で SQLプロシージャ(1)

今日は、先週辺りから課題となっている、SQLプロシージャについて
とりあえず、DOC_IDを元に、DELETE-INSERTするプロシージャhoge1を作ってみた。

CREATE PROCEDURE hoge01
(
   IN  ic_DOC_ID     VARCHAR(16)
  ,OUT oi_SQLCODE    INT
  ,OUT oc_SQLSTATE   CHAR(5)
)
  SPECIFIC hoge01
  LANGUAGE SQL
  DETERMINISTIC
  NO EXTERNAL ACTION
  MODIFIES SQL DATA
BEGIN
  /*--------------------------------------------------------*/
  /*  変数の宣言                                            */
  /*--------------------------------------------------------*/
  DECLARE vtemp    CHAR(10);
  DECLARE SQLCODE  INT     DEFAULT 0;       --SQLCODE (0:データが戻された,100:データが戻されない)
  DECLARE SQLSTATE CHAR(5) DEFAULT '00000'; --SQLSTATE
  
  DECLARE oc_DOC_ID        CHAR(16)  DEFAULT ' ';
  
  -- 条件ハンドラー用
  DECLARE vi_NOT_FOUND INT DEFAULT 0;
  /*--------------------------------------------------------*/
  /*  カーソルの宣言                                        */
  /*--------------------------------------------------------*/
  /*--------------------------------------------------------*/
  /*  条件ハンドラーの宣言                                  */
  /*--------------------------------------------------------*/
  DECLARE EXIT HANDLER FOR SQLEXCEPTION
  BEGIN
    SET vtemp       = SQLSTATE || CAST(SQLCODE AS CHAR(5));
    SET oc_SQLSTATE = SUBSTR(vtemp,1,5);
    SET oi_SQLCODE  = INT(SUBSTR(vtemp,6,5));
  END;
  /*--------------------------------------------------------*/
  /*  ステートメント                                        */
  /*--------------------------------------------------------*/
  SET oc_DOC_ID = ic_DOC_ID;
  
  DELETE FROM XXX
   WHERE DOC_ID = ic_DOC_ID
  ;
  
  INSERT INTO
     XXX
  VALUES (
     oc_DOC_ID, ..
  )
  ;
  
  COMMIT;
  
END
@

うん、うまく行った。正常系は。
はてさて、例外処理はどうするのが普通なのか?

SQL経験者のためのSQLプロシージャー入門(http://www-6.ibm.com/jp/software/data/db2univ/data/sqlprocedure.pdf)を読んでみるが、[NOT FOUND][SQLEXCEPTION][SQLWARNING][カスタム]について軽く載っているだけでサンプルも軽すぎて参考にならず。