ヘッダーをスキップ

Oracle Database プラットフォーム・ガイド
10gリリース2(10.2) for Microsoft Windows(64-bit)on Intel Itanium

B25021-03
目次
目次
索引
索引

戻る 次へ

15 Windows用アプリケーションの開発

この章では、Windows用アプリケーションの開発に関する情報の参照先を示し、外部プロシージャの作成およびデバッグ手順を説明します。

この章の項目は次のとおりです。

Windows用アプリケーション開発に関する情報の参照先

この項では、Windows用のアプリケーション開発に関する情報の参照先を記載します。これらの製品は、Oracle DatabaseサーバーのCD-ROMに含まれています。

Java拡張機能

Oracle Databaseには、Java Virtual MachineおよびJServer Acceleratorが統合されています。また、Oracle Databaseでは、Oracle Java Database Connectivity(JDBC)ドライバも提供しています。詳細は、『Oracle Database Java開発者ガイド』を参照してください。

XMLサポート

Oracle XML製品には、XML Developer's Kit(XDK)およびOracle XML SQL Utilityが含まれます。詳細は、次のマニュアルを参照してください。

インターネット・アプリケーションのサポート

Oracle Databaseでサポートされるインターネット・アプリケーションには、Oracle Portal、Oracle HTTP Server、およびPL/SQL Embedded Gatewayがあります。Oracle PortalはデータのWeb公開を可能にし、PL/SQL Embedded Gatewayは、Oracle Databaseに格納され、ブラウザから起動できるPL/SQLプロシージャを提供します。詳細は、次のマニュアルを参照してください。

Oracle COM/COM+統合機能

Oracle COM/COM+統合機能により、Javaストアド・プロシージャ開発者およびCOM/COM+開発者は、Oracle DatabaseからCOM+オブジェクトをロードできます。詳細は、次のマニュアルを参照してください。

Oracle Objects for OLE

Oracle Objects for OLE(OO4O)では、Microsoft COM AutomationおよびActiveXテクノロジをサポートするプログラミング言語またはスクリプト言語により、Oracle Databaseサーバーに格納されているデータに簡単にアクセスできます。これらの言語には、Visual Basic、Visual C++、Visual Basic For Applications(VBA)、IIS Active Server Pages(VBScriptおよびJavaScript)などがあります。詳細は、次のマニュアルを参照してください。

ODP.NET

Oracle Data Provider for .NET(ODP.NET)は、Oracle Database用データ・プロバイダの実装です。ODP.NETでは、Oracle固有のAPIを使用して、.NETアプリケーションからOracleデータおよび機能への高速で信頼性の高いアクセスを提供します。また、ODP.NETでは、Microsoft .NET Frameworkクラス・ライブラリで使用可能なクラスおよびインタフェースを使用、継承します。詳細は、次のマニュアルを参照してください。

Oracle Services for Microsoft Transaction Server

Oracle Database for Windowsでは、Oracle Databaseをリソース・マネージャとして使用して、Microsoft Transaction ServerへのCOM/COM+コンポーネントの配置を改善できます。詳細は、次のマニュアルを参照してください。

Pro*C/C++およびPro*COBOLアプリケーション

OLE DB

Windowsアプリケーションの開発

Oracle Databaseでは、Windowsアプリケーション開発者向けに総合的なAPIのセットを提供し、JavaおよびCOM/COM+開発の両方に対応しています。Oracle Databaseは、Windows Distributed interNet Application Architecture(DNA)として知られる、Microsoft社の開発および配置コンポーネントに統合されています。次の点で、Windowsでのパフォーマンスおよびデータ・アクセスが向上します。

開発者は新しいデータ・アクセス方法を学ぶ必要はなく、精通したデータ・アクセス方法を使用できるため、データベース・アプリケーションを短期間で配置できます。Oracle Databaseサーバーでは、表15-1に示す様々な方法でWindowsクライアントと通信できます。

表15-1    Oracleのデータ・アクセス方法 
開発環境  データ・アクセス方法 

Java 

JDBC

SQLJ 

COM/COM+ 

Oracle Objects for OLE(OO4O)

Oracle Provider for OLE DB

COM/COM+ Automation Feature 

Oracle Databaseデータ・アクセス・インタフェースを使用することにより、開発者は特定のOracle Database機能を利用できます。これらのインタフェースでは、柔軟性およびオープン規格への準拠も提供されます。

