ヘッダーをスキップ
Oracle Multimediaリファレンス
11gリリース1(11.1)
E05683-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

4 ORDDoc

Oracle Multimediaでは、イメージ、オーディオ、ビデオなど、すべてのメディア・データの格納および管理をサポートするORDDocオブジェクト型が記述されます。

ORDDocオブジェクト型は、orddspec.sqlファイルで定義されています。 インストール後、このファイルは次のOracleホーム・ディレクトリに格納されています。

<ORACLE_HOME>\ord\im\admin(Windowsの場合)

<ORACLE_HOME>/ord/im/admin(LinuxおよびUNIXの場合)

Oracle Multimediaには、ORDDocオブジェクト型について次の情報が含まれます。

4.1 ORDDocオブジェクトの例

この章の例では、Product Mediaサンプル・スキーマのONLINE_MEDIA表を使用しています。ご使用のコンピュータでこれらの例を再現するには、まず、ORDDocのコンストラクタ、およびimport( )とimportFrom( )メソッドの項に示す例を実行する必要があります。例に示すファイルは、実際のファイルに置き換えてください。また、ユーザーronがこの例を使用する場合、例の実行前に次の文を発行する必要があります。ここで/mydir/workは、ronがイメージ、オーディオおよびビデオ・データを検索するディレクトリです。

CONNECT /as sysdba
CREATE OR REPLACE DIRECTORY FILE_DIR as '/mydir/work';
GRANT READ ON DIRECTORY FILE_DIR TO 'ron';

サンプル・スキーマの詳細は、『Oracle Databaseサンプル・スキーマ』を参照してください。


注意:

(BLOBを直接修正するか、または外部ソースを変更して)メディア・データ自体を操作した場合、オブジェクト属性の同期化が保持され、更新時刻が修正されていることを確認する必要があります。そうしないと、オブジェクト属性がメディア・データと一致しなくなります。

4.2 重要な注意点

ORDSourceレベルでコールされたメソッドは、ソース・プラグインに渡されて処理され、最初の引数にctx (RAW)を取ります。これらのメソッドのいずれかをクライアントから初めてコールする場合、ctx構造体を割り当ててNULLに初期化してから、openSource( )メソッドをコールする必要があります。このとき、ソース・プラグインが、このクライアント用にコンテキストを初期化できます。処理が完了したら、クライアントからcloseSource( )メソッドをコールする必要があります。

ソース・プラグインのコールによってコールされたメソッドは、最初の引数にctx (RAW)を取ります。

ORDDocレベルでコールされたメソッドは、フォーマット・プラグインに渡されて処理され、最初の引数にctx (RAW)を取ります。これらのメソッドのいずれかをクライアントから初めてコールする場合、ctx構造体を割り当てて、NULLに初期化する必要があります。


注意:

今回のリリースでは、Oracleが提供するいずれのプラグインもctx構造体を使用しません。また、すべてのソース・プラグインまたはフォーマット・プラグインがctx構造体を使用するわけではありませんが、前述の方法でコーディングすると、アプリケーションは、現行または今後のソース・プラグインまたはフォーマット・プラグインで動作します。

ネイティブにサポートされていないフォーマットの場合、個々のいずれかのsetメソッドを使用して、オブジェクトの属性値を設定する必要があります。ネイティブにサポートされているフォーマットの場合は、setProperties( )メソッドを使用して、オブジェクトの属性を移入するか、またはフォーマット・プラグインを記述します。


ORDDocオブジェクト型

ORDDocオブジェクト型は、イメージ、オーディオ、ビデオなど、すべてのメディア・データの格納と管理をサポートします。 このオブジェクト型の属性は、orddspec.sqlファイルで次のように定義されています。

  -------------------
  -- TYPE ATTRIBUTES
  -------------------
  source              ORDSource,
  format              VARCHAR(80),
  mimeType            VARCHAR(80),
  contentLength       INTEGER,
  comments            CLOB,

属性の説明は次のとおりです。


注意:

