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.sql
、orddrpsp.sql
、ordirpsp.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プロシージャのデモに使用 |
|
TDOC |
ORD_DOC PL/SQLプロシージャのデモに使用 |
|
TIMG |
ORD_IMAGE PL/SQLファンクションおよびプロシージャのデモに使用 |
|
TVID |
ORD_VIDEO PL/SQLプロシージャのデモに使用 |
例を参照する場合、各マルチメディア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に保持されます。
パラメータ
使用上の注意
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にデータを転送します。
パラメータ
使用上の注意
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にデータを転送します。
パラメータ
使用上の注意
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;
/