| 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; |
目次
索引
![]()
|