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

Oracle Java Utilities

Oracle Java Utilitiesは、Javaストアド・プロシージャを構築および配布するためのJava

ツール、CORBAオブジェクト、Enterprise JavaBeans(Oracle8i JVM付き)を提供します。

Oracle JDBC( ( ( (Java Database Connectivity)ドライバ )ドライバ )ドライバ )ドライバ

JDBCは、Javaからリレーショナル・データベースに接続するための標準Javaインタフェー

スです。 JDBC標準は、個々のプロバイダが独自のJDBCドライバを使用して標準をインプ

リメントし拡張できるよう、サン・マイクロシステムズ社によって定義されたものです。

JDBCは、X/Open SQL Call Level Interfaceに基づき、SQL92 Entry Level標準に準拠してい ます。

標準JDBC APIに加えて、Oracleドライバでは、プロパティ、タイプおよびパフォーマンス

が拡張されています。

Oracle SQLJ トランスレータ トランスレータ トランスレータ トランスレータ

SQLJにより、アプリケーション・プログラマはJavaコードにSQL操作を埋め込むことがで

きます。 SQLJプログラムは、SQLJ言語リファレンスの構文に準拠した埋込みSQL文の含ま

れたJavaプログラムです。

SQLJは、トランスレータとランタイム・コンポーネントで構成されます。

コンパイル前にトランスレータを実行すると、埋込みSQLがランタイム・コンポーネント へのコールで置き換えられます。 ランタイム・コンポーネントは、そこでSQL操作をインプ リメントします。 標準のSQLJでは、これは通常はJDBCドライバへのコールを介して行わ

れます。 Oracleデータベースの場合は、Oracle JDBC Driverが使用されます。

外部プロシージャの作成

外部プロシージャの作成 外部プロシージャの作成 外部プロシージャの作成 外部プロシージャの作成

この項では、NetWareでの外部プロシージャの作成方法と使用方法を説明します。

外部プロシージャの概要 外部プロシージャの概要 外部プロシージャの概要 外部プロシージャの概要

外部プロシージャは、C言語などの第三世代言語(3GL)で作成されたファンクションであ り、PL/SQLのプロシージャまたはファンクションであるかのようにPL/SQLやSQLから コールすることができます。 外部プロシージャを使用すると、PL/SQL環境で3GLプログラ ミング言語の長所と機能を利用できます。 次に示すプロセスに従うことでこれを実行します。

外部プロシージャの主な利点は次のとおりです。

パフォーマンス。作業のなかには、SQLトランザクション処理に適したPL/SQLより も、3GL言語で実行するほうが効率的なものもあります。

コードの再利用性。共有ライブラリは、サーバー上のPL/SQLプログラムまたは

SQL*Formsなどのクライアント・ツールから直接コールすることができます。

外部プロシージャを使用して、次のような非常に特殊なプロセスを実行できます。

科学およびエンジニアリングの問題の解決

データの分析

リアルタイムのデバイスとプロセスの制御

外部プロシージャを作成し、使用するには、次の項で説明する指示に従います。

インストールと構成

外部プロシージャの作成

共有ライブラリ(NLM)の作成

外部プロシージャの登録

外部プロシージャの実行 注意

注意注意

注意: ステップ4と5で説明する指示を結合して、外部プロシージャの 登録と実行の処理を自動化する1つのSQLスクリプトにすることができ ます。 この2つのステップを結合するSQLスクリプトの例は、

%ORACLE_HOME%¥PLSQL¥DEMO¥EXTPROC.SQLを参照してくださ

い。

外部プロシージャの作成

インストールと構成 インストールと構成 インストールと構成 インストールと構成

この項では、次のことを説明します。

Oracle8i Enterprise Editionのインストール

Net8の構成

Oracle8i Server のインストール のインストール のインストール のインストール

Oracle8i Serverをインストールする手順は、次のとおりです。

『Oracle8i for NetWare インストレーション・ガイド』で説明されている手順に従って、次の

製品をNetWareサーバーにインストールします。

Oracle8i Server

