DB 2カーソル、ストアド・プロシージャの例説明
このブログでは、カーソル、ストアド・プロシージャの概念、使い方を具体的なsqlで説明しています.ここで注意してください.以下に貼られたSQL文はDB 2データベースで検証されたもので、SQLServerやOracleではわずかな違いがある可能性があります.ご理解ください.
次は、テーブル作成文です.
上記のsqlから2つのテーブルを作成したことがわかります:STUDENT(学生テーブル)、STUDENT_TEMP(学生_仮表)は、学生表に3つのデータを挿入した.STUDENTのすべてのデータをSTUDENTに同期させる役割を果たすストレージ・プロシージャについて説明します.TEMP.
ストアド・プロシージャは、特定の機能を達成するためのSQL文セットのセットであり、コンパイルされてデータベースに格納され、ユーザーはストアド・プロシージャの名前を指定し、パラメータ(ストアド・プロシージャにパラメータがある場合)を与えることによって繰り返し呼び出すことができます.
ストアド・プロシージャには、プロシージャ・ヘッダとプロシージャ・ボディが含まれます.CREATE PROCEDURE GENERATE_Copy_Student()は、プロシージャ名およびパラメータリストを含むプロシージャヘッダを格納します.プロシージャボディには、プロシージャを格納する変数宣言と実行可能な部分が含まれます.
このストレージ・プロシージャにはカーソル変数が含まれており、カーソルはシステムがユーザーのために開設したデータ・バッファであり、SQL文の実行結果を格納し、ユーザーはカーソルでレコードを1つずつ取得し、対応する処理を行うことができる.
このストアド・プロシージャは、カーソルを宣言し、カーソルを介してSTUDENTテーブルのすべてのレコードを取得し、すべてのレコードをSTUDENT_に挿入することです.TEMPテーブル(レコードが存在する場合は削除後に追加)では、ストアド・プロシージャがカーソルを使用する手順を説明します.
1)カーソルを宣言し、
定義カーソルは単なる説明文であり、データベースはselect文を実行しません.
2)カーソルを開く
open stuInfor;--カーソルを定義した後、カーソルを開く必要がある場合に使用します.
カーソルを開くのは実際には対応するselect文を実行し、クエリー結果をバッファに取り出します.これはカーソルがアクティブで、ポインタがクエリー結果の最初のレコードを指します.
3)カーソルポインタを押して現在のレコードを取る
FETCH stuInfor INTO stuid,stuid_temp;--
fetch文でカーソルポインタを前に1つの記録を進め、fetch文をループ実行して1つずつ結果を取り出して対応する処理を行う.
4)カーソルを閉じる
CLOSE stuInfor;--カーソルを閉じる
カーソルを閉じる役割は、結果セットが占有するバッファやその他のリソースを解放することです.閉じないカーソルは、新しいクエリー結果に関連付けられて再び開くことができます.
ストレージ・プロシージャの適用手順は、作成、実行、および削除です.対応するSQLはインスタンスにコメントを追加しましたが、ここでは繰り返しません.
次は、テーブル作成文です.
--
CREATE TABLE STUDENT (
STU_ID VARCHAR(32) NOT NULL,
STU_NAME VARCHAR(20),
STU_SEX CHARACTER(1),
PRIMARY KEY(STU_ID)
);
CREATE TABLE STUDENT_TEMP (
STU_ID VARCHAR(32) NOT NULL,
STU_NAME VARCHAR(20),
STU_SEX CHARACTER(1),
PRIMARY KEY(STU_ID)
);
-- sql
delete from STUDENT;
INSERT INTO STUDENT(STU_ID, STU_NAME, STU_SEX) VALUES('200811001', ' ', '0');
INSERT INTO STUDENT(STU_ID, STU_NAME, STU_SEX) VALUES('200811002', ' ', '1');
INSERT INTO STUDENT(STU_ID, STU_NAME, STU_SEX) VALUES('200811003', ' ', '0');
上記のsqlから2つのテーブルを作成したことがわかります:STUDENT(学生テーブル)、STUDENT_TEMP(学生_仮表)は、学生表に3つのデータを挿入した.STUDENTのすべてのデータをSTUDENTに同期させる役割を果たすストレージ・プロシージャについて説明します.TEMP.
drop PROCEDURE GENERATE_Copy_Student;--
CREATE PROCEDURE GENERATE_Copy_Student()--
BEGIN
DECLARE stuid VARCHAR(32);--
DECLARE stuid_temp VARCHAR(32);--
DECLARE stuInfor_end INTEGER DEFAULT 0;--
DECLARE stuInfor CURSOR FOR (
select Student.STU_ID,Student_Temp.STU_ID from Student left join Student_Temp on Student.STU_ID=Student_Temp.STU_ID);--
DECLARE CONTINUE HANDLER FOR NOT FOUND
begin
SET stuInfor_end = 1;--
end;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
begin
ROLLBACK;--
end;
open stuInfor;-- ,
FETCH stuInfor INTO stuid,stuid_temp;--
WHILE stuInfor_end = 0 DO
if stuid_temp is not null then --
delete from Student_Temp where stu_id=stuid;
end if;
INSERT INTO Student_Temp(STU_ID, STU_NAME, STU_SEX)
SELECT STU_ID,STU_NAME,STU_SEX from Student WHERE STU_ID=stuid;--
FETCH stuInfor INTO stuid;--
END WHILE;--
CLOSE stuInfor;--
END;
call GENERATE_Copy_Student();--
ストアド・プロシージャは、特定の機能を達成するためのSQL文セットのセットであり、コンパイルされてデータベースに格納され、ユーザーはストアド・プロシージャの名前を指定し、パラメータ(ストアド・プロシージャにパラメータがある場合)を与えることによって繰り返し呼び出すことができます.
ストアド・プロシージャには、プロシージャ・ヘッダとプロシージャ・ボディが含まれます.CREATE PROCEDURE GENERATE_Copy_Student()は、プロシージャ名およびパラメータリストを含むプロシージャヘッダを格納します.プロシージャボディには、プロシージャを格納する変数宣言と実行可能な部分が含まれます.
このストレージ・プロシージャにはカーソル変数が含まれており、カーソルはシステムがユーザーのために開設したデータ・バッファであり、SQL文の実行結果を格納し、ユーザーはカーソルでレコードを1つずつ取得し、対応する処理を行うことができる.
このストアド・プロシージャは、カーソルを宣言し、カーソルを介してSTUDENTテーブルのすべてのレコードを取得し、すべてのレコードをSTUDENT_に挿入することです.TEMPテーブル(レコードが存在する場合は削除後に追加)では、ストアド・プロシージャがカーソルを使用する手順を説明します.
1)カーソルを宣言し、
DECLARE stuInfor CURSOR FOR (
select Student.STU_ID,Student_Temp.STU_ID from Student left join Student_Temp on
Student.STU_ID=Student_Temp.STU_ID);--
定義カーソルは単なる説明文であり、データベースはselect文を実行しません.
2)カーソルを開く
open stuInfor;--カーソルを定義した後、カーソルを開く必要がある場合に使用します.
カーソルを開くのは実際には対応するselect文を実行し、クエリー結果をバッファに取り出します.これはカーソルがアクティブで、ポインタがクエリー結果の最初のレコードを指します.
3)カーソルポインタを押して現在のレコードを取る
FETCH stuInfor INTO stuid,stuid_temp;--
fetch文でカーソルポインタを前に1つの記録を進め、fetch文をループ実行して1つずつ結果を取り出して対応する処理を行う.
4)カーソルを閉じる
CLOSE stuInfor;--カーソルを閉じる
カーソルを閉じる役割は、結果セットが占有するバッファやその他のリソースを解放することです.閉じないカーソルは、新しいクエリー結果に関連付けられて再び開くことができます.
ストレージ・プロシージャの適用手順は、作成、実行、および削除です.対応するSQLはインスタンスにコメントを追加しましたが、ここでは繰り返しません.