ヘッダーをスキップ
Oracle Multimediaユーザーズ・ガイド
11gリリース1(11.1)
E05684-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

7 Oracle Multimediaの拡張

Oracle Multimediaを拡張し、次の機能をサポートできます。

独自の外部メディア・データ・ソースや独自のORDAudio、ORDVideoまたはORDDocデータ・フォーマットをサポートするには、次の作業を行う必要があります。

  1. 新しいデータ・ソースあるいは新しいORDAudio、ORDVideoまたはORDDocデータ・フォーマットを設計します。

  2. 新しいデータ・ソースあるいは新しいORDAudio、ORDVideoまたはORDDocデータ・フォーマットを実装します。

  3. 新しいプラグインをORDPLUGINSスキーマにインストールします。

  4. 新しいプラグインに対するEXECUTE権限をPUBLICに付与します。

7.1 その他の外部ソースのサポート

新しいデータ・ソースを実装するには、ORDPLUGINSスキーマ内のORDX_<srcType>_SOURCEパッケージに必要なインタフェースを実装します(<srcType>は、新しい外部ソース・タイプの名前です)。7.1.1.3項に示すパッケージ本体の例をテンプレートとして使用して、パッケージ本体を作成します。その後、setSourceInformation( )コールのソース・パラメータに適切なソース値を設定し、ORDAudio、ORDVideo、ORDImageまたはORDDocオブジェクトに対し、ORDPLUGINS.ORDX_<srcType>_SOURCEパッケージがプラグインとして使用可能であることを示します。他の外部オーディオ、イメージ、ビデオまたはその他の異機種間メディア・データ・ソースをサポートするように拡張する場合は、ORDPLUGINS.ORDX_FILE_SOURCEおよびORDPLUGINS.ORDX_HTTP_SOURCEパッケージを指針として使用します。

オーディオ、イメージ、ビデオまたはその他の異機種間メディア・データのサポートされる外部ソースの拡張例および詳細は、7.1.1.1項7.1.1.2項および7.1.1.3項を参照してください。

7.1.1 パッケージまたはPL/SQLプラグイン

この項では、付属のパッケージまたはPL/SQLプラグインのリファレンス情報について説明します。

プラグインの名前は、ORDX_<name>_<module_name>の形式で指定する必要があります。<module_name>には、ORDSourceのSOURCEが当てはまります。たとえば、7.1.1.1項に示したFILEプラグインは、ORDX_FILE_SOURCEと命名され、7.1.1.2項に示したHTTPプラグインは、ORDX_HTTP_SOURCEと命名されます。<name>はソース・タイプです。ソース・タイプ名のFILEおよびHTTPは、どちらもOracleの予約名です。

ORDPLUGINS.ORDX_FILE_SOURCEおよびORDPLUGINS.ORDX_HTTP_SOURCEパッケージを、新しいソース・タイプ・パッケージを開発する際の指針として使用します。

7.1.1.1 ORDPLUGINS.ORDX_FILE_SOURCEパッケージ

ORDPLUGINS.ORDX_FILE_SOURCEパッケージまたはPL/SQLプラグインは、データベース外部のローカル・ファイル・システムに格納されたマルチメディアをサポートします。

CREATE OR REPLACE PACKAGE ORDX_FILE_SOURCE AS
  -- functions/procedures
  FUNCTION processCommand(obj     IN OUT NOCOPY ORDSYS.ORDSource,
                          ctx     IN OUT RAW,
                          cmd     IN VARCHAR2,
                          arglist IN VARCHAR2,
                          result  OUT RAW)
           RETURN RAW;
  PROCEDURE import(obj      IN OUT NOCOPY ORDSYS.ORDSource,
                   ctx      IN OUT RAW,
                   mimetype OUT VARCHAR2,
                   format   OUT VARCHAR2);
  PROCEDURE import(obj      IN OUT NOCOPY ORDSYS.ORDSource,
                   ctx      IN OUT RAW,
                   dlob     IN OUT NOCOPY BLOB,
                   mimetype OUT VARCHAR2,
                   format   OUT VARCHAR2);
  PROCEDURE importFrom(obj      IN OUT NOCOPY ORDSYS.ORDSource,
                       ctx      IN OUT RAW,
                       mimetype OUT VARCHAR2,
                       format   OUT VARCHAR2,
                       loc      IN VARCHAR2,
                       name     IN VARCHAR2);
  PROCEDURE importFrom(obj      IN OUT NOCOPY ORDSYS.ORDSource,
                       ctx      IN OUT RAW,
                       dlob     IN OUT NOCOPY BLOB,
                       mimetype OUT VARCHAR2,
                       format   OUT VARCHAR2,
                       loc      IN VARCHAR2,
                       name     IN VARCHAR2);
  PROCEDURE export(obj  IN OUT NOCOPY ORDSYS.ORDSource,
                   ctx  IN OUT RAW,
                   slob IN OUT NOCOPY BLOB,
                   loc  IN VARCHAR2,
                   name IN VARCHAR2);
  FUNCTION  getContentLength(obj  IN ORDSYS.ORDSource,
                             ctx  IN OUT RAW),
            RETURN INTEGER;
  PRAGMA RESTRICT_REFERENCES(getContentLength, WNDS, WNPS, RNDS, RNPS);
  FUNCTION  getSourceAddress(obj  IN ORDSYS.ORDSource,
                             ctx  IN OUT RAW,
                             userData IN VARCHAR2)
            RETURN VARCHAR2;
  PRAGMA RESTRICT_REFERENCES(getSourceAddress, WNDS, WNPS, RNDS, RNPS);

  FUNCTION open(obj IN OUT NOCOPY ORDSYS.ORDSource,
           userArg IN RAW,
           ctx OUT RAW) RETURN INTEGER;
  FUNCTION close(obj IN OUT NOCOPY ORDSYS.ORDSource, ctx IN OUT RAW)
         RETURN INTEGER;
  FUNCTION trim(obj IN OUT NOCOPY ORDSYS.ORDSource,
                ctx IN OUT RAW,
                newlen IN INTEGER) RETURN INTEGER;
