Symfoware Server アプリケーション開発ガイド(JDBCドライバ編) - FUJITSU - |
目次 索引 |
第4章 ルーチンを利用するアプリケーションの作成 | > 4.1 プロシジャルーチンを利用する場合 |
プロシジャルーチンをスキーマに登録するには、以下に示すプロシジャルーチン定義文を使用します。
CREATE PROCEDURE SCM.RNAME ( IN PARA INT) (1) (2) (3) (4) (5) BEGIN DECLARE VAR INT; SET VAR = PARA + 1; INSERT INTO SCM.TBL(ITEM) VALUES(VAR); : END |
(1) スキーマ名
(2) ルーチン名
(3) パラメタモード
(4) パラメタ名
(5) データ型
プロシジャルーチンで定義できるSQL文をSQL手続き文と呼びます。プロシジャルーチンはSQL手続き文を組み合わせることで、アプリケーションロジックのルーチンの開発を行います。SQL手続き文には以下のSQL文があります。
データ操作文
トランザクション管理文(トリガからの呼出し以外)
COMMIT文
ROLLBACK文
SQL制御文
複合文
SQL変数宣言
IF文
CALL文
代入文
LOOP文
WHILE文
REPEAT文
LEAVE文
GOTO文
分岐先文
WHENEVER文
条件宣言
ハンドラ宣言
SIGNAL文(トリガからの呼出し時)
RESIGNAL文(トリガからの呼出し時)
SQL制御文の詳細については、“SQLリファレンス”を参照してください。
プロシジャルーチン定義をファイルに作成し、サーバ側でrdbddlexコマンドを実行してプロシジャルーチンを登録します。rdbddlexコマンドでプロシジャルーチンを定義する場合、 注釈を指定することができます。
定義ファイルからプロシジャルーチンを登録する例を図:定義ファイルからプロシジャルーチンを登録する例に、定義ファイルの例を図:定義ファイルの例に示します。例では、UNIX系の場合を示します。
Windowsの場合は、入力ファイル指定を、C:\USERS\DEFAULT\DDL.DATに変更してください。
例
在庫表から、在庫数量が50以下の製品に対する発注を、倉庫番号によって営業所別のテーブルに振り分けます。
rdbddlex -d RDBDB -x /home/rdb/DDL/ddl.dat ↑ 入力ファイル指定 |
ddl.dat
EXEC SQL CREATE PROCEDURE 在庫管理.営業所別発注処理(IN 検索キー INT) BEGIN -- SQL変数宣言 DECLARE 製品番号V SMALLINT; DECLARE 製品名V CHAR(20); DECLARE 在庫数量V INT; DECLARE 倉庫番号V SMALLINT; DECLARE 数量V INT; DECLARE SQLSTATE CHAR(5); : : -- カーソル宣言 DECLARE CUR1 CURSOR FOR SELECT 製品番号, 製品名, 在庫数量, 倉庫番号 FROM 在庫管理.在庫表; DECLARE CUR2 CURSOR FOR SELECT 取引先, 取引製品, 発注数量 FROM 在庫管理.発注表; : -- 検索キーに1が指定された場合,CUR1に対する検索と補充テーブルの -- INSERTを行う. IF 検索キー = 1 THEN OPEN CUR1; LABEL1: -- データが終了するまでデータを検索する. LOOP FETCH CUR1 INTO 製品番号V,製品名V,在庫数量V,倉庫番号V; IF SQLSTATE <> '00000' THEN LEAVE LABEL1; END IF; -- 在庫数量が50以下の場合, 補充データの作成を行う. IF 在庫数量V <= 50 THEN -- 補充の数量を算出する. SET 数量V = 50 - 在庫数量V; -- 倉庫番号によって発注先のテーブルを変更する. IF 倉庫番号V = 2 THEN INSERT INTO 在庫管理.営業所2(製品番号, 製品名, 数量) VALUES(製品番号V,製品名V,数量V); IF SQLSTATE <> '00000' THEN LEAVE LABEL1; END IF; ELSE INSERT INTO 在庫管理.営業所1(製品番号, 製品名, 数量) VALUES(製品番号V,製品名V,数量V); IF SQLSTATE <> '00000' THEN LEAVE LABEL1; END IF; END IF; END IF; END LOOP LABEL1; -- 検索キーに2が指定された場合, CUR2に対する処理を行う. ELSEIF 検索キー = 2 THEN OPEN CUR2; : END IF; END END-EXEC; |
目次 索引 |