• 検索結果がありません。

CREATE PROCEDURE

ドキュメント内 Oracle Database Lite SQLリファレンス, 10g(10.0.0) (ページ 154-160)

6. AND 7. OR

4.3 SQL コマンドのアルファベット順のリスト コマンドのアルファベット順のリスト コマンドのアルファベット順のリスト コマンドのアルファベット順のリスト

4.3.14 CREATE PROCEDURE

SQLコマンドのアルファベット順のリスト

SQLコマンドのアルファベット順のリスト

SQLコマンド 4-43 BNF表記法表記法表記法表記法

LANGUAGE Java_declaration Java_declaration::=

図4-23に、Java_declaration式の構文を示します。

図図図

4-23 CREATE PROCEDUREコマンドで使用されるコマンドで使用されるコマンドで使用されるコマンドで使用されるJava_declaration式式式式

BNF表記法表記法表記法表記法

JAVA NAME . string . 前提条件

前提条件前提条件 前提条件

ユーザー自身のスキーマ内でプロシージャを作成するには、データベースにSYSTEMとして 接続するか、DBA/DDL権限が必要です。

用途 用途用途 用途

スタンドアロンのストアド・プロシージャのコール仕様を作成します。

「コール仕様」は、SQLからコールできるようにJavaメソッドを宣言します。call specは、

コール時にどのJavaメソッドをコールするかをOracle Liteに知らせます。また、Oracle

Database Liteに、引数および戻り値に対してどの型変換を行うかも知らせます。

ストアド・プロシージャによって、開発、整合性、セキュリティおよびメモリー割当ての領 域で恩恵が得られます。ストアド・プロシージャのコール方法などのストアド・プロシー ジャの詳細は、『Oracle Database Lite for Java開発者ガイド』を参照してください。

ストアド・プロシージャとストアド・ファンクションは似ています。ストアド・ファンク ションは、コールされた環境内に値を返すのに対し、ストアド・プロシージャは返しませ ん。関数に固有の情報は、「CREATE FUNCTION」を参照してください。

CREATE PROCEDURE文は、スタンドアロンのスキーマ・オブジェクトとしてプロシージャ を作成します。スタンドアロン関数の削除の詳細は、「DROP PROCEDURE」を参照してく ださい。

SQLコマンドのアルファベット順のリスト

表4-19に、Create Procedureコマンドの引数をリストします。

表表表

4-19 CREATE PROCEDUREコマンドで使用される引数コマンドで使用される引数コマンドで使用される引数コマンドで使用される引数 引数

引数引数

引数 説明説明説明説明

OR REPLACE プロシージャがすでに存在する場合、再作成します。この句は、

すでに付与されているオブジェクト権限を変更(削除、再作成ま たは再付与)せずに、既存のプロシージャの定義を変更するため に使用します。

このパッケージに依存するファンクション索引があれば、Oracle Database Liteは、索引にDISABLEDのマークを付けます。

schema プロシージャを含むスキーマ。schemaを指定しないと、Oracle

Database Liteはユーザーのカレント・スキーマにプロシージャを

作成します。

procedure 作成するプロシージャの名前。

argument プロシージャの引数の名前。プロシージャが引数を受け入れない

場合、プロシージャ名の後のカッコを省略できます。

IN プロシージャをコールするときに、引数の値を指定する必要があ ることを示します。

OUT 実行後、プロシージャがこの引数の値をコール側の環境に渡すこ とを示します。

IN OUT プロシージャをコールするときに引数の値を指定する必要がある

こと、および実行後、プロシージャがこの引数の値をコール側の 環境に渡すことを示します。

IN、OUTおよびIN OUTを省略した場合、引数のデフォルトは、

INです。

このパラメータまたは別のパラメータに行われた変更は、同じ変 数が両方に渡された場合、両方の名前を通して即座に参照できま す。

プロシージャが未処理例外によって終了した場合、このパラメー タに対して行われた割当ては、コール側の変数内で参照できます。

このような効果は、特定のコールで発生することもあれば、発生 しないこともあります。これらの影響が問題ではない場合にのみ、

NOCOPYを使用します。

datatype 引数のデータ型。引数は、Oracle Database LiteSQLがサポートす

るどのデータ型でも取ることができます。

データ型で長さ、精度またはスケールは指定できません。たとえ ば、VARCHAR2(10)は無効で、VARCHAR2は有効です。Oracle

Database Liteは、引数の長さ、精度またはスケールを、プロシー

ジャのコール側の環境から導出します。

SQLコマンドのアルファベット順のリスト

SQLコマンド 4-45 使用上の注意

使用上の注意使用上の注意 使用上の注意

Oracle Database Liteは、<invoker_rights_clause>を認識しますが、実行はしません。Oracle

Database Liteは常に、AUTHIDにcurrent_userを使用します。

例例例 例

次の例は、Javaプロシージャを作成してコンパイルし、それをOracle Database Liteに対し てテストします。

1. 次のJavaプログラムを作成してコンパイルし、その名前をEMPTrigg.javaにします。

import java.sql.*;

public class EMPTrigg {

public static final String goodGuy = "Oleg";

public static void NameUpdate(String oldName, String[] newName) { if (oldName.equals(goodGuy))

newName[0] = oldName;

}

public static void SalaryUpdate(String name, int oldSalary, int newSalary[])

invoker_rights_clause Oracle Database Liteは、Oracleとの互換性のために invoker_rights_clauseを認識しますが、実行はしません。

IS SQL識別子をJavaメソッドに対応付けます。

AS SQL識別子をJavaメソッドに対応付けます。

call_spec Javaメソッド名、パラメータ型および戻り型を、対応するSQL要

素にマップします。

LANGUAGE call_specの言語を指定します。Oracleでは、CまたはJavaが使用

できます。Oracle Database Liteでは、Javaのみが使用できます。

Java_declaration Javaクラス内のメソッド名を識別します。

JAVA NAME Javaメソッド名。

string メソッドのJava実装を識別します。詳細は、『Oracle Database

Lite for Java開発者ガイド』を参照してください。

表表表

4-19 CREATE PROCEDUREコマンドで使用される引数(続き)コマンドで使用される引数(続き)コマンドで使用される引数(続き)コマンドで使用される引数(続き)

引数 引数引数

引数 説明説明説明説明

SQLコマンドのアルファベット順のリスト

{

if (name.equals(goodGuy))

newSalary[0] = Math.max(oldSalary, newSalary[0])*10;

}

public static void AfterDelete(Connection conn, String name, int salary) {

if (name.equals(goodGuy)) try {

Statement stmt = conn.createStatement();

stmt.executeUpdate(

"insert into employee values('" + name + "', " + salary + ")");

stmt.close();

} catch(SQLException e) {}

} }

2. NAMEとSALARY列を持ったEMPLOYEE表を作成します。

CREATE TABLE EMPLOYEE (NAME VARCHAR(32), SALARY INT);

3. 次の文を入力して、EMPLOYEE表に値を挿入します。

INSERT INTO EMPLOYEE VALUES ('Alice', 100);

INSERT INTO EMPLOYEE VALUES ('Bob', 100);

INSERT INTO EMPLOYEE VALUES ('Oleg', 100);

4. EMPTriggクラスをOracle Database Liteにロードします。一度ロードすると、

EMPTriggクラス・メソッドは、Oracle Database Lite内のストアド・プロシージャに なります。

CREATE JAVA CLASS USING BFILE ('c:¥', 'EMPTrigg.class');

5. CREATE PROCEDURE文を使用してSQLがEMPTriggクラス内のメソッドをコールで きるようにします。

CREATE PROCEDURE name_update(

old_name in varchar2, new_name in out varchar2) is language java name

'EMPTrigg.NameUpdate (java.lang.String, java.lang.String[])';

/

CREATE PROCEDURE salary_update(

ename varchar2, old_salary int, new_salary in out int) as language java name

'EMPTrigg.SalaryUpdate (java.lang.String, int, int[])';

SQLコマンドのアルファベット順のリスト

SQLコマンド 4-47 CREATE PROCEDURE after_delete(

ename varchar2, salary int) as language java name

'EMPTrigg.AfterDelete (java.sql.Connection, java.lang.String, int)';

/

6. 各ストアド・プロシージャのトリガーを作成します。

CREATE TRIGGER NU BEFORE UPDATE OF NAME ON EMPLOYEE FOR EACH ROW name_update (old.name, new.name);

/

CREATE TRIGGER SU BEFORE UPDATE OF SALARY ON EMPLOYEE FOR EACH ROW salary_update (name, old.salary, new.salary);

/

CREATE TRIGGER AD AFTER DELETE ON EMPLOYEE FOR EACH ROW after_delete (name, salary);

/

7. EMPLOYEE表からすべての列を選択します。

SELECT * FROM EMPLOYEE;

次の結果を返します。

NAME SALARY --- ---Alice 100 Bob 100 Oleg 100 関連項目

関連項目関連項目 関連項目

DROP PROCEDURE

SQLコマンドのアルファベット順のリスト

ドキュメント内 Oracle Database Lite SQLリファレンス, 10g(10.0.0) (ページ 154-160)