PROCEDURE read(obj     IN OUT NOCOPY ORDSYS.ORDSource,
               ctx      IN OUT RAW,
               startPos IN INTEGER,
               numBytes IN OUT INTEGER,
               buffer   OUT RAW);
PROCEDURE write(obj      IN OUT NOCOPY ORDSYS.ORDSource,
                ctx      IN OUT RAW,
                startPos IN INTEGER,
                numBytes IN OUT INTEGER,
                buffer   OUT RAW);
END ORDX_FILE_SOURCE;
/

表7-1に、ORDX_FILE_SOURCEパッケージでサポートされるメソッド、およびサポートされていないメソッドをコールした場合に発生する例外を示します。

表7-1 ORDPLUGINS.ORDX_FILE_SOURCEパッケージでサポートされるメソッド

メソッド名 サポート・レベル

processCommand

非サポート。METHOD_NOT_SUPPORTED例外が発生します。

import

サポート

import

サポート

importFrom

サポート

importFrom

サポート

export

サポート

getContentLength

サポート

getSourceAddress

サポート

open

サポート

close

サポート

trim

非サポート。METHOD_NOT_SUPPORTED例外が発生します。

read

サポート

write

非サポート。METHOD_NOT_SUPPORTED例外が発生します。


7.1.1.2 ORDPLUGINS.ORDX_HTTP_SOURCEパッケージ

ORDPLUGINS.ORDX_HTTP_SOURCEパッケージまたはPL/SQLプラグインは、HTTPサーバーに格納され、URLによってアクセスされるマルチメディアをサポートします。

CREATE OR REPLACE PACKAGE ORDX_HTTP_SOURCE AS
  -- functions/procedures
  FUNCTION processCommand(obj     IN OUT NOCOPY ORDSYS.ORDSource,
                          ctx     IN OUT RAW,
                          cmd     IN VARCHAR2,
                          arglist IN VARCHAR2,
                          result  OUT RAW)
           RETURN RAW;
  PROCEDURE import(obj      IN OUT NOCOPY ORDSYS.ORDSource,
                   ctx      IN OUT RAW,
                   mimetype OUT VARCHAR2,
                   format   OUT VARCHAR2);
  PROCEDURE import(obj      IN OUT NOCOPY ORDSYS.ORDSource,
                   ctx      IN OUT RAW,
                   dlob     IN OUT NOCOPY BLOB,
                   mimetype OUT VARCHAR2,
                   format   OUT VARCHAR2);
  PROCEDURE importFrom(obj      IN OUT NOCOPY ORDSYS.ORDSource,
                       ctx      IN OUT RAW,
                       mimetype OUT VARCHAR2,
                       format   OUT VARCHAR2,
                       loc      IN VARCHAR2,
                       name     IN VARCHAR2);
  PROCEDURE importFrom(obj      IN OUT NOCOPY ORDSYS.ORDSource,
                       ctx      IN OUT RAW,
                       dlob     IN OUT NOCOPY BLOB,
                       mimetype OUT VARCHAR2,
                       format   OUT VARCHAR2,
                       loc      IN VARCHAR2,
                       name     IN VARCHAR2);
  PROCEDURE export(obj  IN OUT NOCOPY ORDSYS.ORDSource,
                   ctx  IN OUT RAW,
                   dlob IN OUT NOCOPY BLOB,
                   loc  IN VARCHAR2,
                   name IN VARCHAR2);
  FUNCTION  getContentLength(obj  IN ORDSYS.ORDSource,
                             ctx  IN OUT RAW)
            RETURN INTEGER;
  PRAGMA RESTRICT_REFERENCES(getContentLength, WNDS, WNPS, RNDS, RNPS, TRUST);
  FUNCTION  getSourceAddress(obj  IN ORDSYS.ORDSource,
                             ctx  IN OUT RAW,
                             userData IN VARCHAR2)
            RETURN VARCHAR2;
  PRAGMA RESTRICT_REFERENCES(getSourceAddress, WNDS, WNPS, RNDS, RNPS);
  FUNCTION open(obj IN OUT NOCOPY ORDSYS.ORDSource, userArg IN RAW,
           ctx OUT RAW) RETURN INTEGER;
  FUNCTION close(obj IN OUT NOCOPY ORDSYS.ORDSource, ctx IN OUT RAW)
           RETURN INTEGER;
  FUNCTION trim(obj IN OUT NOCOPY ORDSYS.ORDSource,
           ctx IN OUT RAW,
           newlen IN INTEGER) RETURN INTEGER;
  PROCEDURE read(obj      IN OUT NOCOPY ORDSYS.ORDSource,
                 ctx      IN OUT RAW,
                 startPos IN INTEGER,
                 numBytes IN OUT INTEGER,
                 buffer   OUT RAW);
  PROCEDURE write(obj      IN OUT NOCOPY ORDSYS.ORDSource,
                  ctx      IN OUT RAW,
                  startPos IN INTEGER,
                  numBytes IN OUT INTEGER,
                  buffer   OUT RAW);
