Symfoware Parallel Server RDBユーザーズガイド 応用プログラム開発編 |
目次
索引
![]() ![]() |
第3章 プロシジャを利用する応用プログラムの作成方法 |
プロシジャをスキーマに登録するには、図:プロシジャルーチン定義文の指定方法に示すプロシジャルーチン定義文を使用します。
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文
SQL制御文の詳細については、“SQLリファレンスガイド”を参照してください。
図:プロシジャルーチンの定義例に、プロシジャルーチンの定義例を示します。
プロシジャルーチン定義をファイルに作成し、サーバ側でrdbddlexコマンドを実行してプロシジャルーチンを登録します。
例
在庫表から、在庫数量が50以下の製品に対する発注を、倉庫番号によって営業所別のテーブルに振り分けます。
入力ファイル(ファイル名 = /home/rdb/DDL/ddl.dat) ******************************************* |EXEC SQL | | CREATE PROCEDURE 在庫管理.営業所別発注処理(IN 検索キー INT) | | BEGIN | | -- SQL変数宣言 | | DECLARE 製品番号V SMALLINT; | | DECLARE 製品名V NCHAR(10); | | 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; | ******************************************* |ファイルを入力にしてrdbddlexコマンド実行 ↓ rdbddlex -d RDBDB -x /home/rdb/DDL/ddl.dat |
備考.rdbddlexコマンドでプロシジャルーチンを定義する場合、 注釈を指定することができます。
目次
索引
![]() ![]() |