スケーラブルデータベースサーバ 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.