この付録では、Oracle Database 10g リリース2(10.2)の(ORDImageオブジェクトにおける)DICOMサポートからOracle Database 11g リリース1(11.1)の新しいDICOMサポートに、データおよびアプリケーション・コードを移行する2つのオプションについて説明します。 1つ目のオプションは、既存のアプリケーションにほとんど影響を与えません。 2つ目のオプションは、DICOMの新しい機能を十分に活用します。
この付録の例は、次に定義されているimageTable
表に基づいています。
imageTable( id integer, image ordsys.ordimage, thumb ordsys.ordimage
この例の補足説明は次のとおりです。
image: ORDImage列名
thumb: サムネイル画像の列名
元のORDImageオブジェクトのデータを残したまま、新しいDICOMリレーショナル・インタフェースを使用して、新しいDICOMファンクションにアクセスしても、リリース10.2のアプリケーションにはほとんど影響を与えません。 また、既存のDICOMコンテンツを移動する必要もありません。
次のように、このオプションを使用します。
ORDImage列のデータを残します。
リリース10.2で行ったように、ORDImageメソッドを使用して、ORDImageファンクションにアクセスします。
新しいORD_DICOMリレーショナル・パッケージを使用して、新しいDICOM機能にアクセスします。
次に示すコードは、ORDImageオブジェクトを使用してDICOMコンテンツを格納する、このプロセスを示します。
alter table imageTable add (meta sys.xmltype); declare img ordsys.ordimage; thb ordsys.ordimage; ctx raw(64) := null; meta sys.xmltype; begin insert into imageTable (id,image, thumb) values (1, ordsys.ordimage.init(), ordsys.ordimage.init()) returning image, thumb into img, thb; img.importFrom(ctx, 'file', 'DICOMDIR', 'example.dcm'); img.processCopy('fileFormat = jfif maxScale=100 100', thb); meta := ORD_DICOM.extractMetadata(img.getContent, 'ALL'); . . .
ここで、太字で強調表示されているコードの最初の2行は、DICOMメタデータをXML文書として格納するための列を追加することによって、ORDImage表(imageTable
)を変更する方法を示しています。 強調表示されているコードの最後の行は、ORD_DICOMパッケージ(リレーショナル・インタフェース)のextractMetadata( )メソッドを使用して、埋込みDICOMコンテンツのすべての属性を抽出する方法を示しています。
この移行オプションを使用する利点は、次のとおりです。
既存のOracle Database 10gリリース2のアプリケーションへの影響を最小限に抑えて、迅速にアプリケーションを移行できる。
既存のDICOMコンテンツをコピーする必要がない。
このオプションを使用する唯一の不利な点は、DICOMリレーショナル・インタフェースでは新しいDICOM機能が十分に活用されないことです。
ORDDicomオブジェクト型にデータをコピーし、アプリケーションを書き換えてORDDicomのメソッドを使用すると、新しいDICOM機能を十分に活用できます。
次のように、このオプションを使用します。
次のコード例に示すように、データをORDDicomオブジェクトにコピーします。
alter table imageTable add (dicomImage ORDSYS.ORDDicom, metadata sys.XMLTYPE); -- For each row update imageTable t set t.dicomImage = new orddicom(t.image); alter table imageTable drop column image;
ORDImage列(image
)を含む既存の表(imageTable
)があると想定します。この例では、DICOMコンテンツをORDDicom型として格納するためのDICOM画像列(dicomImage
)を追加し、抽出された属性をXML文書として格納するためのメタデータ列(metadata
)を追加して、image
列からdicomImage
列に新しいDICOMコンテンツをコピーすることによって表を更新した後、表からimage
列を削除します。
次のコードに示すように、アプリケーションを変更して、新しいORDDicomのメソッドを使用します。
declare img ordsys.orddicom; thb ordsys.ordimage; meta sys.xmltype; begin insert into imageTable (id, dicomImage, thumb, metadata) values (1, ordsys.orddicom('file', 'DICOMDIR', 'example.dcm', 1), ordsys.ordimage.init(), null)) returning dicomimage, thumb into img, thb; img.processCopy('fileFormat=jfif maxScale=100 100', thb); meta := img.extractMetadata('ALL'); . . .
このコードは、新しいORDDicomオブジェクト型を使用するために変更された既存のアプリケーションを示しています。 太字で強調表示されているコードの最初の2行は、ORDDicomオブジェクト(img
)とXMLTypeメタデータ(meta
)の変数宣言を示しています。 その次の強調表示されているコードの行は、ローカル・ファイル・システムのDICOMファイルを指しているORDDicomオブジェクトを含む表に、行を挿入する方法を示しています。 さらに次の強調表示されているコードの行は、Oracle Database 10g リリース2の構文に似ていますが、DICOM画像からJPEGサムネイル画像を生成する方法を示します。 最後の強調表示されているコードの行は、埋込みDICOMコンテンツのすべての属性をXML文書に抽出する方法を示しています。
この移行オプションを使用する利点は、新しいORDDicomオブジェクト型の機能を十分に活用できることです。
このオプションを使用する不利な点は、次のとおりです。
既存のDICOMコンテンツをORDDicomオブジェクト型にコピーする必要がある。
Oracle Multimediaにアクセスするアプリケーションの一部を書き換える必要がある。
アプリケーションを移行するために、新しいDICOMリレーショナル・インタフェースまたは新しいORDDicomオブジェクト型のいずれを使用するかは、現在の状況、および使用している環境に存在するアプリケーションの種類によって決まります。 たとえば、大規模なデータがあり、リソースが制限されている場合に、既存のDICOMコンテンツをORDDicomオブジェクト型にコピーするというオプションは、非常にコストがかかり実用的ではない場合があります。 かわりに、新しいDICOM機能の使用を先送りし、既存のデータへの影響を抑えて、迅速にアプリケーションを移行する方法を選択できます。 一方、ORDImageオブジェクトのデータが小規模な場合は、アプリケーションを書き換えて、既存のデータをORDDicomオブジェクト型にコピーし、DICOMの新しいすべての機能にアクセスできるようにする方法を選択できます。