Oracle Multimediaでは、イメージ、オーディオ、ビデオなど、すべてのメディア・データの格納および管理をサポートするORDDocオブジェクト型が記述されます。
ORDDocオブジェクト型は、orddspec.sql
ファイルで定義されています。 インストール後、このファイルは次のOracleホーム・ディレクトリに格納されています。
<ORACLE_HOME>
\ord\im\admin
(Windowsの場合)
<ORACLE_HOME>
/ord/im/admin
(LinuxおよびUNIXの場合)
Oracle Multimediaには、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を直接修正するか、または外部ソースを変更して)メディア・データ自体を操作した場合、オブジェクト属性の同期化が保持され、更新時刻が修正されていることを確認する必要があります。そうしないと、オブジェクト属性がメディア・データと一致しなくなります。 |
ORDSourceレベルでコールされたメソッドは、ソース・プラグインに渡されて処理され、最初の引数にctx (RAW)を取ります。これらのメソッドのいずれかをクライアントから初めてコールする場合、ctx構造体を割り当ててNULLに初期化してから、openSource( )メソッドをコールする必要があります。このとき、ソース・プラグインが、このクライアント用にコンテキストを初期化できます。処理が完了したら、クライアントからcloseSource( )メソッドをコールする必要があります。
ソース・プラグインのコールによってコールされたメソッドは、最初の引数にctx (RAW)を取ります。
ORDDocレベルでコールされたメソッドは、フォーマット・プラグインに渡されて処理され、最初の引数にctx (RAW)を取ります。これらのメソッドのいずれかをクライアントから初めてコールする場合、ctx構造体を割り当てて、NULLに初期化する必要があります。
注意: 今回のリリースでは、Oracleが提供するいずれのプラグインもctx構造体を使用しません。また、すべてのソース・プラグインまたはフォーマット・プラグインがctx構造体を使用するわけではありませんが、前述の方法でコーディングすると、アプリケーションは、現行または今後のソース・プラグインまたはフォーマット・プラグインで動作します。 |
ネイティブにサポートされていないフォーマットの場合、個々のいずれかのsetメソッドを使用して、オブジェクトの属性値を設定する必要があります。ネイティブにサポートされているフォーマットの場合は、setProperties( )メソッドを使用して、オブジェクトの属性を移入するか、またはフォーマット・プラグインを記述します。
ORDDocオブジェクト型は、イメージ、オーディオ、ビデオなど、すべてのメディア・データの格納と管理をサポートします。 このオブジェクト型の属性は、orddspec.sql
ファイルで次のように定義されています。
------------------- -- TYPE ATTRIBUTES ------------------- source ORDSource, format VARCHAR(80), mimeType VARCHAR(80), contentLength INTEGER, comments CLOB,
属性の説明は次のとおりです。
source: メディア・データが格納されるORDSource。
format: メディア・データの格納フォーマット。
mimeType: MIMEタイプについての情報。
contentLength: ソースに格納されたメディア・データ長。
comments: メディア・オブジェクトのメタデータ情報。
注意: comments属性は、setCommentsパラメータがTRUEである場合、setProperties( )メソッドによって移入されます。この属性に対して直接書込みしないことをお薦めします。 |
この項では、ORDDocの次のコンストラクタ・ファンクションについて説明します。
構文
init( ) RETURN ORDDoc;
説明
ORDDocオブジェクト型のインスタンスを初期化します。
パラメータ
なし
プラグマ
なし
例外
なし
使用上の注意
このコンストラクタは、すべてのORDDoc属性をNULLに初期化するスタティック・メソッドです。ただし、次の属性は例外です。
source.updateTimeは、SYSDATEに設定されます。
source.localは、1(ローカル)に設定されます。
source.localDataは、empty_blobに設定されます。
できるかぎり早い段階で、init( )メソッドを使用することをお薦めします。これによって、ORDDocオブジェクト型(特に今後のリリースで、ORDDoc型が発展するか、または属性が追加された場合)の初期化がさらに簡単になります。この場合、(各オブジェクト属性を初期化する)デフォルト・コンストラクタを使用したために変更されずに残ったINSERT文は、エラーになります。
例
ORDDocオブジェクトの属性を初期化します。
BEGIN INSERT INTO pm.online_media (product_id, product_testimonials) VALUES (2808,ORDSYS.ORDDoc.init()); COMMIT; END; /
構文
init(srcType IN VARCHAR2,
srcLocation IN VARCHAR2,
srcName IN VARCHAR2)
RETURN ORDDoc;
説明
ORDDocオブジェクト型のインスタンスを初期化します。
パラメータ
メディア・データのソース・タイプを指定します。
メディア・データのソース位置を指定します。
メディア・データのソース名を指定します。
プラグマ
なし
例外
なし
使用上の注意
このコンストラクタは、すべてのORDDoc属性をNULLに初期化するスタティック・メソッドです。ただし、次の属性は例外です。
source.updateTimeは、SYSDATEに設定されます。
source.localは、0(ゼロ)に設定されます。
source.localDataは、empty_blobに設定されます。
source.srcTypeは、入力値に設定されます。
source.srcLocationは、入力値に設定されます。
source.srcNameは、入力値に設定されます。
できるかぎり早い段階で、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; /
この項では、特にメディア・データの操作に使用するOracle Multimediaのメソッドに関するリファレンス情報を示します。
ORDAudio、ORDDoc、ORDImageおよびORDVideoに共通のOracle Multimediaのメソッドに関するリファレンス情報については、第2章を参照してください。この章と第2章に示すメソッドを使用すると、属性の取得と設定およびメタデータの抽出を実行できます。
オブジェクト型およびメソッドの詳細は、『Oracle Database概要』を参照してください。
構文
getContentInLob(ctx IN OUT RAW,
dest_lob IN OUT NOCOPY BLOB,
mimeType OUT VARCHAR2,
format OUT VARCHAR2);
説明
データ・ソースのデータを、指定されたBLOBにコピーします。コピー先のBLOBは、(埋込みORDSourceオブジェクトの)source.localData属性内のBLOBとは異なる必要があります。
パラメータ
ソース・プラグインのコンテキスト情報を指定します。
データのコピー先のLOBを指定します。
データのMIMEタイプが戻されます(戻されない場合もあります)。
データのフォーマットが戻されます(戻されない場合もあります)。
使用上の注意
なし
プラグマ
なし
例外
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( ) 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( ) RETURN VARCHAR2;
説明
メディア・オブジェクトのformat属性の値を戻します。
パラメータ
なし
使用上の注意
なし
プラグマ
PRAGMA RESTRICT_REFERENCES(getFormat, WNDS, WNPS, RNDS, RNPS)
例外
ORDDocExceptions.INVALID_FORMAT_TYPE
この例外は、getFormat( )メソッドをコールし、format属性の値がNULLの場合に発生します。
この例外の詳細は、付録Hを参照してください。
例
「setFormat( )」の例を参照してください。
構文
import(ctx IN OUT RAW
set_prop IN BOOLEAN);
説明
外部メディア・データ・ソースからデータベース内の(埋込みORDSourceオブジェクトの)source.localData属性にメディア・データを転送します。
パラメータ
ソース・プラグインのコンテキスト情報を指定します。このパラメータは、常に割り当てて、NULLに初期化する必要があります。ユーザー定義のソース・プラグインを使用する場合は、openSource( )メソッドをコールします。詳細は、4.2項を参照してください。
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(ctx IN OUT RAW,
source_type IN VARCHAR2,
source_location IN VARCHAR2,
source_name IN VARCHAR2
set_prop IN BOOLEAN);
説明
指定された外部メディア・データ・ソースからデータベース内の(埋込みORDSourceオブジェクトの)source.localData属性にメディア・データを転送します。
パラメータ
ソース・プラグインのコンテキスト情報を指定します。このパラメータは、常に割り当てて、NULLに初期化する必要があります。ユーザー定義のソース・プラグインを使用する場合は、openSource( )メソッドをコールします。詳細は、4.2項を参照してください。
ソース・メディア・データのタイプを指定します。
インポート元のソース・メディア・データの位置を指定します。
ソース・メディア・データの名前を指定します。
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(knownFormat IN VARCHAR2);
説明
メディア・オブジェクトのformat属性の値を設定します。
パラメータ
一致するメディア・オブジェクトに設定する既知のデータ・フォーマットを指定します。
使用上の注意
このメソッドをコールすると、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(ctx IN OUT RAW,
setComments IN BOOLEAN);
説明
メディア・データを読み取ってオブジェクト属性の値を取得し、取得した値をオブジェクト属性に格納します。このメソッドは、メディア・データの属性(フォーマット、MIMEタイプおよびコンテンツ長)のプロパティを設定します。setCommentsパラメータの値がTRUEの場合、オブジェクトのコメント・フィールドに、XML形式で様々なフォーマット・プロパティおよびアプリケーション・プロパティが移入されます。
パラメータ
フォーマット・プラグインのコンテキスト情報を指定します。
オブジェクトのコメント・フィールドが移入されるかどうかを示すブール値を指定します。値が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; /