MGD_ID
パッケージは、サポートされるエンコーディング・タイプとして、EPCビット・エンコーディングの標準ファミリを使用した現在の無線自動識別(RFID)タグをサポートする拡張可能なフレームワークを提供します。また、MGD_ID
パッケージは、現在のEPC標準(EPC v1.1仕様)に含まれていない新規および進化中のタグ・エンコーディングもサポートします。MGD_ID
パッケージには、事前定義された複数のタイプが含まれています。
関連項目: 詳細は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。 |
この章では、次の項目について説明します。
このリファレンスの章で説明するメソッドでは、コンストラクタ・ファンクションに示される例に基づいて例を示します。
この章の例では、次のコマンド・セットを実行してから各スクリプトを実行することを想定しています。
SQL> connect / as sysdba;
Connected.
SQL> create user mgduser identified by mgduser;
SQL> grant connect, resource to mgduser;
SQL> connect mgduser
Enter password: mgduserpassword
Connected.
SQL> set serveroutput on;
この項では、MGD_ID
パッケージのオブジェクト・タイプの使用に関連する項目について説明します。
catmgd.sql
スクリプトを実行してDBMS_MGD_ID_UTL
パッケージをロードし、必要な識別コード・パッケージのスキーマ・オブジェクトをMGDSYS
スキーマに作成します。
MGD_ID
は、MGDSYS
所有のオブジェクト・タイプです。無名PL/SQLブロックからコールされたすべてのMGD_ID
サブプログラムは、現行のユーザーの権限を使用して実行されます。
MGD_ID
オブジェクト・タイプとそのサブプログラムを使用するには、ユーザーに接続ロールとリソース・ロールが付与されている必要があります。
PUBLIC
には、このADT(MGD_ID
)に対するEXECUTE
権限が付与されます。
このADT(MGD_ID
)に対して同じ名前のパブリック・シノニムが作成されます。
表256-1は、MGD_ID
パッケージのオブジェクト・タイプについて説明しています。
表256-1 MGD_IDパッケージのオブジェクト・タイプ
オブジェクト・タイプ名 | 説明 |
---|---|
|
コンポーネントを定義する名前/値ペアの属性を指定するデータ・タイプ。 |
MGD_ID_COMPONENT_VARRAYオブジェクト・タイプ |
識別コード・タイプのオブジェクトを作成するための2つのコンストラクタ・ファンクションで使用される名前/値の属性のペアとして、最大128のコンポーネントのリストを指定するデータ・タイプ。 |
|
この識別コードのコード・カテゴリのカテゴリ識別子とそのコンポーネント・リストを指定する |
MGD_ID_COMPONENT_VARRAY
タイプは、コンポーネント・リストを使用して製品コード・タイプのオブジェクトを作成する場合に、2つのコンストラクタ・ファンクションで使用される名前/値の属性のペアとして、コンポーネント・リスト(最大128)を指定するためのデータ・タイプです。
MGD_ID
タイプは、RFIDアプリケーション内での識別コードを表します。このタイプは、標準のEPCビット・エンコーディングを使用するRFIDタグ、およびEPC標準に含まれないタグ・エンコーディングを使用するRFIDタグを表します。
構文
CREATE OR REPLACE TYPE MGD_ID as object (category_id VARCHAR2(256), components MGD_ID_COMPONENT_VARRAY);
表256-5は、MGD_ID
オブジェクト・タイプのサブプログラムについて説明しています。
特に明記されていないかぎり、MGD_ID
オブジェクト・タイプに定義されているプロシージャに渡されるすべての値と名前で、大/小文字は区別されません。大/小文字の区別が必要な場合は、値を二重引用符で囲んでください。
表256-5 MGD_IDオブジェクト・タイプのサブプログラム
サブプログラム | 説明 |
---|---|
|
渡されたパラメータに基づいて |
|
指定した形式で |
|
指定した |
|
|
|
指定した別の形式に識別子を変換した結果を戻します。 |
このコンストラクタ・ファンクションは識別コード・タイプ・オブジェクトMGD_ID
を構成します。このコンストラクタ・ファンクションはオーバーロードされています。複数の機能を構文形式ごとに、定義とともに示します。
構文
MGD_ID
オブジェクト・タイプをカテゴリIDおよびコンポーネントのリストに基づいて構成します。
constructor function MGD_ID ( category_id IN VARCHAR2, components IN MGD_ID_COMPONENT_VARRAY) RETURN SELF AS RESULT DETERMINISTIC;
MGD_ID
オブジェクト・タイプをカテゴリID、識別子文字列および作成に必要な追加パラメータのリストに基づいて構成します。
constructor function MGD_ID ( category_id VARCHAR2, identifier VARCHAR2, parameter_list VARCHAR2) RETURN SELF AS RESULT DETERMINISTIC;
MGD_ID
オブジェクト・タイプをカテゴリ名、カテゴリ・バージョンおよびコンポーネントのリストに基づいて構成します。
constructor function MGD_ID ( category_name VARCHAR2, category_version VARCHAR2, components MGD_ID_COMPONENT_VARRAY) RETURN SELF AS RESULT DETERMINISTIC;
MGD_ID
オブジェクト・タイプをカテゴリ名、カテゴリ・バージョン、識別子文字列および作成に必要な追加パラメータのリストに基づいて構成します。
constructor function MGD_ID ( category_name VARCHAR2, category_version VARCHAR2, identifier VARCHAR2, parameter_list VARCHAR2) RETURN SELF AS RESULT DETERMINISTIC;
パラメータ
表256-6 MGD_IDコンストラクタ・ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
カテゴリ識別子。 |
|
コンポーネントの名前/値ペアのリスト。 |
|
カテゴリ名( |
|
カテゴリ・バージョン。 |
|
指定したカテゴリ内のコード体系の識別子文字列(形式は任意)。たとえば、SGTIN-96エンコーディングの場合、識別子の形式は タグ・データ変換(TDT)マークアップ・ファイルの適切な文法またはパターンに従って、この識別子を文字列として表します。たとえば、文字 |
|
表現内にオブジェクトを作成するために必要な追加パラメータのリスト。リストは、キー/値ペアを含むパラメータ文字列として表現されます。キー/値ペアのデリミタとしてセミコロン(;)で区切られています。たとえば、GTINコードの場合、パラメータ文字列は次のようになります。 filter=3;companyprefixlength=7;taglength=96 |
使用上の注意
MGD_ID_UTL.EPC_ENCODING_CATEGORY_ID
はcategory_id
として使用します。
カテゴリが未登録の場合、エラーが発生します。
bit_length
パラメータがNULL
の場合、bit_length
はbit_encoding
の長さの8倍になります。
コンポーネント・リストに必要なすべてのコンポーネントが含まれない場合、例外MGD_ID_UTL.e_LackComponent
がスローされます。
MGD_ID
オブジェクト(SGTIN-64)をカテゴリIDおよびコンポーネントのリストを渡して構成します。
--Contents of constructor11.sql call DBMS_MGD_ID_UTL.set_proxy('www-proxy.us.oracle.com', '80'); call DBMS_MGD_ID_UTL.refresh_category('1'); select MGD_ID('1', MGD_ID_COMPONENT_VARRAY( MGD_ID_COMPONENT('companyprefix','0037000'), MGD_ID_COMPONENT('itemref','030241'), MGD_ID_COMPONENT('serial','1041970'), MGD_ID_COMPONENT('schemes','SGTIN-64') ) ) from dual; call DBMS_MGD_ID_UTL.remove_proxy(); SQL> @constructor11.sql . . . MGD_ID('1', MGD_ID_COMPONENT_VARRAY(MGD_ID_COMPONENT('companyprefix', '0037000'), MGD_ID_COMPONENT('itemref', '030241'), MGD_ID_COMPONENT('serial', '1041970'), MGD_ID_COMPONENT('schemes', 'SGTIN-64'))) . . .
MGD_ID
オブジェクト(SGTIN-64)をカテゴリID、タグ識別子およびオブジェクトの作成に必要な追加パラメータのリストを渡して構成します。
--Contents of constructor22.sql call DBMS_MGD_ID_UTL.set_proxy('www-proxy.us.oracle.com', '80'); call DBMS_MGD_ID_UTL.refresh_category('1'); select MGD_ID('1', 'urn:epc:id:sgtin:0037000.030241.1041970', 'filter=3;scheme=SGTIN-64') from dual; call DBMS_MGD_ID_UTL.remove_proxy(); SQL> @constructor22.sql . . . MGD_ID('1', MGD_ID_COMPONENT_VARRAY(MGD_ID_COMPONENT('filter', '3'), MGD_ID_COMPONENT('schemes', 'SGTIN-64'), MGD_ID_COMPONENT('companyprefixlength', '7'), MGD_ID_COMPONENT('companyprefix', '0037000'), MGD_ID_COMPONENT('scheme', 'SGTIN-64'), MGD_ID_COMPONENT('serial', '1041970'), MGD_ID_COMPONENT('itemref', '030241'))) . . .
MGD_ID
オブジェクト(SGTIN-64)をカテゴリ名、カテゴリ・バージョン(NULL
の場合は最新バージョンが使用される)およびコンポーネントのリストを渡して構成します。
--Contents of constructor33.sql call DBMS_MGD_ID_UTL.set_proxy('www-proxy.us.oracle.com', '80'); call DBMS_MGD_ID_UTL.refresh_category(DBMS_MGD_ID_UTL.get_category_id('EPC', NULL)); select MGD_ID('EPC', NULL, MGD_ID_COMPONENT_VARRAY( MGD_ID_COMPONENT('companyprefix','0037000'), MGD_ID_COMPONENT('itemref','030241'), MGD_ID_COMPONENT('serial','1041970'), MGD_ID_COMPONENT('schemes','SGTIN-64') ) ) from dual; call DBMS_MGD_ID_UTL.remove_proxy(); SQL> @constructor33.sql . . . MGD_ID('1', MGD_ID_COMPONENT_VARRAY(MGD_ID_COMPONENT('companyprefix', '0037000'), MGD_ID_COMPONENT('itemref', '030241'), MGD_ID_COMPONENT('serial', '1041970'), MGD_ID_COMPONENT('schemes', 'SGTIN-64'))) . . .
MGD_ID
オブジェクト(SGTIN-64)をカテゴリ名とカテゴリ・バージョン、タグ識別子およびオブジェクトの作成に必要な追加パラメータのリストを渡して構成します。
--Contents of constructor44.sql call DBMS_MGD_ID_UTL.set_proxy('www-proxy.us.oracle.com', '80'); call DBMS_MGD_ID_UTL.refresh_category(DBMS_MGD_ID_UTL.get_category_id('EPC', NULL)); select MGD_ID('EPC', NULL, 'urn:epc:id:sgtin:0037000.030241.1041970', 'filter=3;scheme=SGTIN-64') from dual; call DBMS_MGD_ID_UTL.remove_proxy(); SQL> @constructor4.sql . . . MGD_ID('1', MGD_ID_COMPONENT_VARRAY(MGD_ID_COMPONENT('filter', '3'), MGD_ID_COMPONENT('schemes', 'SGTIN-64'), MGD_ID_COMPONENT('companyprefixlength', '7'), MGD_ID_COMPONENT('companyprefix', '0037000'), MGD_ID_COMPONENT('scheme', 'SGTIN-64'), MGD_ID_COMPONENT('serial', '1041970'), MGD_ID_COMPONENT('itemref', '030241'))) . . .
このファンクションは、指定した形式でMGD_ID
オブジェクトの文字列表現を戻します。
構文
function FORMAT (parameter_list IN VARCHAR2, output_format IN VARCHAR2) RETURN VARCHAR2 DETERMINISTIC;
パラメータ
表256-7 FORMATファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
表現内にオブジェクトを作成するために必要な追加パラメータのリスト。リストは、キー/値ペアを含むパラメータ文字列として表現されます。キー/値ペアのデリミタとしてセミコロン(;)で区切られています。たとえば、GTINコードの場合、パラメータ文字列は次のようになります。 filter=3;companyprefixlength=7;taglength=96 |
|
|
このファンクションは、指定したMGD_ID
コンポーネントの値を戻します。
例
次の例は、このGID-96識別コンポーネントのゼネラル・マネージャ、オブジェクト・クラス・コンポーネントおよびシリアル番号コンポーネントを戻します。
--Contents of get_components.sql file call DBMS_MGD_ID_UTL.set_proxy('www-proxy.us.oracle.com', '80'); DECLARE id MGD_ID; BEGIN DBMS_MGD_ID_UTL.set_java_logging_level(DBMS_MGD_ID_UTL.LOGGING_LEVEL_OFF); DBMS_MGD_ID_UTL.refresh_category(DBMS_MGD_ID_UTL.get_category_id('EPC', NULL)); --------------- --PURE_IDENTIT --------------- dbms_output.put_line('..Testing constructor with pure identity'); ---------------------------------------------------------------------- -- PURE_IDENTITY representation can be translated to BINARY and -- TAG_ENCODING ONLY when BOTH scheme and filer are provided. ---------------------------------------------------------------------- id := MGD_ID('EPC', NULL, 'urn:epc:id:sgtin:0037000.030241.1041970', 'scheme=SGTIN-64;filter=3'); dbms_output.put_line(id.to_string); dbms_output.put_line('filter = ' || id.get_component('filter')); dbms_output.put_line('company prefix = ' || id.get_component('companyprefix')); dbms_output.put_line('itemref = ' || id.get_component('itemref')); dbms_output.put_line('serial = ' || id.get_component('serial')); dbms_output.put_line('BINARY format = ' || id.format(NULL, 'BINARY')); dbms_output.put_line('PURE_IDENTITY format = ' || id.format(NULL, 'PURE_IDENTITY')); dbms_output.put_line('TAG_ENCODING format = ' || id.format(NULL, 'TAG_ENCODING')); END; / SHOW ERRORS; call DBMS_MGD_ID_UTL.remove_proxy(); SQL> @get_component.sql . . . ..Testing constructor with pure identity category_id =1;filter = 3;schemes = SGTIN-64;companyprefixlength = 7;companyprefix = 0037000;scheme = SGTIN-64;serial = 1041970;itemref = 030241 filter = 3 company prefix = 0037000 itemref = 030241 serial = 1041970 BINARY format =1001100000000000001000001110110001000010000011111110011000110010 PURE_IDENTITY format = urn:epc:id:sgtin:0037000.030241.1041970 TAG_ENCODING format = urn:epc:tag:sgtin-64:3.0037000.030241.1041970 PL/SQL procedure successfully completed. . . .
このファンクションは、MGD_ID
オブジェクトのセミコロン(;)で区切られたコンポーネントの名前/値ペアを戻します。
例
次の例は、MGD_ID
オブジェクトを文字列値に変換しています。
-- Contents of tostring3.sql file call DBMS_MGD_ID_UTL.set_proxy('www-proxy.us.oracle.com', '80'); DECLARE id MGD_ID; BEGIN DBMS_MGD_ID_UTL.refresh_category(DBMS_MGD_ID_UTL.get_category_id('EPC', NULL)); dbms_output.put_line('..Testing to_string'); id := mgd_id('EPC', NULL, 'urn:epc:id:gid:0037000.30241.1041970', 'scheme=GID-96'); DBMS_OUTPUT.PUT_LINE('mgd_id object as a string'); DBMS_OUTPUT.PUT_LINE(id.to_string); END; / SHOW ERRORS; call DBMS_MGD_ID_UTL.remove_proxy(); connect / as sysdba; drop user mgduser cascade; SQL> @tostring3.sql . . . ..Testing to_string mgd_id object as a string category_id =1;schemes = GID-96;objectclass = 30241;generalmanager = 0037000;scheme = GID-96;1 = 1;serial = 1041970 PL/SQL procedure successfully completed. . .
この静的ファンクションはMGD_ID
オブジェクトを構成せずに、直接異なる表現間の変換を行います。このメソッドはオーバーロードされています。複数の機能を構文形式ごとに、定義とともに示します。
構文
ある形式の識別子を別の指定されたカテゴリ名、タグ識別子、パラメータ・リストおよび出力形式に変換します。
function TRANSLATE ( category_name IN VARCHAR2, identifier IN VARCHAR2, parameter_list IN VARCHAR2, output_format IN VARCHAR2) RETURN VARCHAR2 DETERMINISTIC;
ある形式の識別子を別の指定されたカテゴリ名、カテゴリ・バージョン、タグ識別子、パラメータ・リストおよび出力形式に変換します。
function TRANSLATE ( category_name IN VARCHAR2, category_version IN VARCHAR2, identifier IN VARCHAR2, parameter_list IN VARCHAR2, output_format IN VARCHAR2) RETURN VARCHAR2 DETERMINISTIC;
パラメータ
表256-9 TRANSLATEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
カテゴリの名前。 |
|
カテゴリ・バージョン。 |
|
TDTマークアップ・ファイルの文法またはパターンの1つに従った文字列として表されるEPC識別子。たとえば、文字 |
|
表現内にオブジェクトを作成するために必要な追加パラメータのリスト。リストは、キー/値ペアを含むパラメータ文字列として表現されます。キー/値ペアのデリミタとしてセミコロン(;)で区切られています。たとえば、GTINコードの場合、パラメータ文字列は次のようになります。 filter=3;companyprefixlength=7;taglength=96 |
|
|
例
次の例は、あるGID-96表現を別の表現に変換しています。
-- Contents of translate1.sql file call DBMS_MGD_ID_UTL.set_proxy('www-proxy.us.oracle.com', '80'); DECLARE id MGD_ID; BEGIN DBMS_MGD_ID_UTL.refresh_category(DBMS_MGD_ID_UTL.get_category_id('EPC', NULL)); dbms_output.put_line('Category ID is EPC, Identifier is BINARY, Output format is BINARY'); dbms_output.put_line( mgd_id.translate('EPC', NULL,'001101010000000000001001000010001000000000000111011000100001000000000000000011111110011000110010' , NULL, 'BINARY')); dbms_output.put_line('Category ID is EPC, Identifier is BINARY, Output format is PURE_IDENTITY'); dbms_output.put_line( mgd_id.translate('EPC', NULL,'001101010000000000001001000010001000000000000111011000100001000000000000000011111110011000110010' , NULL, 'PURE_IDENTITY')); dbms_output.put_line('Category ID is EPC, Identifier is BINARY, Output format is TAG_ENCODING'); dbms_output.put_line( mgd_id.translate('EPC', NULL,'001101010000000000001001000010001000000000000111011000100001000000000000000011111110011000110010' , NULL, 'TAG_ENCODING')); dbms_output.put_line('Category ID is EPC, Identifier is TAG_ENCODING, Output format is BINARY'); dbms_output.put_line( mgd_id.translate('EPC', NULL, 'urn:epc:tag:gid-96:0037000.30241.1041970', NULL, 'BINARY')); dbms_output.put_line('Category ID is EPC, Identifier is TAG_ENCODING, Output format is PURE_IDENTITY'); dbms_output.put_line( mgd_id.translate('EPC', NULL, 'urn:epc:tag:gid-96:0037000.30241.1041970', NULL, 'PURE_IDENTITY')); dbms_output.put_line('Category ID is EPC, Identifier is TAG_ENCODING, Output format is TAG_ENCODING'); dbms_output.put_line( mgd_id.translate('EPC', NULL, 'urn:epc:tag:gid-96:0037000.30241.1041970', NULL, 'TAG_ENCODING')); dbms_output.put_line('Category ID is EPC, Identifier is PURE_IDENTITY, Output format is BINARY'); dbms_output.put_line( mgd_id.translate('EPC', NULL, 'urn:epc:id:gid:0037000.30241.1041970', NULL, 'BINARY')); dbms_output.put_line('Category ID is EPC, Identifier is PURE_IDENTITY, Output format is PURE_IDENTITY'); dbms_output.put_line( mgd_id.translate('EPC', NULL, 'urn:epc:id:gid:0037000.30241.1041970', NULL, 'PURE_IDENTITY')); dbms_output.put_line('Category ID is EPC, Identifier is PURE_IDENTITY, Output format is TAG_ENCODING'); dbms_output.put_line( mgd_id.translate('EPC', NULL, 'urn:epc:id:gid:0037000.30241.1041970', NULL, 'TAG_ENCODING')); END; / SHOW ERRORS; call DBMS_MGD_ID_UTL.remove_proxy(); SQL> @translate1.sql . . . Category ID is EPC, Identifier is BINARY, Output format is BINARY 001101010000000000001001000010001000000000000111011000100001000000000000000011111110011000110010 Category ID is EPC, Identifier is BINARY, Output format is PURE_IDENTITY urn:epc:id:gid:37000.30241.1041970 Category ID is EPC, Identifier is BINARY, Output format is TAG_ENCODING urn:epc:tag:gid-96:37000.30241.1041970 Category ID is EPC, Identifier is TAG_ENCODING, Output format is BINARY 001101010000000000001001000010001000000000000111011000100001000000000000000011111110011000110010 Category ID is EPC, Identifier is TAG_ENCODING, Output format is PURE_IDENTITY urn:epc:id:gid:0037000.30241.1041970 Category ID is EPC, Identifier is TAG_ENCODING, Output format is TAG_ENCODING urn:epc:tag:gid-96:0037000.30241.1041970 Category ID is EPC, Identifier is PURE_IDENTITY, Output format is BINARY 001101010000000000001001000010001000000000000111011000100001000000000000000011111110011000110010 Category ID is EPC, Identifier is PURE_IDENTITY, Output format is PURE_IDENTITY urn:epc:id:gid:0037000.30241.1041970 Category ID is EPC, Identifier is PURE_IDENTITY, Output format is TAG_ENCODING urn:epc:tag:gid-96:0037000.30241.1041970 PL/SQL procedure successfully completed. . . .