END ORDX_HTTP_SOURCE;
/

表7-2に、ORDX_HTTP_SOURCEパッケージでサポートされるメソッド、およびサポートされていないメソッドをコールした場合に発生する例外を示します。

表7-2 ORDPLUGINS.ORDX_HTTP_SOURCEパッケージでサポートされるメソッド

メソッド名 サポート・レベル

processCommand

非サポート。METHOD_NOT_SUPPORTED例外が発生します。

import

サポート

import

サポート

importFrom

サポート

importFrom

サポート

export

非サポート。METHOD_NOT_SUPPORTED例外が発生します。

getContentLength

サポート

getSourceAddress

サポート

open

サポート

close

サポート

trim

非サポート。METHOD_NOT_SUPPORTED例外が発生します。

read

非サポート。METHOD_NOT_SUPPORTED例外が発生します。

write

非サポート。METHOD_NOT_SUPPORTED例外が発生します。


7.1.1.3 Oracle Multimediaの拡張による新しいデータ・ソースのサポート

Oracle Multimediaを拡張して新しいデータ・ソースをサポートするには、次の手順を実行します。

  1. 新しいデータ・ソースを設計します。

  2. 新しいデータ・ソースを実装し、名前(ORDX_MY_SOURCE.SQLなど)を付けます。

  3. 新しいORDX_MY_SOURCE.SQLプラグインをORDPLUGINSスキーマにインストールします。

  4. 新しいプラグイン(ORDX_MY_SOURCE.SQLプラグインなど)に対するEXECUTE権限をPUBLICに付与します。

  5. srctypeをmyに設定して、プラグインを起動します。

例7-1に、パッケージ本体を示します。この操作を行う場合の参考にしてください。独自の変数を「--Your variables go here」と記述された場所に、独自のコードを「--Your code goes here」と記述された場所に追加します。

例7-1 新しいデータ・ソースを拡張サポートするためのパッケージ本体の例

CREATE OR REPLACE PACKAGE BODY ORDX_MY_SOURCE
AS
  -- functions/procedures
  FUNCTION processCommand(
                    obj  IN OUT NOCOPY ORDSYS.ORDSource,
                    ctx  IN OUT RAW,
                    cmd  IN VARCHAR2,
                    arglist IN VARCHAR2,
                    result OUT RAW)
  RETURN RAW
  IS
   --Your variables go here.
  BEGIN
  --Your code goes here.
  END processCommand;
  PROCEDURE import( obj  IN OUT NOCOPY ORDSYS.ORDSource,
                    ctx  IN OUT RAW,
                    mimetype OUT VARCHAR2,
                    format   OUT VARCHAR2)
  IS
  --Your variables go here.
  BEGIN
  --Your code goes here.
  END import;
  PROCEDURE import( obj  IN OUT NOCOPY ORDSYS.ORDSource,
                    ctx  IN OUT RAW,
                    dlob IN OUT NOCOPY BLOB,
                    mimetype OUT VARCHAR2,
                    format   OUT VARCHAR2)
  IS
  --Your variables go here.
  BEGIN
  --Your code goes here.
  END import;
  PROCEDURE importFrom( obj      IN OUT NOCOPY ORDSYS.ORDSource,
                        ctx      IN OUT RAW,
                        mimetype OUT VARCHAR2,
                        format   OUT VARCHAR2,
                        loc      IN VARCHAR2,
                        name     IN VARCHAR2)
  IS
  --Your variables go here.
  BEGIN
  --Your code goes here.
  END importFrom;
  PROCEDURE importFrom( obj      IN OUT NOCOPY ORDSYS.ORDSource,
                        ctx      IN OUT RAW,
                        dlob     IN OUT NOCOPY BLOB,
                        mimetype OUT VARCHAR2,
                        format   OUT VARCHAR2,
                        loc      IN VARCHAR2,
                        name     IN VARCHAR2)
  IS
  --Your variables go here.
  BEGIN
  --Your code goes here.
  END importFrom;
  PROCEDURE export( obj  IN OUT NOCOPY ORDSYS.ORDSource,
                    ctx  IN OUT RAW,
                    slob IN OUT NOCOPY BLOB,
                    loc  IN VARCHAR2,
                    name IN VARCHAR2)
  IS
  --Your variables go here.
  BEGIN
  --Your code goes here.
  END export;

  FUNCTION  getContentLength( obj  IN ORDSYS.ORDSource,
                              ctx  IN OUT RAW)
  RETURN INTEGER
  IS
  --Your variables go here.
  BEGIN
  --Your code goes here.
  END getContentLength;
  FUNCTION  getSourceAddress(obj  IN ORDSYS.ORDSource,
                             ctx  IN OUT RAW,
                             userData IN VARCHAR2)
  RETURN VARCHAR2
  IS
  --Your variables go here.
  BEGIN
  --Your code goes here.
  END getSourceAddress;
  FUNCTION open(obj IN OUT NOCOPY ORDSYS.ORDSource, userArg IN RAW, ctx OUT RAW)
  RETURN INTEGER
  IS
  --Your variables go here.
  BEGIN
  --Your code goes here.
  END open;
  FUNCTION close(obj IN OUT NOCOPY ORDSYS.ORDSource, ctx IN OUT RAW)
  RETURN INTEGER
  IS
  --Your variables go here.
  BEGIN
  --Your code goes here.
  END close;
  FUNCTION trim(obj    IN OUT NOCOPY ORDSYS.ORDSource,
                       ctx    IN OUT RAW,
                       newlen IN INTEGER)
  RETURN INTEGER
  IS
  --Your variables go here.
  BEGIN
  --Your code goes here.
  END trim;
  PROCEDURE read(obj      IN OUT NOCOPY ORDSYS.ORDSource,
                 ctx      IN OUT RAW,
                 startPos IN INTEGER,
                 numBytes IN OUT INTEGER,
                 buffer   OUT RAW)
  IS
  --Your variables go here.
  BEGIN
  --Your code goes here.
  END read;
  PROCEDURE write(obj      IN OUT NOCOPY ORDSYS.ORDSource,
                  ctx      IN OUT RAW,
                  startPos IN INTEGER,
                  numBytes IN OUT INTEGER,
                  buffer   OUT RAW)
  IS
  --Your variables go here.
  BEGIN
  --Your code goes here.
  END write;
