2 すべてのOracle Multimedia PL/SQLパッケージAPIに共通のプロシージャ

Oracle Multimedia PL/SQLパッケージには、BLOBおよびBFILEに格納されたマルチメディア・データをOracle Databaseとローカル・ファイル・システム間で移動できるようにする共通プロシージャが含まれます。

これらの共通プロシージャは、次のPL/SQLパッケージごとに同一であるため、この章で定義されています。

  • ORD_AUDIO

  • ORD_DOC

  • ORD_IMAGE

  • ORD_VIDEO

これらの4つのOracle Multimedia PL/SQLパッケージの共通プロシージャは、それぞれordarpsp.sqlorddrpsp.sqlordirpsp.sqlおよびordvrpsp.sqlファイルで定義されています。

Oracle Multimedia PL/SQLパッケージの共通プロシージャの詳細は、次のトピックを参照してください。

2.1 Oracle Multimedia PL/SQLパッケージの例

Oracle Multimedia PL/SQLパッケージのファンクションおよびプロシージャの例では、次の表のリストを使用します。

表2-1 Oracle Multimedia PL/SQLパッケージの表

名前 用途 定義

TAUD

ORD_AUDIO PL/SQLプロシージャのデモに使用

TAUD表の定義

TDOC

ORD_DOC PL/SQLプロシージャのデモに使用

TDOC表の定義

TIMG

ORD_IMAGE PL/SQLファンクションおよびプロシージャのデモに使用

TIMG表の定義

TVID

ORD_VIDEO PL/SQLプロシージャのデモに使用

TVID表の定義

例を参照する場合、各マルチメディアPL/SQLファンクションまたはプロシージャの例とともに、ディレクトリ定義とこれらの表定義を使用してください。

2.1.1 PL/SQLパッケージの例のディレクトリ定義および設定

Oracle Multimedia PL/SQLパッケージの例では、Oracleディレクトリ・オブジェクトを使用して、メディア・ファイルが格納されるディレクトリ指定を表します。

一部の例では、mediauserを使用してユーザーを表し、c:\mydir\workを使用してメディア・ファイルを格納できるディレクトリ指定を表します。メディア・データ・ファイルの特定のディレクトリ定義およびプロシージャやファンクションに固有の他の詳細は、各PL/SQLプロシージャまたはファンクションの例を参照してください。

export( )プロシージャは、ユーザーがアクセス権を持つデータベース・ディレクトリのオブジェクトに対してのみ書き込みます。つまり、SQL文のCREATE DIRECTORYを使用して作成したディレクトリ・オブジェクト、または読取りおよび書込み権限を付与されたディレクトリ・オブジェクトにアクセスできます。

たとえば、次のSQL*Plusコマンドを実行すると、ディレクトリ・オブジェクトが作成され、ディレクトリc:\mydir\work内の任意のファイルに対する読取りおよび書込み権限がユーザーmediauserに付与されます。これらのコマンドを実行する前に、ディレクトリ・オブジェクトを作成する権限を持ったユーザーとして接続しておく必要があります。

CREATE OR REPLACE DIRECTORY AUDIODIR AS 'c:\mydir\work';
GRANT READ,WRITE ON DIRECTORY AUDIODIR TO mediauser;

importFrom( )プロシージャと、BFILEパラメータを持つ任意のファンクションまたはプロシージャは、ユーザーがアクセス権を持つデータベース・ディレクトリのオブジェクトからのみ読み取ります。つまり、SQL文のCREATE DIRECTORYを使用して作成したディレクトリ・オブジェクト、または読取り権限を付与されたディレクトリ・オブジェクトにアクセスできます。

たとえば、次のSQL*Plusコマンドを実行すると、ディレクトリ・オブジェクトが作成され、ディレクトリc:\mydir\work内の任意のファイルに対する読取り権限がユーザーmediauserに付与されます。これらのコマンドを実行する前に、ディレクトリ・オブジェクトを作成する権限を持ったユーザーとして接続しておく必要があります。

CREATE OR REPLACE DIRECTORY DOCDIR AS 'c:\mydir\work';
GRANT READ ON DIRECTORY DOCDIR TO mediauser;

2.1.2 TAUD表の定義

「Oracle Multimedia ORD_AUDIO PL/SQLパッケージ」の例では、オーディオ表TAUDを使用します。

