MySQLのサンプル 参考URL: http:/
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:/
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しないと自動的に・・・