END ORDX_MY_SOURCE;
/
show errors;

7.2 その他のメディア・データ・フォーマットのサポート

新しいORDAudio、ORDDocまたはORDVideoデータ・フォーマットを実装するには、ORDPLUGINSスキーマ内のORDPLUGINS.ORDX_<format>_<media>パッケージに必要なインタフェースを実装します(<format>は新しいオーディオ名またはビデオ名あるいはその他の異機種間メディア・データ・フォーマット、<media>はメディアの種類(AUDIO、VIDEOまたはDOC)です)。その他のオーディオまたはビデオ・データ・フォーマットあるいは異機種間メディア・データ・フォーマットにサポートを拡張する場合は、ORDPLUGINS.ORDX_DEFAULT_<media>パッケージを指針として使用します。7.2.1.2項7.2.2.2項および7.2.3.2項に示すパッケージ本体の例をテンプレートとして使用し、オーディオ、ビデオまたはその他の異機種間メディア・データのパッケージ本体をそれぞれ作成します。その後、setFormat( )コールの新しいフォーマット・パラメータに適切なフォーマット値を設定して、ORDAudio、ORDDocまたはORDVideoオブジェクトに対して、パッケージORDPLUGINS.ORDX_<format>_<media>がプラグインとして使用可能であり、メソッドの起動に使用されることを指定します。

7.2.1 その他のORDAudioデータ・フォーマットのサポート

7.2.1.1項および7.2.1.2項では、その他のデータ・フォーマットをサポートするためのORDAudioの拡張方法を説明します。

7.2.1.1 ORDPLUGINS.ORDX_DEFAULT_AUDIOパッケージ

独自のORDPLUGINS.ORDX_<format>_AUDIOオーディオ・フォーマット・パッケージを開発する際の指針として、次のORDPLUGINS.ORDX_DEFAULT_AUDIOパッケージを使用します。このパッケージでは、setProperties( )メソッドのmimeTypeフィールドにファイル・フォーマットに依存するMIMEタイプ値を設定します。

CREATE OR REPLACE PACKAGE ORDX_DEFAULT_AUDIO
authid current_user
AS
--AUDIO ATTRIBUTES ACCESSORS

PROCEDURE setProperties(ctx IN OUT RAW,
                        obj IN OUT NOCOPY ORDSYS.ORDAudio,
                        setComments IN NUMBER := 0);
FUNCTION checkProperties(ctx IN OUT RAW, obj IN OUT ORDSYS.ORDAudio)
                RETURN NUMBER;
FUNCTION getAttribute(ctx IN OUT RAW,
                      obj IN ORDSYS.ORDAudio,
                      name IN VARCHAR2) RETURN VARCHAR2;
PROCEDURE getAllAttributes(ctx IN OUT RAW,
                           obj IN ORDSYS.ORDAudio,
                           attributes IN OUT NOCOPY CLOB);
--AUDIO PROCESSING METHODS
FUNCTION processCommand(ctx       IN OUT RAW,
                        obj       IN OUT NOCOPY ORDSYS.ORDAudio,
                        cmd       IN VARCHAR2,
                        arguments IN VARHAR2,
                        result    OUT RAW)
         RETURN RAW;

END;
/

表7-3に、ORDPLUGINS.ORDX_DEFAULT_AUDIOパッケージでサポートされるメソッド、およびサポートされていないメソッドをコールした場合に発生する例外を示します。