CREATE TABLE taud(n                NUMBER, 
                  aud              BLOB,
                  attributes       CLOB,
                  mimetype         VARCHAR2(80),
                  format           VARCHAR2(31),
                  encoding         VARCHAR2(256),
                  numberofchannels INTEGER,
                  samplingrate     INTEGER,
                  samplesize       INTEGER,
                  compressiontype  VARCHAR2(4000),
                  audioduration    INTEGER)
LOB(aud) STORE AS SECUREFILE;

INSERT INTO taud VALUES(1,EMPTY_BLOB(),EMPTY_CLOB(), NULL, NULL, NULL, NULL,
   NULL, NULL, NULL, NULL);
INSERT INTO taud VALUES(2,EMPTY_BLOB(),EMPTY_CLOB(), NULL, NULL, NULL, NULL,
   NULL, NULL, NULL, NULL);
COMMIT;

2.1.3 TDOC表の定義

「Oracle Multimedia ORD_DOC PL/SQLパッケージ」の例では、ドキュメント表TDOCを使用します。

CREATE TABLE tdoc(n             NUMBER, 
                  document      BLOB, 
                  attributes    CLOB,
                  mimetype      VARCHAR2(80),
                  format        VARCHAR2(80),
                  contentlength INTEGER)
LOB(document) STORE AS SECUREFILE;

INSERT INTO tdoc VALUES(1, EMPTY_BLOB(), EMPTY_CLOB(), NULL, NULL, NULL);
INSERT INTO tdoc VALUES(2, EMPTY_BLOB(), EMPTY_CLOB(), NULL, NULL, NULL);
INSERT INTO tdoc VALUES(3, EMPTY_BLOB(), EMPTY_CLOB(), NULL, NULL, NULL);
INSERT INTO tdoc VALUES(4, EMPTY_BLOB(), EMPTY_CLOB(), NULL, NULL, NULL);
COMMIT;

2.1.4 TIMG表の定義

「Oracle Multimedia ORD_IMAGE PL/SQLパッケージ」の例では、イメージ表TIMGを使用します。

CREATE TABLE timg(n NUMBER, 
                  img BLOB,
                  attributes CLOB,
                  mimetype VARCHAR2(80),
                  width INTEGER,
                  height INTEGER,
                  fileformat VARCHAR2(4000),
                  contentformat VARCHAR2(4000),
                  compressionformat VARCHAR2(4000),
                  contentlength INTEGER)
LOB(img) STORE AS SECUREFILE;

