カーソル

MySQLのサンプル 参考URL: http://dev.mysql.com/doc/refman/5.1/ja/stored-procedure-syntax.html

CREATE PROCEDURE curdemo()
BEGIN
  DECLARE done INT DEFAULT 0;
  DECLARE a CHAR(16);
  DECLARE b,c INT;
  DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;
  DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
  OPEN cur1;
  OPEN cur2;
  REPEAT
    FETCH cur1 INTO a, b;
    FETCH cur2 INTO c;
    IF NOT done THEN
       IF b < c THEN
          INSERT INTO test.t3 VALUES (a,b);
       ELSE
          INSERT INTO test.t3 VALUES (a,c);
       END IF;
    END IF;
  UNTIL done END REPEAT;
  CLOSE cur1;
  CLOSE cur2;
END 

ORACLEのサンプル 参考URL http://www.shift-the-oracle.com/plsql/

CREATE OR REPLACE PROCEDURE RIVUS.STEP01_SELECT2(P_DATA_1 IN VARCHAR2)
IS
	CURSOR cDual(P_DATA_2 VARCHAR2 := 'CURSOR param') IS
		SELECT P_DATA_1 COLNAME_1 FROM DUAL
		UNION ALL SELECT P_DATA_2 COLNAME_1 FROM DUAL ;
BEGIN
	FOR vRec IN cDual('xxx') LOOP
		DBMS_OUTPUT.PUT(cDual%ROWCOUNT || ':');
		DBMS_OUTPUT.PUT_LINE(vRec.COLNAME_1);
	END LOOP;
END;
/

同じカーソルでも書き方が全然違うそれがSQL。
似てると云えば、変数宣言はBASIC風なDECLARE文。
何か失敗した場合は、
BEGIN
・・・何か
EXCEPTION WHEN OTHERS THEN
— 画面出力
DBMS_OUTPUT.PUT_LINE(‘エラッた’ || ORA’ || SQLCODE || ‘:’ || SQLERRM);
— ログ出力 error_logs テーブルに書き出す
SIMPLE_LOGGER(SQLCODE, ‘INSERT ERROR’);
END;
/
 
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
・・・
と自動でやってしまう手もあるらしいが更新した後にcommitしないと自動的に・・・
 




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA