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

CREATE PROCEDURE

ドキュメント内 Oracle9i Lite SQLリファレンス, リリース5.0 (ページ 148-153)

ALTER USER

Javaリソースの例リソースの例リソースの例リソースの例

次の文は、バイナリ・ファイルから、APPTEXTという名前のJavaリソース・スキーマ・オ ブジェクトを作成します。

CREATE JAVA RESOURCE NAMED "appText"

USING BFILE ('C:¥TEMP', 'textBundle.dat');

関連項目 関連項目 関連項目 関連項目 DROP JAVA

ALTER USER

SQLコマンド 4-35 call_spec::=

図図

図図4-20 CREATE PROCEDUREで使用されるで使用されるで使用されるで使用されるcall_spec式式式式

Java_declaration::=

図 図 図

4-21 CREATE PROCEDUREで使用されるで使用されるで使用されるで使用されるJava_declaration式式式式

用途用途 用途用途

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

コール仕様(call spec)は、SQLからコールできるようにJavaメソッドを宣言します。call specは、コール時にどのJavaメソッドをコールするかをOracle Liteに知らせます。また、

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

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

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

CREATE PROCEDURE文は、スタンドアロンのスキーマ・オブジェクトとしてプロシー

ジャを作成します。スタンドアロンのプロシージャの削除については、「DROP PROCEDURE」を参照してください。

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

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

ALTER USER

表表

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

引数 引数

引数 説明説明説明説明

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

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

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

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

Liteはユーザーのカレント・スキーマにプロシージャを作成しま す。

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

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

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

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

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

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

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

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

INです。

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

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

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

NOCOPYを使用します。

datatype 引数のデータ型。引数は、Oracle Lite SQLがサポートするどのデー

タ型でも取ることができます。

データ型で長さ、精度またはスケールは指定できません。たとえ ば、VARCHAR2(10)は無効で、VARCHAR2は有効です。Oracle Liteは、引数の長さ、精度またはスケールを、プロシージャのコー ル側の環境から導出します。

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

ALTER USER

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

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

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

に、AUTHIDにcurrent_userを使用します。

例 例 例 例

次の例は、Javaプロシージャを作成してコンパイルし、それをOracle 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[])

{

if (name.equals(goodGuy))

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

}

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

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

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

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

素にマップします。

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

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

JAVA NAME Javaメソッド名。

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

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

引数引数

引数引数 説明説明説明説明

ALTER USER

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 Liteデータベースにロードします。一度ロードすると、

EMPTriggクラス・メソッドは、Oracle 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[])';

/

CREATE PROCEDURE after_delete(

ename varchar2, salary int) as language java name

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

/

ALTER USER

SQLコマンド 4-39 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

ドキュメント内 Oracle9i Lite SQLリファレンス, リリース5.0 (ページ 148-153)