0

WWW で次の「DECLARE CURSOR」ステートメントを見つけました。

CREATE OR REPLACE PROCEDURE "APART21C"."FIND_VALID_ARZTNRN"
(OUT NoOfRows BIGINT)
RESULT SETS 1
LANGUAGE SQL
SPECIFIC SQL140905135133600
BEGIN
  
  DECLARE myARZTNR CHAR(7);
  DECLARE END_TABLE INT DEFAULT 0
  ;
  DELETE FROM APART21C.TMP_LANR07_CHECK
  ;
  DECLARE C1 CURSOR FOR
  SELECT DISTINCT Arztnr 
  FROM APART21C.DMP_LEV_TMP
  ;
  DECLARE CONTINUE HANDLER FOR NOT FOUND
   SET END_TABLE = 1
  ;
  OPEN C1
  ;
  FETCH C1 INTO myARZTNR
  ;
  WHILE END_TABLE = 0 DO
  
        INSERT INTO APART21C.TMP_LANR07_CHECK
        SELECT * FROM TABLE(APART21C.CHECK_ARZTNR_BY_CHECKSUM(myARZTNR)) AS ARZTNRCHECK;
        SET NoOfRows = NoOfRows + 1;
        
        FETCH C1 INTO myARZTNR;
                
  END WHILE
  ;
  CLOSE C1
  ;
END

エラーメッセージは

"DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=<cursor declaration>;;<SQL statement>"

あなたの助けが必要です、お願いします

私は db2 の初心者ですが、MS SQL Server の経験が豊富です。ステートメント " SELECT * FROM TABLE(..." は、テーブルを返す関数を呼び出します。

4

1 に答える 1

0

以下のコードの問題

APART21C.DMP_LEV_TMP から DISTINCT Arztnr を選択するための C1 カーソルの宣言

以下のように変更して実行しました

DECLARE C1 CURSOR with HOLD FOR SELECT Arztnr FROM DMP_LEV_TMP;

于 2015-08-12T10:27:39.883 に答える