comments属性は、setCommentsパラメータがTRUEである場合、setProperties( )メソッドによって移入されます。この属性に対して直接書込みしないことをお薦めします。


ORDDocのコンストラクタ

この項では、ORDDocの次のコンストラクタ・ファンクションについて説明します。


ORDDocのinit( )

構文

init( ) RETURN ORDDoc;

説明

ORDDocオブジェクト型のインスタンスを初期化します。

パラメータ

なし

プラグマ

なし

例外

なし

使用上の注意

このコンストラクタは、すべてのORDDoc属性をNULLに初期化するスタティック・メソッドです。ただし、次の属性は例外です。

できるかぎり早い段階で、init( )メソッドを使用することをお薦めします。これによって、ORDDocオブジェクト型(特に今後のリリースで、ORDDoc型が発展するか、または属性が追加された場合)の初期化がさらに簡単になります。この場合、(各オブジェクト属性を初期化する)デフォルト・コンストラクタを使用したために変更されずに残ったINSERT文は、エラーになります。

ORDDocオブジェクトの属性を初期化します。

BEGIN
  INSERT INTO pm.online_media (product_id, product_testimonials)
     VALUES (2808,ORDSYS.ORDDoc.init());
  COMMIT;
END;
/

ORDDocのinit(srcType,srcLocation,srcName)

構文

init(srcType IN VARCHAR2,

srcLocation IN VARCHAR2,

srcName IN VARCHAR2)

RETURN ORDDoc;

説明

ORDDocオブジェクト型のインスタンスを初期化します。

パラメータ

srcType

メディア・データのソース・タイプを指定します。

srcLocation

メディア・データのソース位置を指定します。

srcName

メディア・データのソース名を指定します。

プラグマ

なし

例外

なし

使用上の注意

このコンストラクタは、すべてのORDDoc属性をNULLに初期化するスタティック・メソッドです。ただし、次の属性は例外です。

できるかぎり早い段階で、init( )メソッドを使用することをお薦めします。これによって、ORDDocオブジェクト型(特に今後のリリースで、ORDDoc型が発展するか、または属性が追加された場合)の初期化がさらに簡単になります。この場合、(各オブジェクト属性を初期化する)デフォルト・コンストラクタを使用したために変更されずに残ったINSERT文は、エラーになります。

ORDDocオブジェクトの属性を初期化します。

BEGIN
INSERT INTO pm.online_media (product_id, product_testimonials)
   VALUES (2999, ORDSYS.ORDDoc.init('file', 'FILE_DIR', 'modem.jpg'));
END;
/

ORDDocのメソッド

この項では、特にメディア・データの操作に使用するOracle Multimediaのメソッドに関するリファレンス情報を示します。

ORDAudio、ORDDoc、ORDImageおよびORDVideoに共通のOracle Multimediaのメソッドに関するリファレンス情報については、第2章を参照してください。この章と第2章に示すメソッドを使用すると、属性の取得と設定およびメタデータの抽出を実行できます。

オブジェクト型およびメソッドの詳細は、『Oracle Database概要』を参照してください。


getContentInLob( )

構文

getContentInLob(ctx IN OUT RAW,

dest_lob IN OUT NOCOPY BLOB,

mimeType OUT VARCHAR2,

format OUT VARCHAR2);

説明

データ・ソースのデータを、指定されたBLOBにコピーします。コピー先のBLOBは、(埋込みORDSourceオブジェクトの)source.localData属性内のBLOBとは異なる必要があります。

パラメータ

ctx

ソース・プラグインのコンテキスト情報を指定します。

dest_lob

データのコピー先のLOBを指定します。

mimeType

データのMIMEタイプが戻されます(戻されない場合もあります)。

format

データのフォーマットが戻されます(戻されない場合もあります)。

使用上の注意

なし

プラグマ

なし

例外

ORDDocExceptions.NULL_SOURCE

この例外は、ORDDoc.source属性の値がNULLの場合に発生します。