Oracle COM/COM+インタフェースでは、次の機能が提供されます。

インターネット・アプリケーションの開発

Oracle Databaseではインターネット・アプリケーション開発のためのWindows拡張機能を提供します。この機能により、次のようなクライアントからのアクセスが可能になります。

Microsoft Transaction Serverとの統合に加え、Oracle Databaseデータ・アクセス・インタフェースおよび開発ツールを使用して、図15-1「Microsoft Transaction ServerとOracle Databaseの統合」に示すようなインターネット・アプリケーションを作成できます。

図15-1    Microsoft Transaction ServerとOracle Databaseの統合


画像の説明

アプリケーションの移行

アプリケーションの作成には、Oracle 64ビット・コンポーネントを使用してください。ビジネス・ロジックの移行については、Microsoft Developer Network(MSDN)Webサイト(http://msdn.microsoft.com/default.asp)の「Migration Tips」を参照してください。


注意

ユーザー表のNCHAR列は、移行時に変更されません。ユーザー表のNCHAR列の変更については、『Oracle Databaseアップグレード・ガイド』のユーザーのNCHAR列のアップグレードに関する項を参照してください。 


外部プロシージャの構築

この項では、Windowsで外部プロシージャを作成および使用する方法を説明します。次のファイルは、ORACLE_BASE¥ORACLE_HOME¥rdbms¥extprocにあります。

外部プロシージャの概要

外部プロシージャは、第3世代言語(Cなど)で記述されたファンクションで、PL/SQLルーチンまたはファンクションと同様に、PL/SQLまたはSQL内からコールできます。外部プロシージャを使用すると、第3世代プログラミング言語の長所と機能をPL/SQLの環境内で利用できます。


注意

Oracle Databaseでは、特殊なインタフェースであるコール仕様も提供しています。これにより、Cからコール可能な外部プロシージャを他の言語からコールできます。 


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

外部プロシージャを使用して、特定の処理を行えます。

外部プロシージャを作成して使用するには、次の処理を行う必要があります。

インストールおよび構成

この項では、Oracle DatabaseとOracle Netのインストールおよび構成について説明します。

Oracle Databaseのインストール

次の製品をWindowsサーバーにインストールするには、Oracle Databaseのインストレーション・ガイドの手順に従います。

Oracle Net Servicesの構成

データベース・サーバーのインストール時に、Oracle Netコンフィギュレーション・アシスタントでは、外部プロシージャ・コール用のlistener.oraおよびtnsnames.oraファイルが構成されます。

アプリケーションから外部プロシージャがコールされると、Oracle Net Listenerによって、EXTPROCという外部プロシージャ・エージェントが起動されます。リスナーによって確立されたネットワーク接続を使用して、アプリケーションからEXTPROCに次の情報が渡されます。

次に、EXTPROCによってDLLがロードされ、外部プロシージャが実行されて、外部プロシージャから返された値が渡されます。

デフォルトのlistener.oraおよびtnsnames.oraファイルを上書きした場合は、次のファイルを手動で構成して、前述の外部プロシージャが起動するようにします。

外部プロシージャの作成

第3世代プログラミング言語を使用して、作成したファンクションをDLLに組み込み、EXTPROCによって起動することができます。次のコードは、Microsoft Visual C++で記述したFIND_MAXという外部プロシージャの簡単な例です。


注意

外部プロシージャは、DLLに組み込まれるため、明示的にエクスポートする必要があります。この例では、DLLEXPORTという記憶域のクラス修飾子によって、ファンクションFIND_MAXをDynamic Link Libraryからエクスポートします。 


#include <windows.h>
#define NullValue -1
/*
  This function tests if x is at least as big as y.
*/
long __declspec(dllexport) find_max(long x, 
 short x_indicator, 
long y, 
short y_indicator, 
 short *ret_indicator)
{
   /* It can be tricky to debug DLL's that are being called by a process
      that is spawned only when needed, as in this case.  
      Therefore try using the DebugBreak(); command.  
      This will start your debugger.  Uncomment the line with DebugBreak(); 
      in it and you can step right into your code.
   */
   /* DebugBreak();  */

   /* 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;
   }
}

DLLのビルド

第3世代プログラミング言語で外部プロシージャを記述した後に、適切なコンパイラおよびリンカーを使用してDLLをビルドします。前述のように、外部プロシージャを必ずエクスポートしてください。DLLをビルドしてそのファンクションをエクスポートする方法は、該当するコンパイラとリンカーのドキュメントを参照してください。

ORACLE_BASE¥ORACLE_HOME¥rdbms¥extprocに移動し、makeと入力すると、「外部プロシージャの作成」で作成した外部プロシージャFIND_MAXextern.dllというDLLに組み込むことができます。DLLをビルドした後は、システム内の任意のディレクトリに移動できます。

ただし、Oracle9iリリース2からは、EXTPROCのデフォルトの動作では、DLLはORACLE_HOME¥binまたはORACLE_HOME¥libからのみロードされます。他のディレクトリからDLLをロードするには、環境変数EXTPROC_DLLSを、完全パスで修飾されたDLL名をコロン(:)で区切ったリストに設定する必要があります。この環境変数を設定する優先方法は、listener.oraENVSパラメータを使用する方法です。

関連資料

EXTPROCの詳細は、『Oracle Databaseアプリケーション開発者ガイド - 基礎編』を参照 

外部プロシージャの登録

外部プロシージャを含むDLLをビルドした後は、外部プロシージャをOracle Databaseに登録する必要があります。

DLLにマップするためのPL/SQLライブラリを作成するには、次のようにします。

  1. listener.oraENVSパラメータに環境変数EXTPROC_DLLSを設定します。次に例を示します。

    SID_LIST_LISTENER =
     (SID_LIST =
      (SID_DESC =
       (SID_NAME=PLSExtProc)
       (ENVS=EXTPROC_DLLS=C:¥oracle¥product¥10.2.0¥db_1¥rdbms¥extproc¥extern.dll)
       (ORACLE_HOME=C:¥oracle¥product¥10.2.0¥db_1)
       (PROGRAM=extproc)
      )
     )
    
    
  2. SQL*Plusを起動します。

    C:¥> sqlplus
    
    
  3. 適切なユーザー名およびパスワードを入力してデータベースに接続します。

  4. CREATE LIBRARYコマンドでPL/SQLライブラリを作成します。

    SQL> CREATE LIBRARY externProcedures AS 'C:¥oracle¥product¥10.2.0¥db_1¥rdbms¥ 
    extproc¥extern.dll';
    
    

    externProceduresは、別名のライブラリ(実際にはデータベースのスキーマ・オブジェクト)です。

    C:¥oracle¥product¥10.2.0¥db_1¥rdbms¥extproc¥extern.dll
    
    

    これは、Windowsオペレーティング・システムのdllextern.dllへのパスです。この例では、OracleベースとしてC:¥oracle¥product¥10.2.0を、Oracleホームとしてdb_1を使用しています。


    注意

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


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

    宣言部およびBEGIN...ENDブロックのかわりにEXTERNAL句を使用するPL/SQLサブプログラムを記述します。EXTERNAL句は、PL/SQLと外部プロシージャの間のインタフェースです。EXTERNAL句は、外部プロシージャに関する次の情報を示します。

    • 名前

    • DLLの別名

    • 使用したプログラム言語

    • コール標準(省略した場合は、デフォルトのCが使用される)

    次の例では、externProceduresはDLLの別名です。このライブラリに対するEXECUTE権限が必要です。コールする外部プロシージャはfind_maxです。二重引用符で囲まれている場合、大文字と小文字は区別されます。LANGUAGEでは、外部プロシージャを作成した言語を指定します。

    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,       -- used to determine if x is a NULL value
        y long,                  -- stores value of y
        y_INDICATOR short        -- 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)
    

外部プロシージャの実行

外部プロシージャを実行するには、外部プロシージャを登録したPL/SQLプログラム・ユニット(外部ファンクションの別名)をコールする必要があります。これらのコールは、次のいずれにも含めることができます。

「外部プロシージャの登録」で、PL/SQLファンクションPLS_MAXに、外部プロシージャfind_maxが登録されました。次の手順に従って、find_maxを実行します。

  1. PL/SQLファンクションPLS_MAXUseItというPL/SQLプロシージャでコールします。

    SET SERVER OUTPUT ON
    CREATE OR REPLACE PROCEDURE UseIt AS
             a integer;
             b integer;
             c integer;
    BEGIN
             a := 1;
             b := 2;
             c := PLS_MAX(a,b);
             dbms_output.put_line('The maximum of '||a||' and '||b||' is  '||c);
    END;
    
    
  2. ルーチンを実行します。

    SQL> EXECUTE UseIt;
    

マルチスレッド・エージェント・アーキテクチャ

システムに同時にアクセスするセッションがある場合、エージェント・プロセスはセッションごとに起動されるため、数千のエージェント・プロセスが同時に実行される結果になります。エージェント・プロセスは、その時点で個々のエージェント・プロセスが実際にアクティブかどうかを考慮せず動作します。しかし、エージェント・プロセスとオープン接続のシステム・リソース消費量はつりあっていない場合があります。この問題に対処するために、マルチスレッド・エージェント・アーキテクチャが提供されています。

マルチスレッド・エージェント・アーキテクチャでは、共有されるエージェント・スレッドのプールが使用されます。ユーザー・セッションによって要求されたタスクはキューに入れられ、最初に利用可能なマルチスレッドのエージェント・スレッドによって取得されます。ユーザー接続のうち、特定の時点でアクティブになっているものはごく一部なので、マルチスレッド・アーキテクチャを使用することにより、システム・リソースがより効率的に使用されるようになります。

関連資料

  • 『Oracle Databaseアプリケーション開発者ガイド - 基礎編』の第III部

  • 『Oracle Database Heterogeneous Connectivity管理者ガイド』のマルチスレッド・エージェントに関する項

 

外部プロシージャのデバッグ

通常、外部プロシージャが失敗する場合は、Cプロトタイプに問題があります。つまり、プロトタイプがPL/SQLによって内部で生成されるプロトタイプと一致していません。この問題は、互換性のないCデータ型を指定した場合に発生することがあります。たとえば、データ型がREALOUTパラメータを渡すには、float *を指定する必要があります。floatdouble *または他のCデータ型を指定すると、データ型は一致しません。

このような場合、「外部プロシージャ・エージェントへのRPC接続が失われました。」というエラーが発生します。これは、外部プロシージャによってコア・ダンプが発生したために、エージェントextprocが異常終了したことを示します。Cプロトタイプ・パラメータを宣言する際にエラーの発生を回避するには、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

パッケージDEBUG_EXTPROCの使用

外部プロシージャのデバッグ用に、PL/SQLにはユーティリティ・パッケージDEBUG_EXTPROCが用意されています。パッケージをインストールするには、スクリプトdbgextp.sqlを実行します。このスクリプトはPL/SQLのデモ・ディレクトリにあります。

パッケージを使用するには、dbgextp.sqlの手順に従います。Oracle Databaseアカウントには、パッケージに対するEXECUTE権限およびCREATE LIBRARY権限が必要です。

外部プロシージャをデバッグするには、次のようにします。

  1. Windowsのタスク マネージャの「プロセス」ダイアログ・ボックスでExtProc.exeを選択します。

  2. 右クリックして、「デバッグ」を選択します。

  3. メッセージ・ウィンドウで「OK」をクリックします。

    Microsoft Visual C++のデバッグ方式でDLLをビルドした場合は、Visual C++が起動します。

  4. Visual C++のウィンドウで、「編集」「ブレークポイント」を選択します。

    PL/SQLデモ・ディレクトリのdbgextp.sqlで示されたブレーク・ポイントを使用します。

    関連資料

    • ORACLE_BASE¥ORACLE_HOME¥rdbms¥extproc¥readme.doc(サンプルの実行方法の説明およびデバッグのアドバイスが含まれます)

    • 『Oracle Database PL/SQLユーザーズ・ガイドおよびリファレンス』

    • 『Oracle Database Java開発者ガイド』

    • 『Oracle Databaseアプリケーション開発者ガイド - 基礎編』の「外部プロシージャのコール」

    • 『Oracle Databaseデータ・カートリッジ開発者ガイド』

     

UTL_FILEでのテキスト・ファイルへのアクセス

パッケージUTL_FILEを使用すると、PL/SQLプログラムでオペレーティング・システムのテキスト・ファイルを読取りおよび書込みできます。このパッケージは、開く、挿入、取得、終了などの標準のオペレーティング・システム・ストリーム・ファイルI/O操作の制限付きバージョンを提供します。テキスト・ファイルを読取りまたは書込みする場合は、関数fopenをコールします。この関数は、後続のプロシージャ・コールで使用するファイル・ハンドルを返します。たとえば、プロシージャput_lineは、テキスト文字列と行終端文字を開いたファイルに書き込み、プロシージャget_lineは開いたファイルから出力バッファにテキスト行を読み取ります。

関連資料

UTL_FILEの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照 

FSEEKUTL_FILEサブプログラムは、ファイル内のファイル・ポインタを指定されたバイト数だけ前方または後方に調整します。UTL_FILE.FSEEKが正しく動作するためには、ファイル内の行にプラットフォーム固有の行終端文字が必要です。Windowsプラットフォームでは、適切な行終端文字は<CR><LF>です。

Intercartridge Exchangeを使用したWebデータへのアクセス

この項の項目は次のとおりです。

Intercartridge Exchangeの構成

Intercartridge Exchangeを使用する前に、レジストリにパラメータを追加する必要があります。

  1. コマンド・プロンプトから、レジストリ エディタを起動します。

    C:¥> regedt
    
    

    「レジストリ エディタ」ウィンドウが表示されます。


    注意

    レジストリを構成する他の方法については、「regedtによるレジストリ・パラメータの管理」を参照してください。 


  2. 使用しているOracleホーム・ディレクトリのレジストリのサブキーに、HTTP_PROXYを追加します。このパラメータの位置は、コンピュータにOracleホーム・ディレクトリがいくつあるかによって決まります。ホーム・ディレクトリが1つしかない場合は、次の位置にHTTP_PROXYを追加します。

    HKEY_LOCAL_MACHINE¥SOFTWARE¥ORACLE¥HOME0
    
    

    複数のホーム・ディレクトリがある場合は、次の位置に追加します。

    HKEY_LOCAL_MACHINE¥SOFTWARE¥ORACLE¥KEY_HOME_NAME 
    
    
  3. 「編集」メニューから「値の追加」を選択します。

    「値の追加」ダイアログが表示されます。


    画像の説明

  4. 「値の名前」フィールドにHTTP_PROXYと入力し、「データ型」フィールドにREG_SZと入力します。

  5. 「OK」をクリックします。

  6. 「文字列」フィールドにwww-proxy.your-siteを入力します。


    画像の説明

この例では、Webサイトはmarketing.comです。実際のWebサイトのドメイン名を入力します。

Intercartridge Exchangeの使用

Intercartridge Exchangeでは、UTL_HTTPというストアド・パッケージを使用して、PL/SQL、SQLおよびSQL*Plus文から、Hypertext Transfer Protocol(HTTP)をコールできます。

UTL_HTTPを使用すると、次の処理を両方実行できます。

UTL_HTTPには、パッケージ・ファンクションという2つの類似したエントリ・ポイントが含まれます。パッケージ・ファンクションは、PL/SQL文とSQL文からHTTPコールを行います。

両方のパッケージ・ファンクションは、次のタスクを実行します。

両方のパッケージ・ファンクションで使用する宣言部は、次の各項で示します。

パッケージ・ファンクションUTL_HTTP.REQUEST

UTL_HTTP.REQUESTはURLを引数として使用し、そのURLから取得した最初の2000バイトのデータを返します。UTL_HTTP.REQUESTを次のように指定します。

FUNCTION REQUEST (URL IN VARCHAR2) RETURN VARCHAR2;

SQL*PlusでUTL_HTTP.REQUESTを使用する場合は、次の文を入力します。

SQL> SELECT UTL_HTTP.REQUEST('HTTP://WWW.ORACLE.COM/') FROM DUAL;

戻り値は次のようになります。

UTL_HTTP.REQUEST('HTTP://WWW.ORACLE.COM/')                         
------------------------------------------------------
<html>
<head><title>Oracle Home Page</title>
<!--changed Jan. 16, 19
1 row selected.

パッケージ・ファンクションUTL_HTTP.REQUEST_PIECES

UTL_HTTP.REQUEST_PIECESはURLを引数として使用し、そのURLから取得した2000バイトのデータのPL/SQL表を返します。最後の要素は、2000文字よりも短い場合があります。UTL_HTTP.REQUEST_PIECESの戻り型は、UTL_HTTP.HTML_PIECES型のPL/SQL表です。

UTL_HTTP.HTML_PIECES型のUTL_HTTP.REQUEST_PIECESは、次のように指定します。

type html_pieces is table of varchar2(2000) index by binary_integer;
function request_pieces (url in varchar2,
  max_pieces natural default 32767)
return html_pieces;

REQUEST_PIECESのコールは次の例のようになります。PL/SQL表のメソッドCOUNTを使用して、返される要素の数を調べていることに注意してください。要素の数は、ゼロまたはそれ以上です。

declare pieces utl_http.html_pieces;
begin 
  pieces := utl_http.request_pieces('http://www.oracle.com/'); 
   for i in 1 .. pieces.count loop
     .... -- process each piece
   end loop;
end;

UTL_HTTP.REQUEST_PIECESの第2引数(MAX_PIECES)は、オプションとして指定できます。MAX_PIECESは、UTL_HTTP.REQUEST_PIECESが返す要素の最大数です(それぞれ2000文字ですが、最後の要素は2000文字未満の場合があります)。引数はほとんどの場合、正の整数です。

たとえば、次のブロックでは、最高100個の要素(各要素は2000バイト、最後の要素はそれ未満の場合があります)をURLから取得します。ブロックでは、取得された要素の数、取得されたデータ全体の長さ(バイト数)が出力されます。

set serveroutput on

declare 
  x utl_http.html_pieces;
begin
  x := utl_http.request_pieces('http://www.oracle.com/', 100);
  dbms_output.put_line(x.count || ' pieces were retrieved.');
  dbms_output.put_line('with total length ');
  if x.count < 1 
  then dbms_output.put_line('0');
  else dbms_output.put_line
((2000 * (x.count - 1)) + length(x(x.count)));
  end if;
end;

which displays:
Statement processed.
4 pieces were retrieved.
with total length 
7687

UTL_HTTP.REQUEST_PIECESによって返されるPL/SQL表の要素は、そのURLへのHTTP要求から取得される、連続するデータです。

UTL_HTTP例外条件

この項では、パッケージ・ファンクションUTL_HTTP.REQUESTおよびUTL_HTTP.REQUEST_PIECESで発生する可能性のある例外(エラー)について説明します。

UTL_HTTP.REQUEST

PRAGMA RESTRICT_REFERENCESを使用すると、例外を表示できます。

create or replace package utl_http is
function request (url in varchar2) return varchar2;
pragma restrict_references (request, wnds, rnds, wnps, rnps);

UTL_HTTP.REQUEST_PIECES

PRAGMA RESTRICT_REFERENCESを使用すると、例外を表示できます。

create or replace package utl_http is
type html_pieces is table of varchar2(2000) index by binary_integer;
function request_pieces (url in varchar2, 
   max_pieces natural default 32767)
return html_pieces;
pragma restrict_references (request_pieces, wnds, rnds, wnps, rnps);

例外条件およびエラー・メッセージ

環境上の原因(使用可能なメモリーの不足など)により、HTTPコールアウト・サブシステムの初期化に失敗すると、例外UTL_HTTP.INIT_FAILEDが発生します。

init_failed exception;

HTTPデーモンに障害が起きたか、REQUESTまたはREQUEST_PIECESの引数がURLとして解釈できない(NULLまたは非HTTP構文である)ためにHTTPコールが失敗すると、例外UTL_HTTP.REQUEST_FAILEDが発生します。

request_failed exception;

この2つの例外は、このシステム・パッケージで定義されていますが、例外ハンドラによって明示的に捕捉されないかぎり、ユーザー定義の例外として汎用メッセージによって報告されます。

ORA-06510: PL/SQL: unhandled user-defined exception

メモリーの不足などにより、HTTP要求処理中にその他の例外状況が発生すると、UTL_HTTP.REQUESTまたはUTL_HTTP.REQUEST_PIECESでこの例外が再度発生します。

指定したURLに対応するサイトにファンクションが接続しなかったためURLへの要求から応答が得られない場合、HTML形式のエラー・メッセージが返されることがあります。

<HTML>
<HEAD>
<TITLE>Error Message</TITLE>
</HEAD>
<BODY>
<H1>Fatal Error 500</H1>
Can't Access Document: http://home.nothing.comm.
<P>
<B>Reason:</B> Can't locate remote host:  home.nothing.comm.
<P>
<P><HR>
<ADDRESS><A HREF="http://www.w3.org">
CERN-HTTPD3.0A</A></ADDRESS>
</BODY>
</HTML>

UTL_HTTP.REQUESTまたはUTL_HTTP.REQUEST_PIECESによって、例外が発生する場合、またはHTML形式のエラー・メッセージが返されるが、URLの引数が正しい場合は、ブラウザを使用して同じURLへの接続を試み、コンピュータからネットワークに接続できるかどうかを確認してください。


戻る 次へ
Oracle
Copyright © 1996, 2007 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引