この章では、論理変更レコード(LCR)のタイプについて説明します。Oracle StreamsにおけるLCRとは、データベースに対する変更情報が格納されたメッセージ・ペイロードのことです。この変更には、データに対する変更(データ操作言語(DML)の変更)とデータベース・オブジェクトに対する変更(データ定義言語(DDL)の変更)とがあります。
Oracle Streamsを使用すると、取得プロセスによりLCRの形式で取得した変更がキューにエンキューされます。このLCRは、あるデータベースのキューから別のデータベースのキューに伝播できます。最後に、適用プロセスによりLCRを接続先データベースに適用できます。LCRは、手動で作成、エンキューおよびデキューすることもできます。
関連項目: LCRの詳細は、『Oracle Streams概要および管理』を参照してください。 |
この章では、次の項目について説明します。
表228-1 論理変更レコード(LCR)のタイプ
タイプ | 説明 |
---|---|
|
データベース・オブジェクトに対するデータ定義言語(DDL)の変更を表します。 |
|
データベース・オブジェクトに対するデータ操作言語(DML)の変更を表します。 |
|
表内の行の列値リストを識別します。 |
|
行内の列値を識別します。 |
これらの論理変更レコード(LCR)のタイプは、オラクル社が提供する次のPL/SQLパッケージで使用します。
DBMS_APPLY_ADM
DBMS_AQ
DBMS_AQADM
DBMS_CAPTURE_ADM
DBMS_PROPAGATION_ADM
DBMS_RULE
DBMS_RULE_ADM
DBMS_STREAMS
DBMS_STREAMS_ADM
DBMS_TRANSFORM
このタイプは、データベース・オブジェクトに対するデータ定義言語(DDL)の変更を示します。
DDL論理変更レコード(DDL LCR)を作成または変更する場合は、ddl_text
とbase_table_name
、base_table_owner
、object_type
、object_owner
、object_name
およびcommand_type
の各属性との間で一貫性が保たれていることを確認してください。
この項では、DDL LCRのコンストラクタおよびこのタイプのメンバー・サブプログラムについて説明します。
LCR$_DDL_RECORDサブプログラムの要約(「LCR$_DDL_RECORDとLCR$_ROW_RECORDに共通するサブプログラム」に記載するサブプログラムも含む)
注意:
|
指定した情報を使用して、SYS.LCR$_DDL_RECORD
オブジェクトを作成します。
STATIC FUNCTION CONSTRUCT( source_database_name IN VARCHAR2, command_type IN VARCHAR2, object_owner IN VARCHAR2, object_name IN VARCHAR2, object_type IN VARCHAR2, ddl_text IN CLOB, logon_user IN VARCHAR2, current_schema IN VARCHAR2, base_table_owner IN VARCHAR2, base_table_name IN VARCHAR2, tag IN RAW DEFAULT NULL, transaction_id IN VARCHAR2 DEFAULT NULL, scn IN NUMBER DEFAULT NULL) RETURN SYS.LCR$_DDL_RECORD;
LCR$_DDL_RECORDコンストラクタ・ファンクションのパラメータ
表228-2 LCR$_DDL_RECORDコンストラクタ・ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
DDL文が発生したデータベース。ドメイン名を指定しない場合、このファンクションはローカル・ドメインをデータベース名に自動的に追加します。たとえば、ローカル・ドメインが |
|
DDL文で実行されるコマンドのタイプ。このパラメータは、 関連項目: コマンド・タイプの完全なリストは、『Oracle Call Interfaceプログラマーズ・ガイド』の「SQLコマンド・コード」表を参照してください。 次のコマンド・タイプは、DDL LCRではサポートされていません。 ALTER MATERIALIZED VIEW ALTER MATERIALIZED VIEW LOG ALTER SUMMARY CREATE SCHEMA CREATE MATERIALIZED VIEW CREATE MATERIALIZED VIEW LOG CREATE SUMMARY DROP MATERIALIZED VIEW DROP MATERIALIZED VIEW LOG DROP SUMMARY RENAME マテリアライズド・ビューのコマンド・タイプのスナップショットもサポートされていません。 |
|
DDL文が実行されたオブジェクトを所有するユーザー。 |
|
DDL文が実行されたデータベース・オブジェクト。 |
|
DDL文が実行されたオブジェクトのタイプ。 有効なオブジェクト・タイプは次のとおりです。 CLUSTER FUNCTION INDEX LINK OUTLINE PACKAGE PACKAGE BODY PROCEDURE SEQUENCE SYNONYM TABLE TRIGGER TYPE USER VIEW
|
|
DDL文のテキスト。このパラメータは、 |
|
DDL文を実行したセッションのユーザー。 |
|
変更済データベース・オブジェクトに対するスキーマが、 このパラメータは、 |
|
DDL文が表に関連するDDLの場合( |
|
DDL文が表に関連するDDLの場合( |
|
LCRの追跡を有効にするバイナリ・タグ。たとえば、適用による転送を使用する場合は、DDL文の元のソース・データベースを判断するためにこのタグを使用できます。 関連項目: タグの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。 |
|
トランザクションの識別子。 |
|
取得したLCRの変更レコードがREDOログに書き込まれた時点のSCN。このSCNの値は、ユーザー作成のLCRに対しては無効です。 |
表228-3 LCR$_DDL_RECORDタイプのサブプログラム
サブプログラム | 説明 |
---|---|
|
現行ユーザーのセキュリティ・ドメイン下でLCRを実行します。 |
「GET_BASE_TABLE_NAMEメンバー・ファンクション」 |
元表(依存表)名を戻します。 |
「GET_BASE_TABLE_OWNERメンバー・ファンクション」 |
元表(依存表)の所有者を戻します。 |
「GET_CURRENT_SCHEMAメンバー・ファンクション」 |
デフォルトのスキーマ(ユーザー)名を戻します。 |
|
|
|
ログオン・ユーザー名を戻します。 |
|
DDLに含まれるオブジェクトのタイプを戻します。 |
「SET_BASE_TABLE_NAMEメンバー・プロシージャ」 |
元表(依存表)名を設定します。 |
「SET_BASE_TABLE_OWNERメンバー・プロシージャ」 |
元表(依存表)の所有者を設定します。 |
「SET_CURRENT_SCHEMAメンバー・プロシージャ」 |
デフォルトのスキーマ(ユーザー)名を設定します。 |
|
DDLテキストを設定します。 |
|
ログオン・ユーザー名を設定します。 |
|
オブジェクト・タイプを設定します。 |
共通のサブプログラム |
|
現行ユーザーのセキュリティ・ドメイン下でDDL LCRを実行します。このプロシージャを使用してLCRが適用された場合、LCRに対して実行される適用プロセスのハンドラは実行されません。
注意: EXECUTE メンバー・プロシージャを起動できるのは、適用プロセスの適用ハンドラ内のみです。 |
構文
MEMBER PROCEDURE EXECUTE();
GET_BASE_TABLE_NAMEメンバー・ファンクション
元表(依存表)名を戻します。
構文
MEMBER FUNCTION GET_BASE_TABLE_NAME() RETURN VARCHAR2;
GET_BASE_TABLE_OWNERメンバー・ファンクション
元表(依存表)の所有者を戻します。
構文
MEMBER FUNCTION GET_BASE_TABLE_OWNER() RETURN VARCHAR2;
GET_CURRENT_SCHEMAメンバー・ファンクション
現行のスキーマ名を戻します。
構文
MEMBER FUNCTION GET_CURRENT_SCHEMA() RETURN VARCHAR2;
GET_DDL_TEXTメンバー・プロシージャ
CLOB
のDDLテキストを取得します。
次に、このプロシージャを使用してDDL LCRのDDLテキストを取得するPL/SQLプロシージャの例を示します。
CREATE OR REPLACE PROCEDURE ddl_in_lcr (ddl_lcr in SYS.LCR$_DDL_RECORD) IS ddl_text CLOB; BEGIN DBMS_OUTPUT.PUT_LINE( ' -----------------------------------------' ); DBMS_OUTPUT.PUT_LINE( ' Displaying DDL text in a DDL LCR: ' ); DBMS_OUTPUT.PUT_LINE( ' -----------------------------------------' ); DBMS_LOB.CREATETEMPORARY(ddl_text, true); ddl_lcr.GET_DDL_TEXT(ddl_text); DBMS_OUTPUT.PUT_LINE('DDL text:' || ddl_text); DBMS_LOB.FREETEMPORARY(ddl_text); END; /
注意: GET_DDL_TEXT は、CLOB で使用する領域の管理を容易にするためのメンバー・プロシージャであり、メンバー・ファンクションではありません。前述の例では、CLOB の一時領域が作成され、不要になると解放されることに注意してください。 |
構文
MEMBER FUNCTION GET_DDL_TEXT ddl_text IN/OUT CLOB);
パラメータ
ログオン・ユーザー名を戻します。
構文
MEMBER FUNCTION GET_LOGON_USER() RETURN VARCHAR2;
DDLに含まれるオブジェクトのタイプを戻します。
構文
MEMBER FUNCTION GET_OBJECT_TYPE() RETURN VARCHAR2;
SET_BASE_TABLE_NAMEメンバー・プロシージャ
元表(依存表)名を設定します。
構文
MEMBER PROCEDURE SET_BASE_TABLE_NAME( base_table_name IN VARCHAR2);
パラメータ
SET_BASE_TABLE_OWNERメンバー・プロシージャ
元表(依存表)の所有者を設定します。
構文
MEMBER PROCEDURE SET_BASE_TABLE_OWNER( base_table_owner IN VARCHAR2);
パラメータ
デフォルトのスキーマ(ユーザー)名を設定します。
構文
MEMBER PROCEDURE SET_CURRENT_SCHEMA( current_schema IN VARCHAR2);
パラメータ
表228-7 SET_CURRENT_SCHEMAプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
現行スキーマとして設定するスキーマの名前。このパラメータは、 |
DDLテキストを設定します。
構文
MEMBER PROCEDURE SET_DDL_TEXT( ddl_text IN CLOB);
パラメータ
ログオン・ユーザー名を設定します。
構文
MEMBER PROCEDURE SET_LOGON_USER( logon_user IN VARCHAR2);
パラメータ
オブジェクト・タイプを設定します。
構文
MEMBER PROCEDURE SET_OBJECT_TYPE( object_type IN VARCHAR2);
パラメータ
表228-10 SET_OBJECT_TYPEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
オブジェクト・タイプ。 有効なオブジェクト・タイプは次のとおりです。 CLUSTER FUNCTION INDEX LINK OUTLINE PACKAGE PACKAGE BODY PROCEDURE SEQUENCE SYNONYM TABLE TRIGGER TYPE USER VIEW
|
このタイプは、表内の行に対するデータ操作言語(DML)の変更を表します。 このタイプでは、LCR$_ROW_LIST
タイプを使用します。
行論理変更レコード(行LCR)を作成または変更する場合は、command_type
属性に、古い列値の有無と新しい列値の有無について一貫性があることを確認してください。
この項では、行LCRのコンストラクタおよびこのタイプのメンバー・サブプログラムについて説明します。
LCR$_ROW_RECORDサブプログラムの要約(「LCR$_DDL_RECORDとLCR$_ROW_RECORDに共通するサブプログラム」に記載するサブプログラムも含む)
注意:
|
指定した情報を使用して、SYS.LCR$_ROW_RECORD
オブジェクトを作成します。
STATIC FUNCTION CONSTRUCT( source_database_name IN VARCHAR2, command_type IN VARCHAR2, object_owner IN VARCHAR2, object_name IN VARCHAR2, tag IN RAW DEFAULT NULL, transaction_id IN VARCHAR2 DEFAULT NULL, scn IN NUMBER DEFAULT NULL, old_values IN SYS.LCR$_ROW_LIST DEFAULT NULL, new_values IN SYS.LCR$_ROW_LIST DEFAULT NULL) RETURN SYS.LCR$_ROW_RECORD;
LCR$_ROW_RECORDコンストラクタ・ファンクションのパラメータ
表228-11 LCR$_ROW_RECORDコンストラクタ・ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
行の変更が発生したデータベース。ドメイン名を指定しない場合、このファンクションはローカル・ドメインをデータベース名に自動的に追加します。たとえば、ローカル・ドメインが |
|
DML文で実行されるコマンドのタイプ。このパラメータは、 有効な値は次のとおりです。 INSERT UPDATE DELETE LOB ERASE LOB WRITE LOB TRIM
|
|
行の変更が発生した表を所有するユーザー。このパラメータは、 |
|
DML文が実行された表。このパラメータは、 |
|
LCRの追跡を有効にするバイナリ・タグ。たとえば、適用による転送を使用する場合は、DML変更の元のソース・データベースを判断するためにこのタグを使用できます。 関連項目: タグの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。 |
|
トランザクションの識別子。 |
|
変更レコードがREDOログに書き込まれた時点のSCN。このSCNの値は、ユーザー作成のLCRに対しては無効です。 |
|
DML変更前の行の列値。DML文が |
|
DML変更後の行の列値。DML文が LCRによってLOB操作が反映される場合は、補足的にログされた列および関連するLOB情報がこのパラメータに含まれます。 |
表228-12 LCR$_ROW_RECORDタイプのサブプログラム
サブプログラム | 説明 |
---|---|
|
指定した値タイプに応じて、古い値または新しい値として値を列に追加します。 |
「CONVERT_LONG_TO_LOB_CHUNKメンバー・プロシージャ」 |
行LCRの |
|
指定した値タイプに応じて、古い値または新しい値(あるいはその両方)を指定の列から削除します。 |
|
現行ユーザーのセキュリティ・ドメイン下でLCRを実行します。 |
「GET_LOB_INFORMATIONメンバー・ファンクション」 |
列のLOB情報を取得します。 |
|
指定した列のLOBオフセットを戻します。 |
「GET_LOB_OPERATION_SIZEメンバー・ファンクション」 |
|
「GET_LONG_INFORMATIONメンバー・ファンクション」 |
列の |
|
指定した値タイプに応じて、指定の列の古い値または新しい値を戻します。 |
|
指定した値タイプに応じて、古い値または新しい値のリストを戻します。 |
「GET_XML_INFORMATIONメンバー・ファンクション」 |
指定した列のXML情報を戻します。 |
|
LCRの列名を変更します。 |
「SET_LOB_INFORMATIONメンバー・プロシージャ」 |
列のLOB情報を設定します。 |
|
指定した列のLOBオフセットを設定します。 |
「SET_LOB_OPERATION_SIZEメンバー・プロシージャ」 |
LOB列の操作サイズを設定します。 |
|
指定した列の値を上書きします。 |
|
指定した値タイプに応じて、LCRの既存の古い値または新しい値を置換します。 |
「SET_XML_INFORMATIONメンバー・プロシージャ」 |
列のXML情報を設定します。 |
共通のサブプログラム |
|
指定した値タイプに応じて、古い値または新しい値として値を列に追加します。列に同じタイプの値がすでに存在する場合は、エラーが発生します。
注意: すでに存在する列値を設定するには、SET_VALUE を実行します。 |
LOB列に関する注意事項
DMLハンドラまたはエラー・ハンドラでLOB列を含む行LCRを処理し、ハンドラでLOBアセンブリが使用されている(ハンドラのassemble_lobs
パラメータがTRUE
に設定されている)場合は、ハンドラ・プロシージャのこのメンバー・プロシージャを使用して、LOB列を行LCRに追加します。 ハンドラのassemble_lobs
がFALSE
に設定されている場合は、このメンバー・プロシージャを使用してLOB列を行LCRに追加することはできません。
DMLハンドラまたはエラー・ハンドラを使用してLOB列を追加するには、メンバー・プロシージャでcolumn_value
パラメータのLOBロケータを指定します。 ADD_COLUMN
メンバー・プロシージャは、ANYDATA
でカプセル化されたLOBロケータが、LOBアセンブリを使用するDMLハンドラまたはエラー・ハンドラで処理されていることを検証します。次の状況では、エラーが発生します。
ハンドラで、ANYDATA
でカプセル化されたLOBロケータを使用して行LCRのエンキューを試行した場合。
正しく設定されていないLOB列を追加しようとした場合。
これらのいずれかの状況によってエラーが発生した場合は、行LCRを含むトランザクションがエラー・キューに移動し、LOBが元の(アセンブルされていない)行LCRで表示されます。
注意:
|
構文
MEMBER PROCEDURE ADD_COLUMN( value_type IN VARCHAR2, column_name IN VARCHAR2, column_value IN ANYDATA);
パラメータ
表228-13 ADD_COLUMNプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
列に追加する値のタイプ。列に古い値を追加するには、 |
|
列名。この名前は検証されません。指定した名前が無効な場合は、LCRのアプリケーション中にエラーが発生する可能性があります。 |
|
列値。 LOBアセンブリを使用するDMLハンドラまたはエラー・ハンドラでメンバー・プロシージャが使用されている場合は、LOBロケータを指定できます。
|
CONVERT_LONG_TO_LOB_CHUNKメンバー・プロシージャ
行LCRのLONG
データをCLOB
に変換するか、または行LCRのLONG
RAW
データをBLOB
に変換します。
このプロシージャは、行LCRの操作コードをLONG
WRITE
からLOB
WRITE
に変更できます。
このメンバー・プロシージャは、ルールベースの変換で使用できます。
このメンバー・プロシージャには、次の制限事項が適用されます。
このメンバー・プロシージャは、適用ハンドラでは使用できません。
LONG
データは、操作コードのINSERT
、UPDATE
またはLONG_WRITE
のいずれかによって、行LCRの一部として送信できます。LONG
データは複数回に分けて送信される場合があるため、このプロシージャは必ず、何もデータがない場合か、元のLONG
データ全体に対して実行するよう確認してください。
LOBからLONG
への変換はサポートされていません。
このプロシージャを行LCRで実行する場合、その行LCRが取得プロセスで作成されている必要があります。つまり、このプロシージャでは永続的な行LCRはサポートされていません。
関連項目: 『Oracle Streamsレプリケーション管理者ガイド』 |
構文
MEMBER PROCEDURE CONVERT_LONG_TO_LOB_CHUNK();
指定した値タイプに応じて、古い値または新しい値(あるいはその両方)を指定の列から削除します。
構文
MEMBER PROCEDURE DELETE_COLUMN( column_name IN VARCHAR2, value_type IN VARCHAR2 DEFAULT '*');
パラメータ
表228-14 DELETE_COLUMNプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
列名。LCRに列が存在しない場合は、エラーが発生します。 |
|
列から削除する値のタイプ。列の古い値を削除するには、 |
現行ユーザーのセキュリティ・ドメイン下で行LCRを実行します。このプロシージャを使用してLCRが適用された場合、LCRに対して実行される適用プロセスのハンドラは実行されません。
このメンバー・プロシージャは、次のいずれかの状況で行LCRに対して実行できます。
LCRが適用ハンドラで処理される場合。
LCRがキュー内にあり、適用プロセス、アプリケーションまたはユーザーによって最後にエンキューされる場合。
LCRが、LCR$_ROW_RECORD
コンストラクタ・ファンクションを使用して構成されていて、エンキューされていない場合。
LCRがエラー・キュー内にある場合。
注意: カスタム・ルールベースの変換では、行LCRに対してメンバー・プロシージャを実行しないでください。実行すると、行LCRがトランザクション・コンテキスト外で実行される場合があります。 |
LOB列に関する注意事項
DMLハンドラまたはエラー・ハンドラでLOB列を含む行LCRを処理し、ハンドラでLOBアセンブリが使用されている(ハンドラのassemble_lobs
パラメータがTRUE
に設定されている)場合、このメンバー・プロシージャはアセンブルされた行LCRを実行します。アセンブルされた行LCRは、LOB値をLOBロケータまたはNULL
で表します。
ハンドラのassemble_lobs
がFALSE
に設定されている場合、このメンバー・プロシージャはアセンブルされていない行LCRを実行します。アセンブルされていない行LCRは、LOB値をVARCHAR2
データ型およびRAW
データ型で表します。これらのアセンブルされていない行LCRは、ハンドラによって変更されている可能性があります。
次の状況では、エラーが発生します。
FALSE
に設定されているassemble_lobs
で構成されたDMLハンドラまたはエラー・ハンドラで、LOBロケータを含む行LCRを実行しようとした場合。
TRUE
に設定されているassemble_lobs
で構成されたDMLハンドラまたはエラー・ハンドラで、VARCHAR2
データ型またはRAW
データ型で表された1つ以上のLOB値を含む行LCRを実行しようとした場合。
これらのいずれかの状況によってエラーが発生した場合は、行LCRを含むトランザクションがエラー・キューに移動し、LOBが元の(アセンブルされていない)行LCRで表示されます。
構文
MEMBER PROCEDURE EXECUTE( conflict_resolution IN BOOLEAN);
パラメータ
表228-15 EXECUTEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
このパラメータが指定されていない場合または |
GET_LOB_INFORMATIONメンバー・ファンクション
列のLOB情報を取得します。
戻り値は次のいずれかになります。
DBMS_LCR.NOT_A_LOB CONSTANT NUMBER := 1; DBMS_LCR.NULL_LOB CONSTANT NUMBER := 2; DBMS_LCR.INLINE_LOB CONSTANT NUMBER := 3; DBMS_LCR.EMPTY_LOB CONSTANT NUMBER := 4; DBMS_LCR.LOB_CHUNK CONSTANT NUMBER := 5; DBMS_LCR.LAST_LOB_CHUNK CONSTANT NUMBER := 6;
指定した列が存在しない場合は、NULL
を戻します。
行LCRのコマンド・タイプがUPDATE
の場合は、use_old
パラメータに'Y'
を指定すると、列値を簡単に取得できます。
構文
MEMBER FUNCTION GET_LOB_INFORMATION( value_type IN VARCHAR2, column_name IN VARCHAR2, use_old IN VARCHAR2 DEFAULT 'Y') RETURN NUMBER;
パラメータ
表228-16 GET_LOB_INFORMATIONファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
列に戻す値のタイプ。 |
|
列の名前。 |
|
|
指定した列のLOBオフセットを、文字数(CLOB
列の場合)またはバイト数(BLOB
列の場合)で取得します。次のすべての条件を満たす場合のみ、NULL
以外の値を戻します。
列値が存在する場合。
列値が表外のLOBの場合。 つまり、情報がDBMS_LCR.LAST_LOB_CHUNK
またはDBMS_LCR.LOB_CHUNK
の場合。
コマンド・タイプがLOB
ERASE
またはLOB
WRITE
の場合。
これらの条件を満たさない場合は、NULL
を戻します。
構文
GET_LOB_OFFSET( value_type IN VARCHAR2, column_name IN VARCHAR2) RETURN NUMBER;
パラメータ
表228-17 GET_LOB_OFFSETプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
列に戻す値のタイプ。現在は、 |
|
LOB列の名前。 |
GET_LOB_OPERATION_SIZEメンバー・ファンクション
LOB列の操作サイズを、文字数(CLOB
列の場合)またはバイト数(BLOB
列の場合)で取得します。次のすべての条件を満たす場合のみ、NULL
以外の値を戻します。
列値が存在する場合。
列値が表外のLOBの場合。
コマンド・タイプがLOB
ERASE
またはLOB
TRIM
の場合。
情報がDBMS_LCR.LAST_LOB_CHUNK
の場合。
これらの条件を満たさない場合は、NULL
を戻します。
構文
MEMBER FUNCTION GET_LOB_OPERATION_SIZE( value_type IN VARCHAR2, column_name IN VARCHAR2) RETURN NUMBER,
パラメータ
表228-18 GET_LOB_OPERATION_SIZEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
列に戻す値のタイプ。現在は、 |
|
LOB列の名前。 |
GET_LONG_INFORMATIONメンバー・ファンクション
列のLONG情報を取得します。
戻り値は次のいずれかになります。
DBMS_LCR.NOT_A_LONG CONSTANT NUMBER := 1; DBMS_LCR.NULL_LONG CONSTANT NUMBER := 2; DBMS_LCR.INLINE_LONG CONSTANT NUMBER := 3; DBMS_LCR.LONG_CHUNK CONSTANT NUMBER := 4; DBMS_LCR.LAST_LONG_CHUNK CONSTANT NUMBER := 5;
指定した列が存在しない場合は、NULL
を戻します。
行LCRのコマンド・タイプがUPDATE
の場合は、use_old
パラメータに'Y'
を指定すると、列値を簡単に取得できます。
構文
MEMBER FUNCTION GET_LONG_INFORMATION( value_type IN VARCHAR2, column_name IN VARCHAR2, use_old IN VARCHAR2 DEFAULT 'Y') RETURN NUMBER;
パラメータ
表228-19 GET_LONG_INFORMATIONファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
列に戻す値のタイプ。 |
|
列の名前。 |
|
|
指定した値タイプに応じて、指定の列の古い値または新しい値を戻します。
行LCRのコマンド・タイプがUPDATE
の場合は、use_old
パラメータに'Y'
を指定すると、列値を簡単に取得できます。
構文
MEMBER FUNCTION GET_VALUE( value_type IN VARCHAR2, column_name IN VARCHAR2, use_old IN VARCHAR2 DEFAULT 'Y') RETURN ANYDATA;
パラメータ
表228-20 GET_VALUEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
列に戻す値のタイプ。列の古い値を取得するには、 |
|
列名。列が存在し、その値が |
|
|
指定した値タイプに応じて、古い値または新しい値のリストを戻します。
行LCRのコマンド・タイプがUPDATE
の場合は、use_old
パラメータに'Y'
を指定すると、全列の値を簡単に取得できます。
構文
MEMBER FUNCTION GET_VALUES( value_type IN VARCHAR2, use_old IN VARCHAR2 DEFAULT 'Y') RETURN SYS.LCR$_ROW_LIST;
パラメータ
表228-21 GET_VALUESファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
戻す値のタイプ。古い値のリストを戻す場合は、 |
|
|
GET_XML_INFORMATIONメンバー・ファンクション
指定した列のXML情報を戻します。
戻り値は次のいずれかになります。
DBMS_LCR.NOT_XML CONSTANT NUMBER := 1; DBMS_LCR.XML_DOC CONSTANT NUMBER := 2; DBMS_LCR.XML_DIFF CONSTANT NUMBER := 3;
DBMS_LCR.NOT_XML
は、列がXMLType
列ではないことを示します。DBMS_LCR.XML_DOC
は、列にXML文書が含まれることを示します。 DBMS_LCR.XML_DIFF
は、更新操作の元のXML文書と新しいXML文書間の違いが列に含まれることを示します。
指定した列が存在しない場合は、NULL
を戻します。
構文
MEMBER FUNCTION GET_XML_INFORMATION( column_name IN VARCHAR2) RETURN NUMBER,
パラメータ
LCRの列名を変更します。
構文
MEMBER PROCEDURE RENAME_COLUMN( from_column_name IN VARCHAR2, to_column_name IN VARCHAR2, value_type IN VARCHAR2 DEFAULT '*');
パラメータ
表228-23 RENAME_COLUMNプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
既存の列名。 |
|
新しい列名。指定した名前の列がすでに存在する場合は、エラーが発生します。 |
|
列名を変更する値のタイプ。 古い値の列名を変更するには、 新しい値の列名を変更するには、
|
SET_LOB_INFORMATIONメンバー・プロシージャ
列にLOB情報を設定します。
注意: ルールベースの変換、DMLハンドラまたはエラー・ハンドラで行LCRを処理する場合は、このメンバー・プロシージャを使用できません。 |
構文
MEMBER PROCEDURE SET_LOB_INFORMATION( value_type IN VARCHAR2, column_name IN VARCHAR2, lob_information IN NUMBER);
パラメータ
表228-24 SET_LOB_INFORMATIONプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
列に設定する値のタイプ。 |
|
列の名前。列値が存在しない場合は、例外が発生します。このパラメータは、LOB以外の列に対して設定する必要があります。 |
|
次のいずれかの値を指定します。 DBMS_LCR.NOT_A_LOB CONSTANT NUMBER := 1; DBMS_LCR.NULL_LOB CONSTANT NUMBER := 2; DBMS_LCR.INLINE_LOB CONSTANT NUMBER := 3; DBMS_LCR.EMPTY_LOB CONSTANT NUMBER := 4; DBMS_LCR.LOB_CHUNK CONSTANT NUMBER := 5; DBMS_LCR.LAST_LOB_CHUNK CONSTANT NUMBER := 6; |
指定した列のLOBオフセットを、文字数(CLOB
列の場合)またはバイト数(BLOB
列の場合)で設定します。
注意: ルールベースの変換、DMLハンドラまたはエラー・ハンドラで行LCRを処理する場合は、このメンバー・プロシージャを使用できません。 |
構文
MEMBER PROCEDURE SET_LOB_OFFSET( value_type IN VARCHAR2, column_name IN VARCHAR2, lob_offset IN NUMBER);
パラメータ
表228-25 SET_LOB_OFFSETプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
列に設定する値のタイプ。現在は、 |
|
列名。LCRに列値が存在しない場合は、エラーが発生します。 |
|
LOBオフセット番号。有効な値は、 |
SET_LOB_OPERATION_SIZEメンバー・プロシージャ
LOB列の操作サイズを、文字数(CLOB
列の場合)またはバイト数(BLOB
列の場合)で設定します。
注意: ルールベースの変換、DMLハンドラまたはエラー・ハンドラで行LCRを処理する場合は、このメンバー・プロシージャを使用できません。 |
構文
MEMBER PROCEDURE SET_LOB_OPERATION_SIZE( value_type IN VARCHAR2, column_name IN VARCHAR2, lob_operation_size IN NUMBER);
パラメータ
表228-26 SET_LOB_OPERATION_SIZEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
列に設定する値のタイプ。現在は、 |
|
LOB列の名前。LCRに列値が存在しない場合は、例外が発生します。 |
|
LOBに関する それ以外の場合は、 |
指定した列の古い値または新しい値を上書きします。
列の古い値を上書きする理由の1つは、競合によって発生したエラーを解決するためです。
注意: 行LCRに列を追加するには、ADD_COLUMN を実行します。 |
LOB列に関する注意事項
DMLハンドラまたはエラー・ハンドラでLOB列を含む行LCRを処理し、ハンドラでLOBアセンブリが使用されている(ハンドラのassemble_lobs
パラメータがTRUE
に設定されている)場合は、行LCR内のLOB列に対して、ハンドラ・プロシージャのこのメンバー・プロシージャを使用できます。 ハンドラのassemble_lobs
がFALSE
に設定されている場合は、LOB列に対してこのメンバー・プロシージャを使用することはできません。
DMLハンドラまたはエラー・ハンドラを使用してLOB列の値を設定するには、メンバー・プロシージャでcolumn_value
パラメータのLOBロケータを指定します。 SET_VALUE
メンバー・プロシージャは、ANYDATA
でカプセル化されたLOBロケータが、LOBアセンブリを使用するDMLハンドラまたはエラー・ハンドラで処理されていることを検証します。次の状況では、エラーが発生します。
ハンドラで、ANYDATA
でカプセル化されたLOBロケータを使用して行LCRのエンキューを試行した場合。
LOB列を誤って設定しようとした場合。
これらのいずれかの状況によってエラーが発生した場合は、行LCRを含むトランザクションがエラー・キューに移動し、LOBが元の(アセンブルされていない)行LCRで表示されます。
注意:
|
XMLType列に関する注意事項
DMLハンドラまたはエラー・ハンドラでXMLType
列を含む行LCRを処理する場合、LCRに含まれるすべてのXMLType
列およびLOB列は常にLOBアセンブリを使用してアセンブルされます。ハンドラ・プロシージャのこのメンバー・プロシージャは、1つ以上のXMLType
列を含む行LCRに対して使用できます。
DMLハンドラまたはエラー・ハンドラを使用してXMLType
列の値を設定するには、column_value
パラメータにXMLType
を指定します。 SET_VALUE
メンバー・プロシージャは、ANYDATA
でカプセル化されたXMLType
がDMLハンドラまたはエラー・ハンドラで処理されていることを検証します。次の状況では、エラーが発生します。
ハンドラで、ANYDATA
でカプセル化されたXMLType
を使用して行LCRのエンキューを試行した場合。
XMLType
列を誤って設定しようとした場合。
これらのいずれかの状況によってエラーが発生した場合は、行LCRを含むトランザクションがエラー・キューに移動し、XMLType
列が元の(アセンブルされていない)行LCRで表示されます。
注意:
|
構文
MEMBER PROCEDURE SET_VALUE( value_type IN VARCHAR2, column_name IN VARCHAR2, column_value IN ANYDATA);
パラメータ
表228-27 SET_VALUEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
設定する値のタイプ。列の古い値を設定するには、 |
|
列名。 指定した |
|
列の新しい値。 LOBアセンブリを使用するDMLハンドラまたはエラー・ハンドラでメンバー・プロシージャが使用されている場合は、LOB列にLOBロケータを指定します。 |
指定した値タイプに応じて、LCRの古い値または新しい値をすべて置換します。
LOB列に関する注意事項
DMLハンドラまたはエラー・ハンドラでLOB列を含む行LCRを処理し、ハンドラでLOBアセンブリが使用されている(ハンドラのassemble_lobs
パラメータがTRUE
に設定されている)場合は、1つ以上のLOB列を含む行LCRに対して、ハンドラ・プロシージャのこのメンバー・プロシージャを使用できます。 ハンドラのassemble_lobs
がFALSE
に設定されている場合は、行LCRに対してこのメンバー・プロシージャを使用することはできません。
DMLハンドラまたはエラー・ハンドラを使用して行LCRの1つ以上のLOB列の値を設定するには、value_list
パラメータに各LOB列のLOBロケータを指定します。 SET_VALUES
メンバー・プロシージャは、ANYDATA
でカプセル化されたLOBロケータが、LOBアセンブリを使用するDMLハンドラまたはエラー・ハンドラで処理されていることを検証します。次の状況では、エラーが発生します。
ハンドラで、ANYDATA
でカプセル化されたLOBロケータを使用して行LCRのエンキューを試行した場合。
LOB列を誤って設定しようとした場合。
これらのいずれかの状況によってエラーが発生した場合は、行LCRを含むトランザクションがエラー・キューに移動し、LOBが元の(アセンブルされていない)行LCRで表示されます。
注意:
|
XMLType列に関する注意事項
DMLハンドラまたはエラー・ハンドラでXMLType
列を含む行LCRを処理する場合、LCRに含まれるすべてのXMLType
列およびLOB列は常にLOBアセンブリを使用してアセンブルされます。ハンドラ・プロシージャのこのメンバー・プロシージャは、1つ以上のXMLType
列を含む行LCRに対して使用できます。
DMLハンドラまたはエラー・ハンドラを使用して行LCRの1つ以上のXMLType
列の値を設定するには、value_list
パラメータに各XMLType
列のXMLType
を指定します。 SET_VALUES
メンバー・プロシージャは、ANYDATA
でカプセル化されたXMLType
がDMLハンドラまたはエラー・ハンドラで処理されていることを検証します。次の状況では、エラーが発生します。
ハンドラで、ANYDATA
でカプセル化されたXMLType
を使用して行LCRのエンキューを試行した場合。
XMLType
を誤って設定しようとした場合。
これらのいずれかの状況によってエラーが発生した場合は、行LCRを含むトランザクションがエラー・キューに移動し、XMLType
列が元の(アセンブルされていない)行LCRで表示されます。
注意:
|
構文
MEMBER PROCEDURE SET_VALUES( value_type IN VARCHAR2, value_list IN SYS.LCR$_ROW_LIST);
パラメータ
表228-28 SET_VALUESプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
置換する値のタイプ。古い値を置換するには、 |
|
既存のリストを置換するLOV。すべての値を削除するには、 LOBアセンブリを使用するDMLハンドラまたはエラー・ハンドラでメンバー・プロシージャが使用されている場合は、LOB列に1つ以上のLOBロケータを指定します。 |
SET_XML_INFORMATIONメンバー・プロシージャ
列のXML情報を設定します。
構文
MEMBER PROCEDURE SET_XML_INFORMATION( column_name IN VARCHAR2, xml_information IN NUMBER);
パラメータ
表228-29 SET_XML_INFORMATIONプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
列の名前。LCRに列値が存在しない場合は、例外が発生します。 |
|
次のいずれかの値を指定します。 DBMS_LCR.NOT_XML CONSTANT NUMBER := 1; DBMS_LCR.XML_DOC CONSTANT NUMBER := 2; DBMS_LCR.XML_DIFF CONSTANT NUMBER := 3;
|
次に、LCR$_DDL_RECORD
タイプとLCR$_ROW_RECORD
タイプに共通するファンクションとプロシージャを示します。
表228-30 DDL LCRタイプと行LCRタイプに共通するサブプログラムの要約
サブプログラム | 説明 |
---|---|
「GET_COMMAND_TYPEメンバー・ファンクション」 |
論理変更レコード(LCR)のコマンド・タイプを戻します。 |
|
現在LCRが属するトランザクションのコミットSCN(システム変更番号)を戻します。 |
|
LCRのサポートに最小限必要なデータベース互換性を戻します。 |
「GET_EXTRA_ATTRIBUTEメンバー・ファンクション」 |
LCRに指定された追加属性の値を戻します。 |
|
LCRによって変更されるオブジェクトの名前を戻します。 |
「GET_OBJECT_OWNERメンバー・ファンクション」 |
LCRによって変更されるオブジェクトの所有者を戻します。 |
|
LCRのシステム変更番号(SCN)を戻します。 |
「GET_SOURCE_DATABASE_NAMEメンバー・ファンクション」 |
ソース・データベース名を戻します。 |
|
取得プロセスで取得されたLCRの変更がソース・データベースのREDOログで生成された時刻、または永続LCRが作成された時刻を戻します。 |
|
LCRのタグを戻します。 |
「GET_TRANSACTION_IDメンバー・ファンクション」 |
LCRのトランザクション識別子を戻します。 |
|
LCRのタグが |
|
LCRのコマンド・タイプを設定します。 |
「SET_EXTRA_ATTRIBUTEメンバー・プロシージャ」 |
LCRに指定された追加属性に値を設定します。 |
|
LCRによって変更されるオブジェクトの名前を設定します。 |
|
LCRによって変更されるオブジェクトの所有者を設定します。 |
「SET_SOURCE_DATABASE_NAMEメンバー・プロシージャ」 |
LCRによって変更されるオブジェクトのソース・データベース名を設定します。 |
|
LCRにタグを設定します。 |
LCRのコマンド・タイプを戻します。
関連項目: コマンド・タイプの完全なリストは、『Oracle Call Interfaceプログラマーズ・ガイド』の「SQLコマンド・コード」表を参照してください。 |
構文
MEMBER FUNCTION GET_COMMAND_TYPE() RETURN VARCHAR2;
現在LCRが属するトランザクションのコミットSCN(システム変更番号)を戻します。
トランザクションのコミットSCNは、適用中またはエラー・トランザクションの実行中にのみ使用できます。このファンクションは、DMLハンドラ、DDLハンドラまたはエラー・ハンドラでのみ使用できます。これらのハンドラでは、このファンクションによって取得したSCNを使用して、LCRの属するトランザクションのコミット時間へフラッシュバックできます。このとき、フラッシュバックはLCRのソース・データベースで行う必要があります。
コミットSCNは、不完全なトランザクションに属するLCRについては使用できません。たとえば、永続LCRにはコミットSCNが設定されない可能性があります。LCRでコミットSCNを使用できない場合、このファンクションはNULL
を戻します。
構文
MEMBER FUNCTION GET_COMMIT_SCN() RETURN NUMBER;
LCRのサポートに最小限必要なデータベース互換性を戻します。Oracle Databaseの互換性は、COMPATIBLE
初期化パラメータを使用して制御します。
このファンクションの戻り値は次のいずれかになります。
戻り値 | COMPATIBLE初期化パラメータと同等のもの |
---|---|
DBMS_STREAMS.COMPATIBLE_9_2 |
9.2.0 |
DBMS_STREAMS.COMPATIBLE_10_1 |
10.1.0 |
DBMS_STREAMS.COMPATIBLE_10_2 |
10.2.0 |
DBMS_STREAMS.COMPATIBLE_11_1 |
11.1.0 |
DDL LCRは、常にDBMS_STREAMS.COMPATIBLE_9_2
を戻します。
次のファンクションを使用して、互換性に関する定数の戻り値を取得できます。
DBMS_STREAMS.COMPATIBLE_9_2
ファンクションは、DBMS_STREAMS.COMPATIBLE_9_2
定数を戻します。
DBMS_STREAMS.COMPATIBLE_10_1
ファンクションは、DBMS_STREAMS.COMPATIBLE_10_1
定数を戻します。
DBMS_STREAMS.COMPATIBLE_10_2
ファンクションは、DBMS_STREAMS.COMPATIBLE_10_2
定数を戻します。
DBMS_STREAMS.COMPATIBLE_11_1
ファンクションは、DBMS_STREAMS.COMPATIBLE_11_1
定数を戻します。
これらのファンクションは、ルール条件と適用ハンドラを使用して、LCRのGET_COMPATIBLE
メンバー・ファンクションとともに使用できます。
注意: DBA_STREAMS_UNSUPPORTED データ・ディクショナリ・ビューを問い合せることにより、データベース内のOracle Streamsでサポートされていないデータベース・オブジェクトを確認できます。 |
関連項目:
|
構文
MEMBER FUNCTION GET_COMPATIBLE() RETURN NUMBER;
GET_EXTRA_ATTRIBUTEメンバー・ファンクション
LCRに指定された追加属性の値を戻します。戻された追加属性は、ANYDATA
インスタンスに格納されます。DBMS_CAPTURE_ADM
パッケージのINCLUDE_EXTRA_ATTRIBUTE
プロシージャを使用して取得プロセスを実行すると、1つ以上の追加属性を取得できます。
構文
MEMBER FUNCTION GET_EXTRA_ATTRIBUTE( attribute_name IN VARCHAR2) RETURN ANYDATA;
パラメータ
表228-31 GET_EXTRA_ATTRIBUTEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
戻す追加属性の名前。有効な名前は次のとおりです。
指定された 指定された追加属性に値が存在しない場合、このファンクションは 関連項目: 現行のユーザーの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。 |
LCRによって変更されるオブジェクトの名前を戻します。
構文
MEMBER FUNCTION GET_OBJECT_NAME() RETURN VARCHAR2;
LCRによって変更されるオブジェクトの所有者を戻します。
構文
MEMBER FUNCTION GET_OBJECT_OWNER() RETURN VARCHAR2;
LCRのシステム変更番号(SCN)を戻します。
構文
MEMBER FUNCTION GET_SCN() RETURN NUMBER;
GET_SOURCE_DATABASE_NAMEメンバー・ファンクション
ソース・データベース名のグローバル名を戻します。ソース・データベースとは、変更が発生したデータベースです。
構文
MEMBER FUNCTION GET_SOURCE_DATABASE_NAME() RETURN VARCHAR2;
取得プロセスで取得されたLCRの変更がソース・データベースのREDOログで生成された時刻、または永続LCRが作成された時刻を戻します。
構文
MEMBER FUNCTION GET_SOURCE_TIME() RETURN DATE;
LCRのタグを戻します。LCRのタグとは、LCRの追跡を有効にするバイナリ・タグです。たとえば、適用による転送を使用する場合は、DML変更またはDDL変更の元のソース・データベースを判断するためにこのタグを使用できます。
関連項目: タグの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。 |
構文
MEMBER FUNCTION GET_TAG() RETURN RAW;
GET_TRANSACTION_IDメンバー・ファンクション
LCRのトランザクション識別子を戻します。
構文
MEMBER FUNCTION GET_TRANSACTION_ID() RETURN VARCHAR2;
LCRのタグがNULL
の場合はY
を、NULL
でない場合はN
を戻します。
関連項目: タグの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。 |
構文
MEMBER FUNCTION IS_NULL_TAG() RETURN VARCHAR2;
LCRのコマンド・タイプを設定します。指定したコマンド・タイプを解釈できない場合は、エラーが発生します。たとえば、INSERT
をGRANT
に変更すると、エラーが発生します。
関連項目:
|
構文
MEMBER PROCEDURE SET_COMMAND_TYPE( command_type IN VARCHAR2);
パラメータ
SET_EXTRA_ATTRIBUTEメンバー・プロシージャ
LCRに指定された追加属性に値を設定します。DBMS_CAPTURE_ADM
パッケージのINCLUDE_EXTRA_ATTRIBUTE
プロシージャを使用して取得プロセスを実行すると、1つ以上の追加属性を取得できます。
構文
MEMBER PROCEDURE SET_EXTRA_ATTRIBUTE( attribute_name IN VARCHAR2, attribute_value IN ANYDATA);
パラメータ
表228-33 SET_EXTRA_ATTRIBUTEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
設定する追加属性の名前。有効な名前は次のとおりです。
指定された 関連項目: 現行のユーザーの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。 |
|
指定された追加属性に設定する値。 |
LCRによって変更されるオブジェクトの名前を設定します。
構文
MEMBER PROCEDURE SET_OBJECT_NAME( object_name IN VARCHAR2);
パラメータ
LCRによって変更されるオブジェクトの所有者を設定します。
構文
MEMBER PROCEDURE SET_OBJECT_OWNER( object_owner IN VARCHAR2);
パラメータ
SET_SOURCE_DATABASE_NAMEメンバー・プロシージャ
LCRによって変更されるオブジェクトのソース・データベース名を設定します。
構文
MEMBER PROCEDURE SET_SOURCE_DATABASE_NAME( source_database_name IN VARCHAR2);
パラメータ
表228-36 SET_SOURCE_DATABASE_NAMEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
変更対象のソース・データベース。ドメイン名を指定しない場合、このプロシージャはローカル・ドメインをデータベース名に自動的に追加します。たとえば、ローカル・ドメインが |
LCRにタグを設定します。LCRのタグとは、LCRの追跡を有効にするバイナリ・タグです。たとえば、適用による転送を使用する場合は、変更の元のソース・データベースを判断するためにこのタグを使用できます。
関連項目: タグの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。 |
構文
MEMBER PROCEDURE SET_TAG( tag IN RAW);
パラメータ
表内の行の列値リストを識別します。
このタイプは、LCR$_ROW_UNIT
タイプを使用し、LCR$_ROW_RECORD
タイプで使用されます。
構文
CREATE TYPE SYS.LCR$_ROW_LIST AS TABLE OF SYS.LCR$_ROW_UNIT /
行内の列値を識別します。
このタイプは、LCR$_ROW_LIST
タイプで使用されます。
構文
CREATE TYPE LCR$_ROW_UNIT AS OBJECT ( column_name VARCHAR2(4000), data ANYDATA, lob_information NUMBER, lob_offset NUMBER, lob_operation_size NUMBER long_information NUMBER); /
属性
表228-38 LCR$_ROW_UNITの属性
属性 | 説明 |
---|---|
|
列の名前。 |
|
列に含まれるデータ。 |
|
列のLOB情報として、次のいずれかの値が含まれます。 DBMS_LCR.NOT_A_LOB CONSTANT NUMBER := 1; DBMS_LCR.NULL_LOB CONSTANT NUMBER := 2; DBMS_LCR.INLINE_LOB CONSTANT NUMBER := 3; DBMS_LCR.EMPTY_LOB CONSTANT NUMBER := 4; DBMS_LCR.LOB_CHUNK CONSTANT NUMBER := 5; DBMS_LCR.LAST_LOB_CHUNK CONSTANT NUMBER := 6; |
|
文字数( |
|
LOBに関する
|
|
列の
|