ORDSourceExceptions.METHOD_NOT_SUPPORTED

この例外は、getContentInLob( )メソッドをコールし、使用するソース・プラグインがこのメソッドをサポートしていない場合に発生します。

これらの例外の詳細は、付録Hを参照してください。

データ・ソースからデータを取得して、指定したBLOBに格納します。

DECLARE
 obj ORDSYS.ORDDoc;
 tempBLob BLOB;
 mimeType VARCHAR2(4000);
 format VARCHAR2(31);
 ctx RAW(64) :=NULL;
BEGIN
 SELECT product_testimonials INTO obj FROM pm.online_media
    WHERE product_id = 2808 ;
 IF (obj.isLocal()) THEN
   DBMS_OUTPUT.put_line('Local is true');
 END IF;
 DBMS_LOB.CREATETEMPORARY(tempBLob, true, 10);
 obj.getContentInLob(ctx,tempBLob, mimeType,format);
 DBMS_OUTPUT.PUT_LINE('Length: ' || TO_CHAR(DBMS_LOB.getLength(tempBLob)));
 EXCEPTION
  WHEN ORDSYS.ORDSourceExceptions.METHOD_NOT_SUPPORTED THEN
   DBMS_OUTPUT.put_line('ORDSourceExceptions.METHOD_NOT_SUPPORTED caught');
  WHEN OTHERS THEN
   DBMS_OUTPUT.put_line('EXCEPTION caught');
END;
/

getContentLength( )

構文

getContentLength( ) RETURN INTEGER;

説明

ソースに格納されたメディア・データのコンテンツ長を戻します。

パラメータ

なし

使用上の注意

なし

プラグマ

なし

例外

ORDDocExceptions.NULL_SOURCE

この例外は、ORDDoc.source属性の値がNULLの場合に発生します。

この例外の詳細は、付録Hを参照してください。

DECLARE
 obj ORDSYS.ORDDoc;
BEGIN
 SELECT product_testimonials INTO obj FROM pm.online_media
   WHERE product_id = 2808 ;
 IF (obj.isLocal()) THEN
   DBMS_OUTPUT.put_line('Local is true');
 END IF;
 DBMS_OUTPUT.PUT_LINE('Content length is ' || TO_CHAR(obj.getContentLength()));
END;/

getFormat( )

構文

getFormat( ) RETURN VARCHAR2;

説明

メディア・オブジェクトのformat属性の値を戻します。

パラメータ

なし

使用上の注意

なし

プラグマ

PRAGMA RESTRICT_REFERENCES(getFormat, WNDS, WNPS, RNDS, RNPS)

例外

ORDDocExceptions.INVALID_FORMAT_TYPE

この例外は、getFormat( )メソッドをコールし、format属性の値がNULLの場合に発生します。

この例外の詳細は、付録Hを参照してください。

「setFormat( )」の例を参照してください。


import( )

構文

import(ctx IN OUT RAW

set_prop IN BOOLEAN);

説明

外部メディア・データ・ソースからデータベース内の(埋込みORDSourceオブジェクトの)source.localData属性にメディア・データを転送します。

パラメータ

ctx

ソース・プラグインのコンテキスト情報を指定します。このパラメータは、常に割り当てて、NULLに初期化する必要があります。ユーザー定義のソース・プラグインを使用する場合は、openSource( )メソッドをコールします。詳細は、4.2項を参照してください。

set_prop

setProperties( )メソッドがコールされるかどうかを判断する値を指定します。このパラメータの値がTRUEの場合、setProperties( )メソッドがコールされ、メディア・データが読み取られ、オブジェクトの属性値が取得されて、それらの値がオブジェクト属性に格納されます。値がFALSEの場合、setProperties( )メソッドはコールされません。デフォルト値はFALSEです。

使用上の注意

import( )メソッドをコールする前に、setSource( )メソッドを使用して、外部メディア・データ・ソースの(埋込みORDSourceオブジェクトの)source.srcType、source.srcLocationおよびsource.Name属性を設定します。

