----start
GET DIAGNOSTIC 語句用於擷取前面執行的 SQL 陳述式的相關資訊,它可以擷取以下資訊:
1、前面執行的 SQL 陳述式處理的行數<br />2、前面執行的 SQL 陳述式返回的 DB2 錯誤或警告訊息文本<br />3、與前一個 CALL 語句相關聯的過程返回的狀態值<br />
一:文法:
GET DIAGNOSTICS <sql-variable-name>=[ROW_COUNT | DB2_RETURN_STATUS | <condition-information></p><p>condition-information:<br />EXCEPTION 1 <sql-variable-name>=[MESSAGE_TEXT | DB2_TOKEN_STRING]
二:樣本:
--串連資料庫<br />CONNECT TO SAMPLE!</p><p>--建立測試表<br />CREATE TABLE TEST (A CHAR(1))!</p><p>--建立預存程序1<br />CREATE PROCEDURE TESTPROC1 (IN CH1 CHAR(2))<br />BEGIN<br /> DECLARE SQLCODE INTEGER DEFAULT 0;<br /> DECLARE SQLSTATE CHAR(5) DEFAULT '';<br /> DECLARE ERR_MSG VARCHAR(70);<br /> DECLARE R_STATE INTEGER DEFAULT 0;</p><p> --聲明異常處理模組<br /> DECLARE CONTINUE HANDLER FOR SQLEXCEPTION<br /> BEGIN<br /> --擷取前面執行的 SQL 陳述式返回的錯誤或警告訊息<br /> GET DIAGNOSTICS EXCEPTION 1 ERR_MSG=MESSAGE_TEXT;<br /> SET R_STATE=1;<br /> END;</p><p> INSERT INTO TEST VALUES (CH1);<br /> RETURN R_STATE;<br />END!</p><p>--建立預存程序2<br />CREATE PROCEDURE TESTPROC (OUT R_COUNT INTEGER, OUT R_STATE INTEGER)<br />P1:BEGIN<br /> SET R_COUNT=0;<br /> SET R_STATE=0;</p><p> --向TEST表插入資料<br /> INSERT INTO TEST (A) VALUES (1),(2);</p><p> --擷取前面執行的 SQL 陳述式處理的行數<br /> GET DIAGNOSTICS R_COUNT=ROW_COUNT;</p><p> --調用TESTPROC1<br /> CALL TESTPROC1('AB');</p><p> --擷取前一個預存程序返回的狀態值<br /> GET DIAGNOSTICS R_STATE = DB2_RETURN_STATUS;<br />END P1!</p><p>--調用預存程序2<br />CALL TESTPROC(?,?)!</p><p>--刪除預存程序<br />DROP PROCEDURE TESTPROC1!<br />DROP PROCEDURE TESTPROC!</p><p>--刪除測試表<br />DROP TABLE TEST!</p><p>--關閉串連<br />CONNECT RESET!
三:運行樣本:
將上面的代碼儲存為c:/test.sql,然後在DB2 命令視窗中執行如下命令<br />db2 -td! -vf c:/test.sql
----更多參見:SQL PL 精萃
----聲明:轉載請註明出處。
----last updated on 2010.2.8
----written by ShangBo on 2010.2.8
----end