表7-3 ORDPLUGINS.ORDX_DEFAULT_AUDIOパッケージでサポートされるメソッド

メソッド名 サポート・レベル

setProperties

サポート。ソースがローカルの場合、ローカル・データから属性を抽出してプロパティを設定します。ソースがNULLの場合、ORDSYS.ORDSourceExceptions.EMPTY_SOURCE例外が発生します。ソースがBFILEの場合、BFILEから属性を抽出してプロパティを設定します。ソースがローカルでもBFILEでもない場合は、メディア・コンテンツを一時LOBに取得してデータから属性を抽出し、プロパティを設定します。

checkProperties

サポート。ソースがローカルの場合、ローカル・データから属性を抽出してオブジェクトの属性値と比較します。ソースがNULLの場合、ORDSYS.ORDSourceExceptions.EMPTY_SOURCE例外が発生します。ソースがBFILEの場合、BFILEから属性を抽出してオブジェクトの属性値と比較します。ソースがローカルでもBFILEでもない場合は、メディア・コンテンツを一時LOBに取得し、メディア・コンテンツから属性を抽出してオブジェクトの属性値と比較します。

getAttribute

非サポート。METHOD_NOT_SUPPORTEDおよびAUDIO_PLUGIN_EXCEPTION例外が発生します。

getAllAttributes

サポート。ソースがローカルの場合、属性を取得して戻します。ソースがNULLの場合、ORDSYS.ORDSourceExceptions.EMPTY_SOURCE例外が発生します。ソースがローカルでもNULLでもなく、外部にある場合は、ORDSYS.ORDAudioExceptions.LOCAL_DATA_SOURCE_REQUIRED例外が発生します。

processCommand

非サポート。METHOD_NOT_SUPPORTEDおよびAUDIO_PLUGIN_EXCEPTION例外が発生します。


7.2.1.2 Oracle Multimediaの拡張による新しいオーディオ・データ・フォーマットのサポート

Oracle Multimediaを拡張して新しいオーディオ・データ・フォーマットをサポートするには、次の手順を実行します。

  1. 新しいオーディオ・データ・フォーマットを設計します。

    1. 新しいオーディオ・データ・フォーマットをサポートするには、ORDPLUGINSスキーマ内のORDX_<format>_AUDIOパッケージに必要なインタフェースを実装します(<format>は、新しいオーディオ・データ・フォーマット名です)。ORDX_DEFAULT_AUDIOパッケージのインタフェースの詳細は、7.2.1.1項を参照してください。 例7-2のパッケージ本体の例をテンプレートとして使用し、オーディオ・パッケージ本体を作成します。

    2. その後、setFormat( )コール内の新しいフォーマットのパラメータに適切なフォーマット値を設定して、オーディオ・オブジェクトに対し、ORDPLUGINS.ORDX_<format>_AUDIOパッケージがプラグインとして使用可能であることを示します。

  2. 新しいオーディオ・データ・フォーマットを実装し、名前(ORDX_MY_AUDIO.SQLなど)を付けます。

  3. 新しいORDX_MY_AUDIO.SQLプラグインをORDPLUGINSスキーマにインストールします。

  4. 新しいプラグイン(ORDX_MY_AUDIOプラグインなど)に対するEXECUTE権限をPUBLICに付与します。

  5. アプリケーションで、format属性をmyに設定して、プラグインを起動します。

例7-2に、パッケージ本体を示します。この操作を行う場合の参考にしてください。独自の変数を「--Your variables go here」と記述された場所に、独自のコードを「--Your code goes here」と記述された場所に追加します。

例7-2 新しいオーディオ・データ・フォーマットを拡張サポートするためのパッケージ本体の例

CREATE OR REPLACE PACKAGE BODY ORDX_MY_AUDIO
AS
  --AUDIO ATTRIBUTES ACCESSORS
  PROCEDURE setProperties(ctx IN OUT RAW,
                          obj IN OUT NOCOPY ORDSYS.ORDAudio,
                          setComments IN NUMBER :=0)
  IS
--Your variables go here.
  BEGIN
--Your code goes here.
  END;
  FUNCTION checkProperties(ctx IN OUT RAW, obj IN OUT ORDSYS.ORDAudio)
  RETURN NUMBER
  IS
--Your variables go here.
  BEGIN
--Your code goes here.
  END;
  FUNCTION  getAttribute(ctx IN OUT RAW,
                         obj IN ORDSYS.ORDAudio,
                         name IN VARCHAR2)
  RETURN VARCHAR2
  IS
--Your variables go here.
  BEGIN
--Your code goes here.
  END;
  PROCEDURE getAllAttributes(ctx IN OUT RAW,
                             obj IN ORDSYS.ORDAudio,
                             attributes IN OUT NOCOPY CLOB)
  IS
--Your variables go here.
  BEGIN
--Your code goes here.
  END;
  -- AUDIO PROCESSING METHODS
  FUNCTION  processCommand(
                                 ctx       IN OUT RAW,
                                 obj       IN OUT NOCOPY ORDSYS.ORDAudio,
                                 cmd       IN VARCHAR2,
                                 arguments IN VARCHAR2,
                                 result    OUT RAW)
  RETURN RAW
  IS
--Your variables go here.
  BEGIN