外部メディア・データ・ソースからローカル・ソース(Oracle Database内)にデータをインポートした後も、ソース情報は変更されません(データのインポート元のソースを指したままです)。

このメソッドをコールすると、setUpdateTime( )およびsetLocal( )メソッドが暗黙的にコールされます。

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

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

プラグマ

なし

例外

ORDDocExceptions.NULL_SOURCE

この例外は、ORDDoc.source属性の値がNULLの場合に発生します。

ORDSourceExceptions.INCOMPLETE_SOURCE_INFORMATION

この例外は、import( )メソッドをコールし、source.srcType属性の値がNULLの場合に発生します。

ORDSourceExceptions.METHOD_NOT_SUPPORTED

この例外は、import( )メソッドをコールし、使用するソース・プラグインがimport( )メソッドをサポートしていない場合に発生します。

ORDSourceExceptions.NULL_SOURCE

この例外は、import( )メソッドをコールし、source.localData属性の値がNULLの場合に発生します。

ORDSYS.ORDDocExceptions.DOC_PLUGIN_EXCEPTION

この例外は、import( )メソッドをコールし、setProperties( )メソッドにメディア・プラグインの例外が発生した場合に発生します。

これらの例外の詳細は、付録Hを参照してください。

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

DECLARE
  obj ORDSYS.ORDDoc;
  ctx RAW(64) :=NULL;
BEGIN
  SELECT product_testimonials INTO obj FROM pm.online_media
    WHERE product_id = 2808 FOR UPDATE;
  DBMS_OUTPUT.PUT_LINE('setting and getting source');
  DBMS_OUTPUT.PUT_LINE('--------------------------');
  -- set source to a file
  obj.setSource('file','FILE_DIR','printer.rm');
  -- get source information
  DBMS_OUTPUT.PUT_LINE(obj.getSource());
  -- import data
  obj.import(ctx,FALSE);
  -- check size
  DBMS_OUTPUT.PUT_LINE('Length:' ||TO_CHAR(DBMS_LOB.getLength(obj.getContent())));
  UPDATE pm.online_media SET product_testimonials=obj WHERE product_id=2808;
  COMMIT;
  EXCEPTION
    WHEN ORDSYS.ORDSourceExceptions.METHOD_NOT_SUPPORTED THEN
      DBMS_OUTPUT.PUT_LINE('ORDSourceExceptions.METHOD_NOT_SUPPORTED caught');
    WHEN ORDSYS.ORDDocExceptions.DOC_PLUGIN_EXCEPTION THEN
      DBMS_OUTPUT.put_line('DOC PLUGIN EXCEPTION caught');
END;
/

importFrom( )

構文

importFrom(ctx IN OUT RAW,

source_type IN VARCHAR2,

source_location IN VARCHAR2,

source_name IN VARCHAR2

set_prop IN BOOLEAN);

説明

指定された外部メディア・データ・ソースからデータベース内の(埋込みORDSourceオブジェクトの)source.localData属性にメディア・データを転送します。

パラメータ

ctx

ソース・プラグインのコンテキスト情報を指定します。このパラメータは、常に割り当てて、NULLに初期化する必要があります。ユーザー定義のソース・プラグインを使用する場合は、openSource( )メソッドをコールします。詳細は、4.2項を参照してください。

source_type

ソース・メディア・データのタイプを指定します。

source_location

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

source_name

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

set_prop

setProperties( )メソッドがコールされるかどうかを判断する値を指定します。このパラメータの値がTRUEの場合、setProperties( )メソッドがコールされ、メディア・データが読み取られ、オブジェクトの属性値が取得されて、それらの値がオブジェクト属性に格納されます。値がFALSEの場合、setProperties( )メソッドはコールされません。デフォルト値はFALSEです。

使用上の注意

このメソッドは、ソース情報を個別に指定せずにパラメータで指定すること以外は、import( )メソッドと同じです。

このメソッドを使用する前に、source_locationパラメータで指定したディレクトリが存在するか、または作成されていることを確認する必要があります。

