スケーラブルデータベースサーバ HiRDB Version 8 SQLリファレンス
機能
表の各行に対してSQL文の実行を繰り返します。
形式
〔開始ラベル:〕
FOR ループ変数名 AS
〔カーソル名 CURSOR 〔WITH HOLD〕FOR〕
カーソル指定 形式1
〈排他オプション〉
〔〔{WITH {SHARE|EXCLUSIVE}LOCK
|WITHOUT LOCK〔{WAIT|NOWAIT}〕}〕
〔{WITH ROLLBACK|NO WAIT}〕〕
〔FOR{UPDATE 〔OF列名〔,列名〕…〕〔NOWAIT〕|READ ONLY}〕
〔UNTIL DISCONNECT〕
DO
SQL手続き文;〔SQL手続き文;〕…
END FOR 〔終了ラベル〕
|
オペランド
共通規則
留意事項
使用例
表T1のデータのうち,列C1(INT型)の値が100以下のデータは表T2に代入し,それ以外は表T3に代入する手続き(PROC1)を定義します。
CREATE PROCEDURE PROC1 () FLBL : FOR LVN AS SELECT C1,C2,C3 FROM T1 DO IF C1 <= 100 THEN INSERT INTO T2 VALUES(LVN.C1,LVN.C2,LVN.C3) ; ELSE INSERT INTO T3 VALUES(LVN.C1,LVN.C2,LVN.C3) ; END IF ; END FOR FLBL
上記使用例で示したFOR文と等価なSQLは以下のSQLで実現できます。
CREATE PROCEDURE PROC1 ()
LVN :
BEGIN
DECLARE C1,C2,C3 INT ;
DECLARE FCN CURSOR FOR SELECT C1,C2,C3 FROM T1 ;
DECLARE AT_END CHAR(1) DEFAULT 'N' ;
OPEN FCN ;
FLBL :
WHILE AT_END != 'Y' DO
FETCH FCN INTO C1,C2,C3 ;
IF SQLCODE = 100 THEN
SET AT_END = 'Y' ;
ELSE
IF C1 <= 100 THEN
INSERT INTO T2 VALUES(LVN.C1,LVN.C2,LVN.C3) ;
ELSE
INSERT INTO T3 VALUES(LVN.C1,LVN.C2,LVN.C3) ;
END IF ;
END IF ;
END WHILE FLBL ;
CLOSE FCN ;
END LVN
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.