--Your code goes here.
  END;
END;
/
show errors;

7.2.2 その他のORDDocデータ・フォーマットのサポート

7.2.2.1項および7.2.2.2項では、その他のデータ・フォーマットをサポートするためのORDDocの拡張方法を説明します。

7.2.2.1 ORDPLUGINS.ORDX_DEFAULT_DOCパッケージ

独自のORDPLUGINS.ORDX_<format>_DOCメディア・フォーマット・パッケージを開発する際の指針として、次のORDPLUGINS.ORDX_DEFAULT_DOCパッケージを使用します。

CREATE OR REPLACE PACKAGE ORDX_DEFAULT_DOC
authid current_user
AS

PROCEDURE setProperties(ctx IN OUT RAW,
                        obj IN OUT NOCOPY ORDSYS.ORDDoc,
                        setComments IN NUMBER := 0);

END;
/

表7-4に、ORDPLUGINS.ORDX_DEFAULT_DOCパッケージでサポートされるメソッド、およびソースがNULLの場合に発生する例外を示します。

表7-4 ORDPLUGINS.ORDX_DEFAULT_DOCパッケージでサポートされるメソッド

メソッド名 サポート・レベル

setProperties

サポート。ソースがローカルの場合、ローカル・データから属性を抽出してプロパティを設定します。ソースがNULLの場合、ORDSYS.ORDSourceExceptions.EMPTY_SOURCE例外が発生します。ソースがBFILEの場合、BFILEから属性を抽出してプロパティを設定します。ソースがローカルでもBFILEでもない場合は、メディア・コンテンツを一時LOBに取得してデータから属性を抽出し、プロパティを設定します。


7.2.2.2 Oracle Multimediaの拡張による新しいORDDocデータ・フォーマットのサポート

Oracle Multimediaを拡張して新しいORDDocデータ・フォーマットをサポートするには、次の手順を実行します。

  1. 新しいメディア・データ・フォーマットを設計します。

    1. 新しいメディア・データ・フォーマットをサポートするには、ORDPLUGINSスキーマ内のORDX_<format>_DOCパッケージに必要なインタフェースを実装します(<format>は、新しいメディア・データ・フォーマット名です)。ORDX_DEFAULT_DOCパッケージのインタフェースの詳細は、7.2.2.1項を参照してください。例7-3のパッケージ本体の例をテンプレートとして使用し、パッケージ本体を作成します。

    2. その後、setFormat( )コール内の新しいフォーマットのパラメータに適切なフォーマット値を設定して、メディア・オブジェクトに対し、ORDPLUGINS.ORDX_<format>_DOCパッケージがプラグインとして使用可能であることを示します。

  2. 新しいメディア・データ・フォーマットを実装し、名前(ORDX_MY_DOC.SQLなど)を付けます。

  3. 新しいORDX_MY_DOC.SQLプラグインをORDPLUGINSスキーマにインストールします。

  4. 新しいプラグイン(ORDX_MY_DOCプラグインなど)に対するEXECUTE権限をPUBLICに付与します。

  5. アプリケーションで、フォーマットをmyに設定して、プラグインを起動します。

例7-3に、パッケージ本体を示します。この操作を行う場合の参考にしてください。独自の変数を「--Your variables go here」と記述された場所に、独自のコードを「--Your code goes here」と記述された場所に追加します。

例7-3 新しいORDDocデータ・フォーマットを拡張サポートするためのパッケージ本体の例

CREATE OR REPLACE PACKAGE BODY ORDX_MY_DOC
AS
  --DOCUMENT ATTRIBUTES ACCESSORS
  PROCEDURE setProperties(ctx IN OUT RAW,
                          obj IN OUT NOCOPY ORDSYS.ORDDoc,
                          setComments IN NUMBER :=0)
  IS
--Your variables go here.
  BEGIN
--Your code goes here.
  END;
END;
/
show errors;

7.2.3 その他のビデオ・データ・フォーマットのサポート

7.2.3.1項および7.2.3.2項では、その他のデータ・フォーマットをサポートするためのORDVideoの拡張方法を説明します。

7.2.3.1 ORDPLUGINS.ORDX_DEFAULT_VIDEOパッケージ

独自のORDPLUGINS.ORDX_<format>_VIDEOビデオ・フォーマット・パッケージを開発する際の指針として、次のORDPLUGINS.ORDX_DEFAULT_VIDEOパッケージを使用します。このパッケージでは、setProperties( )メソッドのmimeTypeフィールドにファイル・フォーマットに依存するMIMEタイプ値を設定します。

CREATE OR REPLACE PACKAGE ORDX_DEFAULT_VIDEO
authid current_user
AS
--VIDEO ATTRIBUTES ACCESSORS
FUNCTION  getAttribute(ctx IN OUT RAW,
                       obj IN ORDSYS.ORDVideo,
                       name IN VARCHAR2)
          RETURN VARCHAR2;
PROCEDURE setProperties(ctx IN OUT RAW,
                        obj IN OUT NOCOPY ORDSYS.ORDVideo,
                        setComments IN NUMBER := 0);
FUNCTION checkProperties(ctx IN OUT RAW,obj IN ORDSYS.ORDVideo) RETURN NUMBER;