外部メディア・データ・ソースからローカル・ソース(Oracle Database内)にデータをインポートすると、(データのインポート元のソースを指している)ソース情報は入力値に設定されます。

このメソッドをコールすると、setUpdateTime( )およびsetLocal( )メソッドが暗黙的にコールされます。

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

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

プラグマ

なし

例外

ORDDocExceptions.NULL_SOURCE

この例外は、ORDDoc.source属性の値がNULLの場合に発生します。

ORDSourceExceptions.INCOMPLETE_SOURCE_INFORMATION

この例外は、importFrom( )メソッドをコールし、source_typeパラメータの値がNULLの場合に発生します。

ORDSourceExceptions.METHOD_NOT_SUPPORTED

この例外は、importFrom( )メソッドをコールし、使用するソース・プラグインがこのメソッドをサポートしていない場合に発生します。

ORDSYS.ORDDocExceptions.DOC_PLUGIN_EXCEPTION

この例外は、importFrom( )メソッドをコールし、setProperties( )メソッドにメディア・プラグインの例外が発生した場合に発生します。

これらの例外の詳細は、付録Hを参照してください。

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

DECLARE
  obj ORDSYS.ORDDoc;
  ctx RAW(64) :=NULL;
BEGIN
  SELECT product_testimonials INTO obj FROM pm.online_media
    WHERE product_id=2999 FOR UPDATE;
  DBMS_OUTPUT.PUT_LINE('setting and getting source');
  DBMS_OUTPUT.PUT_LINE('--------------------------');
  -- set source to a file
  -- import data
  obj.importFrom(ctx,'file','FILE_DIR','modem.jpg',FALSE);
  -- check size
  DBMS_OUTPUT.PUT_LINE('Length: '||TO_CHAR(DBMS_LOB.GETLENGTH(obj.getContent())));
  DBMS_OUTPUT.PUT_LINE(obj.getSource());
  UPDATE pm.online_media SET product_testimonials=obj WHERE product_id=2999;
  COMMIT;
  EXCEPTION
    WHEN ORDSYS.ORDSourceExceptions.METHOD_NOT_SUPPORTED THEN
      DBMS_OUTPUT.PUT_LINE('ORDSourceExceptions.METHOD_NOT_SUPPORTED caught');
    WHEN ORDSYS.ORDDocExceptions.DOC_PLUGIN_EXCEPTION THEN
      DBMS_OUTPUT.put_line('DOC PLUGIN EXCEPTION caught');
END;
/

setFormat( )

構文

setFormat(knownFormat IN VARCHAR2);

説明

メディア・オブジェクトのformat属性の値を設定します。

パラメータ

knownFormat

一致するメディア・オブジェクトに設定する既知のデータ・フォーマットを指定します。

使用上の注意

このメソッドをコールすると、setUpdateTime( )メソッドが暗黙的にコールされます。

プラグマ

なし

例外

ORDDocExceptions.NULL_INPUT_VALUE

この例外は、setFormat( )メソッドをコールし、knownFormatパラメータの値がNULLの場合に発生します。

ORDDocExceptions.NULL_SOURCE

この例外は、ORDDoc.source属性の値がNULLの場合に発生します。

これらの例外の詳細は、付録Hを参照してください。

メディア・データのフォーマットを設定します。

DECLARE
  obj ORDSYS.ORDDoc;
BEGIN
  SELECT product_testimonials INTO obj FROM pm.online_media
    WHERE product_id = 2808 FOR UPDATE;
  obj.setFormat('PDF');
  DBMS_OUTPUT.put_line('format: ' || obj.getformat());
  COMMIT;
  EXCEPTION
   WHEN ORDSYS.ORDDocExceptions.NULL_INPUT_VALUE THEN
    DBMS_OUTPUT.put_line('ORDDocExceptions.NULL_INPUT_VALUE caught');
   WHEN OTHERS THEN
    DBMS_OUTPUT.put_line('EXCEPTION caught');
