ストアドプロシージャ(Stored Procedure)とは、事前にコンパイルされたPL/SQL文の集合であり、データベースに格納されて単一のユニットとして実行されます。これは他のプログラミング言語における関数と類似しており、パラメータを受け取り、操作を実行し、値を返すことができます。
ストアドプロシージャの構造
ストアドプロシージャの構造は以下のとおりです:
PROCEDURE name [ ( parameter_list ) ]
{ IS | AS }
[ declarative_part ]
BEGIN -- 実行開始部分
statement; [ statement; ]...
[ EXCEPTION ]
exception_handler; [ exception_handler; ]... ]
END;
ストアドプロシージャの作成
CREATE PROCEDURE ステートメントを使用してストアドプロシージャを作成できます。ストアドプロシージャを作成する構文は以下のとおりです:
CREATE [OR REPLACE] PROCEDURE Procedure_name
[ (argment [ { IN | IN OUT }] Type,
argment [ { IN | OUT | IN OUT } ] Type ]
[ AUTHID DEFINER | CURRENT_USER ]
{ IS | AS }
delarification_block
BEGIN
procedure_body
EXCEPTION
exception_handler
END;
パラメータなしのストアドプロシージャの例は以下のとおりです:
obclient> CREATE TABLE loghistory
(userid VARCHAR2(20),
logdate DATE DEFAULT SYSDATE);
Query OK, 0 rows affected
obclient> DELIMITER /
obclient> CREATE OR REPLACE PROCEDURE userlogin
IS
BEGIN
INSERT INTO loghistory (userid) VALUES (USER);
END;
/
Query OK, 0 rows affected
ストアドプロシージャの呼び出し
ストアドプロシージャの作成が完了した後、ユーザーは権限付与を通じてOBClient、OceanBase開発者センターODC、またはサードパーティの開発ツールから呼び出して実行できます。
例:
obclient> SELECT * FROM loghistory;
Empty set
obclient> BEGIN
userlogin;
END;
/
Query OK, 0 rows affected
obclient> SELECT * FROM loghistory;
+--------+-----------+
| USERID | LOGDATE |
+--------+-----------+
| HR | 27-SEP-20 |
+--------+-----------+
1 row in set
obclient> COMMIT;
Query OK, 0 rows affected