-- must return name=value; name=value; ...  pairs
PROCEDURE getAllAttributes(ctx IN OUT RAW,
                           obj IN ORDSYS.ORDVideo,
                           attributes IN OUT NOCOPY CLOB);
-- VIDEO PROCESSING METHODS
FUNCTION  processCommand(
                         ctx       IN OUT RAW,
                         obj       IN OUT NOCOPY ORDSYS.ORDVideo,
                         cmd       IN VARCHAR2,
                         arguments IN VARCHAR2,
                         result    OUT RAW)
         RETURN RAW;

END;
/

表7-5に、ORDPLUGINS.ORDX_DEFAULT_VIDEOパッケージでサポートされるメソッド、およびサポートされていないメソッドをコールした場合に発生する例外を示します。

表7-5 ORDPLUGINS.ORDX_DEFAULT_VIDEOパッケージでサポートされるメソッド

メソッド名 サポート・レベル

getAttribute

非サポート。METHOD_NOT_SUPPORTEDおよびVIDEO_PLUGIN_EXCEPTION例外が発生します。

setProperties

サポート。ソースがローカルの場合、ローカル・データから属性を抽出してプロパティを設定します。ソースがNULLの場合、ORDSYS.ORDSourceExceptions.EMPTY_SOURCE例外が発生します。ソースがBFILEの場合、BFILEから属性を抽出してプロパティを設定します。ソースがローカルでもBFILEでもない場合は、メディア・コンテンツを一時LOBに取得してデータから属性を抽出し、プロパティを設定します。

checkProperties

サポート。ソースがローカルの場合、ローカル・データから属性を抽出してオブジェクトの属性値と比較します。ソースがNULLの場合、ORDSYS.ORDSourceExceptions.EMPTY_SOURCE例外が発生します。ソースがBFILEの場合、BFILEデータから属性を抽出してオブジェクトの属性値と比較します。ソースがローカルでもBFILEでもない場合は、メディア・コンテンツを一時LOBに取得し、メディア・コンテンツから属性を抽出してオブジェクトの属性値と比較します。

getAllAttributes

サポート。ソースがローカルの場合、属性を取得して戻します。ソースがNULLの場合、ORDSYS.ORDSourceExceptions.EMPTY_SOURCE例外が発生します。ソースがローカルでもNULLでもなく、外部にある場合は、ORDSYS.ORDVideoExceptions.LOCAL_DATA_SOURCE_REQUIRED例外が発生します。

processCommand

非サポート。METHOD_NOT_SUPPORTEDおよびVIDEO_PLUGIN_EXCEPTION例外が発生します。


7.2.3.2 Oracle Multimediaの拡張による新しいビデオ・データ・フォーマットのサポート

Oracle Multimediaを拡張して新しいビデオ・データ・フォーマットをサポートするには、次の手順を実行します。

  1. 新しいビデオ・データ・フォーマットを設計します。

    1. 新しいビデオ・データ・フォーマットをサポートするには、ORDPLUGINSスキーマ内のORDX_<format>_VIDEOパッケージに必要なインタフェースを実装します(<format>は、新しいビデオ・データ・フォーマット名です)。ORDX_DEFAULT_VIDEOパッケージのインタフェースの詳細は、7.2.3.1項を参照してください。例7-4のパッケージ本体の例をテンプレートとして使用し、ビデオ・パッケージ本体を作成します。

    2. その後、setFormat( )コール内の新しいフォーマットのパラメータに適切なフォーマット値を設定して、ビデオ・オブジェクトに対し、ORDPLUGINS.ORDX_<format>_VIDEOパッケージがプラグインとして使用可能であることを示します。

  2. 新しいビデオ・データ・フォーマットを実装し、名前(ORDX_MY_VIDEO.SQLなど)を付けます。

  3. 新しいORDX_MY_VIDEO.SQLプラグインをORDPLUGINSスキーマにインストールします。

  4. 新しいプラグイン(ORDX_MY_VIDEOプラグインなど)に対するEXECUTE権限をPUBLICに付与します。

  5. アプリケーションで、ビデオ・フォーマットをmyに設定して、プラグインを起動します。

例7-4に、パッケージ本体を示します。この操作を行う場合の参考にしてください。独自の変数を「--Your variables go here」と記述された場所に、独自のコードを「--Your code goes here」と記述された場所に追加します。

例7-4 新しいビデオ・データ・フォーマットを拡張サポートするためのパッケージ本体の例

CREATE OR REPLACE PACKAGE BODY ORDX_MY_VIDEO
AS
  --VIDEO ATTRIBUTES ACCESSORS
  FUNCTION  getAttribute(ctx IN OUT RAW,
                         obj IN ORDSYS.ORDVideo,
                         name IN VARCHAR2)
  RETURN VARCHAR2
  IS
--Your variables go here.
  BEGIN
--Your code goes here.
  END;
  PROCEDURE setProperties(ctx IN OUT RAW,
          obj IN OUT NOCOPY ORDSYS.ORDVideo,
          setComments IN NUMBER :=0)
  IS
--Your variables go here.
  BEGIN
--Your code goes here.
  END;
  FUNCTION checkProperties(ctx IN OUT RAW, obj IN ORDSYS.ORDVideo) RETURN NUMBER
  IS