外部プロシージャをコールするPL/SQLと、外部プロシージャを実行するPL/SQL外 部プロシージャ・プログラム(EXTP81.NLM)が入っています。

Net8 Client、Net8 ServerおよびNet8 Protocol Adapters

Net8 の構成 の構成 の構成 の構成

Oracle8i Enterprise EditionのCD-ROMからNet8サーバーをインストールする場合は、

サーバー・ネットワーク・ファイルは外部プロシージャを使用するように自動的に構成され ます。

それ以外の場合に外部プロシージャを使用するには、次のNet8サーバー・ネットワーキン グ・ファイルが構成されている必要があります。

%ORACLE_HOME%¥NETWORK¥ADMIN¥LISTENER.ORA

%ORACLE_HOME%¥NETWORK¥ADMIN¥TNSNAMES.ORA

PL/SQLが外部プロシージャをコールすると、Net8リスナーはEXTPROCというセッショ

ン固有のプロセスを起動します。 PL/SQLは、このリスナーを介して次の情報をEXTPROC に渡します。

共有ライブラリ(NLM)

外部プロシージャ名

パラメータ(必要な場合)

次に、EXTPROCはNLMをロードし、外部プロシージャを起動します。

外部プロシージャの作成

1. EXTPROCのシステム識別子(SID)名とプログラム名をサーバーのLISTENER.ORA

ファイルに追加します。

LISTENER = (ADDRESS_LIST = (ADDRESS=

(PROTOCOL= IPC)

(KEY= <server-name>_lsnr) )

(ADDRESS=

(PROTOCOL= SPX)

(KEY= <server-name>_lsnr) )

(ADDRESS=

(PROTOCOL= TCP)

(Host= server.company.com) (Port= 1521)

) )

STARTUP_WAIT_TIME_LISTENER = 0 CONNECT_TIMEOUT_LISTENER = 10 TRACE_LEVEL_LISTENER = OFF SID_LIST_LISTENER = (SID_LIST = (SID_DESC =

(SID_NAME = ORCL) )

(SID_DESC =

(SID_NAME = extproc) (PROGRAM=EXTP81) )

)

2. 使用するプロトコルに応じて、EXTPROCの次のエントリの1つをサーバーの

TNSNAMES.ORAファイルに追加します。

extproc_connection_data.world = (DESCRIPTION =

(ADDRESS_LIST = (ADDRESS =

(COMMUNITY = spx.world) (PROTOCOL = SPX)

(SERVICE = server-name_lsnr) )

)

外部プロシージャの作成

(CONNECT_DATA = (SID = extproc) )

) または