END;
/

setProperties( )

構文

setProperties(ctx IN OUT RAW,

setComments IN BOOLEAN);

説明

メディア・データを読み取ってオブジェクト属性の値を取得し、取得した値をオブジェクト属性に格納します。このメソッドは、メディア・データの属性(フォーマット、MIMEタイプおよびコンテンツ長)のプロパティを設定します。setCommentsパラメータの値がTRUEの場合、オブジェクトのコメント・フィールドに、XML形式で様々なフォーマット・プロパティおよびアプリケーション・プロパティが移入されます。


注意:

このメソッドは、ネイティブにサポートされたオーディオ、イメージおよびビデオ・フォーマットのみに有効です。ネイティブにサポートされているオーディオ、イメージおよびビデオ・フォーマットの詳細は、それぞれ付録A付録Bおよび付録Cを参照してください。

パラメータ

ctx

フォーマット・プラグインのコンテキスト情報を指定します。

setComments

オブジェクトのコメント・フィールドが移入されるかどうかを示すブール値を指定します。値がTRUEの場合、オブジェクトのコメント・フィールドに、XML形式でメディア・オブジェクトの様々なフォーマット・プロパティおよびアプリケーション・プロパティが移入されます。値がFALSEの場合、オブジェクトのコメント・フィールドは移入されません。デフォルト値はFALSEです。

使用上の注意

メディア・ソースからプロパティを抽出できない場合、それぞれの属性はNULLに設定されます。

format属性の値がNULLの場合、setProperties( )メソッドは、デフォルトのフォーマット・プラグインを使用します。それ以外の場合は、formatで指定されたプラグインを使用します。

プラグマ

なし

例外

ORDDocExceptions.DOC_PLUGIN_EXCEPTION

この例外は、setProperties( )メソッドをコールし、メディア・プラグインに例外が発生した場合に発生します。

ORDDocExceptions.NULL_SOURCE

この例外は、ORDDoc.source属性の値がNULLの場合に発生します。

これらの例外の詳細は、付録Hを参照してください。

例1:

既知のメディア属性のプロパティ情報を設定します。

DECLARE
  obj ORDSYS.ORDDoc;
  ctx RAW(64) :=NULL;
BEGIN
  SELECT product_testimonials INTO obj FROM pm.online_media
    WHERE product_id = 2808 FOR UPDATE;
  obj.setProperties(ctx,FALSE);
  DBMS_OUTPUT.put_line('format: ' || obj.getformat());
  UPDATE  pm.online_media SET product_testimonials = obj
    WHERE  product_id=2808;
  COMMIT;
  EXCEPTION
   WHEN ORDSYS.ORDDocExceptions.DOC_PLUGIN_EXCEPTION THEN
    DBMS_OUTPUT.put_line('DOC PLUGIN EXCEPTION caught');
   WHEN OTHERS THEN
    DBMS_OUTPUT.put_line('EXCEPTION caught');
END;
/

例2:

既知のメディア属性のプロパティ情報を設定し、comments属性にフォーマットおよびアプリケーションのプロパティを格納します。Oracle Textを使用して、comments属性の内容に拡張索引を作成します。

DECLARE
  obj ORDSYS.ORDDoc;
  ctx RAW(64) :=NULL;
BEGIN
  SELECT product_testimonials INTO obj FROM pm.online_media
    WHERE product_id = 2999 FOR UPDATE;
  obj.setProperties(ctx,TRUE);
  DBMS_OUTPUT.put_line('format: ' || obj.getformat());
   UPDATE  pm.online_media SET product_testimonials = obj
    WHERE  product_id=2999;
  COMMIT;
  EXCEPTION
   WHEN ORDSYS.ORDDocExceptions.DOC_PLUGIN_EXCEPTION THEN
    DBMS_OUTPUT.put_line('DOC PLUGIN EXCEPTION caught');
   WHEN OTHERS THEN
    DBMS_OUTPUT.put_line('EXCEPTION caught');
END;
/