--Your variables go here.
  BEGIN
--Your code goes here.
  END;
  PROCEDURE getAllAttributes(ctx IN OUT RAW,
                             obj IN ORDSYS.ORDVideo,
                             attributes IN OUT NOCOPY CLOB)
  IS
--Your variables go here.
  BEGIN
--Your code goes here.
  END;
  -- VIDEO PROCESSING METHODS
  FUNCTION  processCommand(
                                 ctx       IN OUT RAW,
                                 obj       IN OUT NOCOPY ORDSYS.ORDVideo,
                                 cmd       IN VARCHAR2,
                                 arguments IN VARCHAR2,
                                 result OUT RAW)
  RETURN RAW
  IS
--Your variables go here.
  BEGIN
--Your code goes here.
  END;
END;
/
show errors;

7.2.4 その他のイメージ・データ・フォーマットのサポート

Oracle Multimediaでは、外部イメージ用のsetProperties( )メソッドを使用して、その他の特定イメージ・フォーマットをサポートします。このメソッドを使用すると、setProperties( )メソッドに外部イメージ用として渡される値を既存のORDImageデータ属性に書き込むことによって、他のイメージ・フォーマットの認識が可能になります。この方法でサポートできるイメージのタイプを判断する方法および詳細は、『Oracle Multimediaリファレンス』の外部イメージ・メソッド用のsetProperties( )に関する説明を参照してください。

7.3 新しいオブジェクト型を使用したOracle Multimediaの拡張

例7-5のORDImageオブジェクト型で示すとおり、任意のOracle Multimediaオブジェクト型を基にして、独自のオブジェクト型を新しく作成できます。


注意:

オブジェクト型を変更した場合、依存する型定義は無効になります。この問題は、Oracle Multimediaのオブジェクト型属性を含む新しい型を定義して、Oracle Multimediaのオブジェクト型が変更される場合に発生します。これは、Oracle Multimediaのアップグレード中、必ず発生します。

この問題を回避するには、次のSQL文を使用して、すべての無効な型定義を再び有効にします。

SQL> ALTER TYPE <type-name> COMPILE;

例7-5 新しいオブジェクト型を使用したOracle Multimedia ORDImageの拡張

CREATE TYPE AnnotatedImage AS OBJECT
    ( image ORDSYS.ORDImage,
      description VARCHAR2(2000),
      MEMBER PROCEDURE SetProperties(SELF IN OUT AnnotatedImage),
      MEMBER PROCEDURE Copy(dest IN OUT AnnotatedImage),
      MEMBER PROCEDURE ProcessCopy(command IN VARCHAR2,
                                   dest IN OUT AnnotatedImage)
    );
/

CREATE TYPE BODY AnnotatedImage AS
  MEMBER PROCEDURE SetProperties(SELF IN OUT AnnotatedImage) IS
  BEGIN
    SELF.image.setProperties();
    SELF.description :=
        'This is an example of using Image object as a subtype';
  END SetProperties;
  MEMBER PROCEDURE Copy(dest IN OUT AnnotatedImage) IS
  BEGIN
    SELF.image.copy(dest.image);
    dest.description := SELF.description;
  END Copy;
  MEMBER PROCEDURE ProcessCopy(command IN VARCHAR2,
                               dest IN OUT AnnotatedImage) IS
  BEGIN
    SELF.Image.processCopy(command,dest.image);
    dest.description := SELF.description;
  END ProcessCopy;
END;
/

新しい型を作成した後は、その型を他の型と同様に使用できます。次に例を示します。

CREATE OR REPLACE DIRECTORY ORDIMGDIR AS 'C:\TESTS';

CREATE TABLE my_example(id NUMBER, an_image AnnotatedImage);
INSERT INTO my_example VALUES (1,
    AnnotatedImage(
        ORDSYS.ORDImage.init('file','ORDIMGDIR','plaid.gif'));
COMMIT;
DECLARE
    myimage AnnotatedImage;
BEGIN
    SELECT an_image INTO myimage FROM my_example;
    myimage.SetProperties;
    DBMS_OUTPUT.PUT_LINE('This image has a description of ');
    DBMS_OUTPUT.PUT_LINE(myimage.description);
    UPDATE my_example SET an_image = myimage;
END;
/

7.4 メディア・データ処理のサポート

7.4.1項および7.4.2項では、オーディオおよびビデオ・データ処理のサポートについて説明します。

7.4.1 オーディオ・データ処理のサポート

オーディオ・データ処理をサポートする(オーディオ処理コマンドおよび引数のセットをフォーマット・プラグインに渡して処理する)には、processAudioCommand( )メソッドを使用します。このメソッドは、ユーザー定義フォーマットのみで使用可能です。

processAudioCommand( )メソッドの詳細は、『Oracle Multimediaリファレンス』を参照してください。

7.4.2 ビデオ・データ処理のサポート

ビデオ・データ処理をサポートする(コマンドおよび引数のセットをフォーマット・プラグインに渡して処理する)には、processVideoCommand( )メソッドを使用します。このメソッドは、ユーザー定義フォーマットでのみ使用可能です。

processVideoCommand( )メソッドの詳細は、『Oracle Multimediaリファレンス』を参照してください。