extproc_connection_data.world = (DESCRIPTION =

(ADDRESS_LIST = (ADDRESS =

(COMMUNITY = tcp.world) (PROTOCOL = TCP)

(Host = server.company.com (Port = 1521)

)

(ADDRESS =

(COMMUNITY = tcp.world) (PROTOCOL = TCP)

(Host = server.company.com (Port = 1526)

) )

(CONNECT_DATA = (SID = extproc) )

)

外部プロシージャの作成 外部プロシージャの作成 外部プロシージャの作成 外部プロシージャの作成

C言語などの3GLプログラミング言語を使用してファンクションを作成し、共有ライブラリ に組み込んでEXTPROCから起動できます。 次に、Cでの単純な外部プロシージャの例を示 します。

注意注意注意

注意: SQLNET.ORAファイルの変更は不要です。 デフォルトでは、パラメー タNAMES.DEFAULT_DOMAINとNAME.DEFAULT_ZONEの値には WORLDが設定されます。 この値は、TNSNAMES.ORAファイルの

EXTPROC_CONNECTION_DATAの最後にある.WORLD拡張子と一致しま す。

外部プロシージャの作成

#include <process.h>

void main () {

ExitThread(TSR_THREAD, 0);

}

#define NullValue -1 /*

This function simply returns the returns the larger of x and y.

*/

long find_max(long x,

short x_indicator, long y,

short y_indicator, short *ret_indicator)

{

/* first check to see if you have any nulls */

/* Just return a null if either x or y is null */

if ( x_indicator==NullValue || y_indicator==NullValue) { *ret_indicator = NullValue;

return(0);

} else {

*ret_indicator = 0; /* Signify that return value is not null */

if (x >= y) return x;

else return y;

} }

共有ライブラリ(

共有ライブラリ( 共有ライブラリ(

共有ライブラリ(NLM)の作成 )の作成 )の作成 )の作成

3GLプログラミング言語で外部プロシージャを作成した後で、適切なコンパイラとリンカー を使用してNLMを作成します。前述のように、外部プロシージャを必ずエクスポートして ください。 NLMの作成とそのファンクションのエクスポートの手順は、コンパイラとリン カーのドキュメントを参照してください。

NLMを作成した後で、システム上の任意のディレクトリにそのライブラリを移動できます。

前記の例では、外部プロシージャfind_maxをEXTERN.NLMというNLMに作成できます。

外部プロシージャの作成

外部プロシージャの登録 外部プロシージャの登録 外部プロシージャの登録 外部プロシージャの登録

外部プロシージャの入ったNLMを作成した後で、外部プロシージャをOracle8iデータベー スに登録する必要があります。 これには、次の2つのステップが必要です。

1. PL/SQLライブラリを作成してNLMにマップします。

Server Managerを起動します。

:LOAD SVRMGR31

CREATE LIBRARYコマンドを使用してPL/SQLライブラリを作成します。

SVRMGR> CREATE LIBRARY externProcedures AS ’EXTERN.NLM’;

ORACLE:ORAHOME1¥NLM¥

2. PL/SQLプログラム・ユニットの仕様を作成します。

これを行うには、宣言とBEGIN...ENDブロックのかわりにEXTERNAL句を使用する

PL/SQLサブプログラムを作成します。 EXTERNAL句は、PL/SQLと外部プロシー

ジャ間のインタフェースです。 EXTERNAL句は、外部プロシージャに関する次の情報 を識別します。

名前

NLM別名

作成に使用したプログラミング言語 項目

項目項目

項目 内容内容内容内容

externProcedures 別名ライブラリ(本質的には、データベース内

のスキーマ・オブジェクト)

EXTERN.NLM NetWareオペレーティング・システムNLM

EXTERN.NLMへのパス

ORACLE:ORAHOME1¥NLM¥ この例では、Oracleホームとして

ORACLE:ORAHOME1を使用します。

注意 注意注意

注意: DBAは、PL/SQLまたはSQLからライブラリの外部プロシー ジャをコールするユーザーに対して、PL/SQLライブラリのEXECUTE権 限を付与する必要があります。

外部プロシージャの作成

外部プロシージャの実行 外部プロシージャの実行 外部プロシージャの実行 外部プロシージャの実行

外部プロシージャを実行するには、外部プロシージャを登録したPL/SQLプログラムをコー ルする必要があります。 これらのコールは、次の場所で可能です。

無名ブロック

スタンドアロン・サブプログラムとパッケージ・サブプログラム

オブジェクト型のメソッド

データベース・トリガー

SQL文(パッケージ・ファンクションのコールのみ)

「外部プロシージャの登録」の項で、PL/SQLファンクションPLS_MAXは、外部プロシー

ジャFIND_MAXを登録しました。

NLM別名。 このライブラリに対する

コールする外部プロシージャ。 二重引用符で

外部プロシージャの作成に使用した言語。

EXECUTE権限が必要です。

囲まれている場合、大/小文字が区別されます。

CREATE OR REPLACE FUNCTION PLS_MAX(

x BINARY_INTEGER, y BINARY_INTEGER) RETURN BINARY_INTEGER AS

EXTERNAL LIBRARY externProcedures NAME "find_max"

LANGUAGE C PARAMETERS (

x long, -- stores value of x

x INDICATOR short, -- this is used to determine if x is a NULL value y long, -- stores value of y

y INDICATOR short, -- this is used to determine if y is a NULL value RETURN INDICATOR short ); -- need to pass pointer to return value's

-- indicator variable to -- determine if NULL.

--This means that my function will be defined as:

--long max(long x, short x_indicator,

-- long y, short y_indicator, short * ret_indicator)