INSERT INTO timg VALUES(1, EMPTY_BLOB(), EMPTY_CLOB(), NULL,
   NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO timg VALUES(2, EMPTY_BLOB(), EMPTY_CLOB(), NULL,
   NULL, NULL, NULL, NULL, NULL, NULL);
COMMIT;

2.1.5 TVID表の定義

「Oracle Multimedia ORD_VIDEO PL/SQLパッケージ」の例では、ビデオ表TVIDを使用します。

CREATE TABLE tvid(n NUMBER, 
                  vid BLOB,
                  attributes CLOB,
                  mimetype VARCHAR2(80),
                  format VARCHAR2(31),
                  width INTEGER,
                  height INTEGER,
                  frameresolution INTEGER,
                  framerate INTEGER,
                  videoduration INTEGER,
                  numberofframes INTEGER,
                  compressiontype VARCHAR2(4000),
                  numberofcolors INTEGER,
                  bitrate INTEGER)
LOB(vid) STORE AS SECUREFILE;

INSERT INTO tvid VALUES(1, EMPTY_BLOB(), EMPTY_CLOB(), NULL, NULL,
   NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
INSERT INTO tvid VALUES(2, EMPTY_BLOB(), EMPTY_CLOB(), NULL, NULL,
   NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
COMMIT;

2.2 PL/SQLパッケージの共通プロシージャ: export( )

構文

export(src IN BLOB, 
       dest_location IN VARCHAR2, 
       dest_name IN VARCHAR2);

説明

データベース内のBLOBのオーディオ・データを外部データ・ソースにコピーします。データが宛先にコピーされる際、データはソースBLOBに保持されます。

パラメータ

src

エクスポートするデータのソースBLOBの位置を指定します。

dest_location

ソース・データをエクスポートする宛先のファイル・ディレクトリ・オブジェクトを指定します。

dest_name

宛先のファイル名を指定します。

使用上の注意

export( )プロシージャをコールした後、必要に応じて、SQL DELETE文を発行するか、またはDBMS_LOB.TRIMプロシージャをコールして、ローカルに格納されているコンテンツを削除できます。

export( )プロシージャは、ユーザーがアクセス権を持つデータベース・ディレクトリのオブジェクトに対してのみ書き込みます。つまり、SQL文のCREATE DIRECTORYを使用して作成したディレクトリ・オブジェクト、または読取りおよび書込み権限を付与されたディレクトリ・オブジェクトにアクセスできます。(PL/SQLパッケージの例を実行するために必要なディレクトリおよび権限の詳細は、「PL/SQLパッケージの例のディレクトリ定義および設定」を参照してください。)

プラグマ

なし。

例外

なし。

ローカル・ソースから外部データ・ソースへデータをエクスポートします。

DECLARE
   audio_data BLOB;
   ctx RAW(64):=NULL;
BEGIN
   SELECT aud INTO audio_data FROM taud WHERE N=1;

   -- export blob into a file
   ORDSYS.ORD_AUDIO.export(audio_data,'AUDIODIR','testaud.dat');

EXCEPTION
   WHEN OTHERS THEN
      RAISE;
END;
/

2.3 PL/SQLパッケージの共通プロシージャ: importFrom( )

構文

importFrom(dest IN OUT NOCOPY BLOB, 
           source_type IN VARCHAR2, 
           source_location IN VARCHAR2, 
           source_name IN VARCHAR2);

説明

指定された外部データ・ソースからdestパラメータで指定されたBLOBにデータを転送します。

パラメータ

dest

データのインポート先のBLOBの位置を指定します。

source_type

ソース・データのタイプ(FILEまたはURL)を指定します。

source_location

インポート元のソース・データの位置を指定します。

source_name

ソース・データの名前を指定します。

使用上の注意

source_typeパラメータの値がFILEの場合、source_locationパラメータにはインポート対象のファイルを格納したデータベース・ディレクトリ・オブジェクトの名前が含まれ、source_nameパラメータにはインポート対象のファイルの名前が含まれます。このプロシージャを使用する前に、外部ソースの位置にディレクトリが存在するか、または作成されていることを確認する必要があります。

importFrom( )プロシージャは、ユーザーがアクセス権を持つデータベース・ディレクトリのオブジェクトからのみ読み取ります。つまり、SQL文のCREATE DIRECTORYを使用して作成したディレクトリ・オブジェクト、または読取り権限を付与されたディレクトリ・オブジェクトにアクセスできます。(PL/SQLパッケージの例を実行するために必要なディレクトリおよび権限の詳細は、「PL/SQLパッケージの例のディレクトリ定義および設定」を参照してください。)

source_typeパラメータの値がHTTPの場合、source_locationパラメータにはインポート対象のオブジェクトを格納したディレクトリを検索するために必要なベースURLが含まれ、source_nameパラメータにはインポート対象のオブジェクトの名前が含まれます。

このプロシージャは、PL/SQL UTL_HTTPパッケージを使用して、HTTPデータ・ソースからメディア・データをインポートします。環境変数を使用して、UTL_HTTPパッケージのプロキシの動作を指定できます。たとえば、LinuxおよびUNIXの場合、環境変数http_proxyをURLに設定すると、UTL_HTTPパッケージはそのURLをHTTPリクエスト用のプロキシ・サーバーとして使用する必要があります。環境変数no_proxyをドメイン名に設定すると、HTTPプロキシ・サーバーは指定したドメイン内のURLには使用されません。

関連項目:

UTL_HTTPパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください

プラグマ

なし。

例外

ORDSourceExceptions.INCOMPLETE_SOURCE_INFORMATION

この例外は、importFrom( )プロシージャをコールし、source_typeパラメータの値がNULLの場合に発生します。

ORDSourceExceptions.NULL_SOURCE

この例外は、importFrom( )プロシージャをコールし、destパラメータの値がNULLの場合に発生します。

指定した外部データ・ソースからローカル・ソースにデータをインポートします。

DECLARE
   document_data BLOB;
BEGIN
   SELECT document INTO document_data FROM tdoc WHERE N=1 FOR UPDATE;
   
   -- import file into a blob
   ORDSYS.ORD_DOC.importFrom(document_data,'file','DOCDIR','testimg.dat');

   UPDATE tdoc SET document = document_data WHERE N=1;
   COMMIT;

   SELECT document INTO document_data FROM tdoc WHERE N=2 FOR UPDATE;

   -- import file into a blob
   ORDSYS.ORD_DOC.importFrom(document_data,'file','DOCDIR','testaud.dat');

   UPDATE tdoc SET document = document_data WHERE N=2;
   COMMIT;

   SELECT document INTO document_data FROM tdoc WHERE N=3 FOR UPDATE;

   -- import file into a blob
   ORDSYS.ORD_DOC.importFrom(document_data,'file','DOCDIR','testvid.dat');

   UPDATE tdoc SET document = document_data WHERE N=3;
   COMMIT;

EXCEPTION
   WHEN OTHERS THEN
        RAISE;
END;
/

2.4 PL/SQLパッケージの共通プロシージャ: importFrom( ) (属性付き)

構文

importFrom(dest IN OUT NOCOPY BLOB, 
           source_type IN VARCHAR2, 
           source_location IN VARCHAR2, 
           source_name IN VARCHAR2, 
           format OUT VARCHAR2, 
           mime_type OUT VARCHAR2);

説明

指定された外部データ・ソースからdestパラメータで指定されたBLOBにデータを転送します。

パラメータ

dest

データのインポート先のBLOBの位置を指定します。

source_type

ソース・データのタイプ(FILEまたはURL)を指定します。

source_location

インポート元のソース・データの位置を指定します。

source_name

ソース・データの名前を指定します。

format

データのフォーマットです。

mime_type

データのMIMEタイプです。

使用上の注意

source_typeパラメータの値がFILEの場合、source_locationパラメータにはインポート対象のファイルを格納したデータベース・ディレクトリ・オブジェクトの名前が含まれ、source_nameパラメータにはインポート対象のファイルの名前が含まれます。このプロシージャを使用する前に、外部ソースの位置にディレクトリが存在するか、または作成されていることを確認する必要があります。

importFrom( ) (属性付き)プロシージャは、ユーザーがアクセス権を持つデータベース・ディレクトリのオブジェクトからのみ読み取ります。つまり、SQL文のCREATE DIRECTORYを使用して作成したディレクトリ・オブジェクト、または読取り権限を付与されたディレクトリ・オブジェクトにアクセスできます。(PL/SQLパッケージの例を実行するために必要なディレクトリおよび権限の詳細は、「PL/SQLパッケージの例のディレクトリ定義および設定」を参照してください。)

source_typeパラメータの値がHTTPの場合、source_locationパラメータにはインポート対象のオブジェクトを格納したディレクトリを検索するために必要なベースURLが含まれ、source_nameパラメータにはインポート対象のオブジェクトの名前が含まれます。

このプロシージャは、PL/SQL UTL_HTTPパッケージを使用して、HTTPデータ・ソースからメディア・データをインポートします。環境変数を使用して、UTL_HTTPパッケージのプロキシの動作を指定できます。たとえば、LinuxおよびUNIXの場合、環境変数http_proxyをURLに設定すると、UTL_HTTPパッケージはそのURLをHTTPリクエスト用のプロキシ・サーバーとして使用する必要があります。環境変数no_proxyをドメイン名に設定すると、HTTPプロキシ・サーバーは指定したドメイン内のURLには使用されません。

関連項目:

UTL_HTTPパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください

プラグマ

なし。

例外

ORDSourceExceptions.INCOMPLETE_SOURCE_INFORMATION

この例外は、importFrom( ) (属性付き)プロシージャをコールし、source_typeパラメータの値がNULLの場合に発生します

ORDSourceExceptions.NULL_SOURCE

この例外は、importFrom( ) (属性付き)プロシージャをコールし、destパラメータの値がNULLまたは初期化されていない場合に発生します。

指定した外部データ・ソースからローカル・ソースにイメージ・データをインポートします。

DECLARE
   image_data BLOB;
   img_format VARCHAR2(32):=NULL;
   img_mime_type VARCHAR2(80);
BEGIN
   SELECT img INTO image_data FROM timg WHERE N=1 FOR UPDATE;

   -- import file into a blob
   ORDSYS.ORD_IMAGE.importFrom(image_data,'file','IMAGEDIR','testimg.dat',
        img_format,img_mime_type);

   UPDATE timg SET img=image_data WHERE N=1;
   COMMIT;

EXCEPTION
   WHEN OTHERS THEN
        RAISE;
END;
/