16.40 SET_ROW_VERSION_CHECKSUMプロシージャ
このプロシージャは、現在のDML行のロストアップデート検出に使用する行バージョン・チェックサムを設定します。これはadd_dml_row
の後にコールします。
構文
PROCEDURE SET_ROW_VERSION_CHECKSUM(
p_context IN t_context,
p_checksum IN VARCHAR2 );
パラメータ
表16-38 SET_ROW_VERSION_CHECKSUMプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
OPENファンクションのいずれかを使用して取得したコンテキスト・オブジェクト。 |
|
この行のロストアップデート検出に使用するチェックサム。 |
例
次の例では、EMP表に対して問合せコンテキストを開き、EMPNO=7839
の行のすべての値と行バージョン・チェックサムを取得します。次に、SAL
列を更新するためのDMLコンテキストを開き、ロストアップデート検出のために行バージョン・チェックサムが使用されます。
declare
l_columns apex_exec.t_columns;
l_dml_context apex_exec.t_context;
l_query_context apex_exec.t_context;
begin
-- I. Define DML columns
apex_exec.add_column(
p_columns => l_columns,
p_column_name => 'EMPNO',
p_data_type => apex_exec.c_data_type_number,
p_is_primary_key => true );
apex_exec.add_column(
p_columns => l_columns,
p_column_name => 'ENAME',
p_data_type => apex_exec.c_data_type_varchar2 );
apex_exec.add_column(
p_columns => l_columns,
p_column_name => 'JOB',
p_data_type => apex_exec.c_data_type_varchar2 );
apex_exec.add_column(
p_columns => l_columns,
p_column_name => 'HIREDATE',
p_data_type => apex_exec.c_data_type_date );
apex_exec.add_column(
p_columns => l_columns,
p_column_name => 'MGR',
p_data_type => apex_exec.c_data_type_number );
apex_exec.add_column(
p_columns => l_columns,
p_column_name => 'SAL',
p_data_type => apex_exec.c_data_type_number );
apex_exec.add_column(
p_columns => l_columns,
p_column_name => 'COMM',
p_data_type => apex_exec.c_data_type_number );
apex_exec.add_column(
p_columns => l_columns,
p_column_name => 'DEPTNO',
p_data_type => apex_exec.c_data_type_number );
-- II. Open the Query Context object
l_query_context := apex_exec.open_remote_sql_query(
p_server_static_id => 'DevOps_Remote_SQL',
p_sql_query => 'select * from emp where empno = 7839',
p_columns => l_columns );
-- III. Open the DML context object
l_dml_context := apex_exec.open_remote_dml_context(
p_server_static_id => '{remote server static id}',
p_columns => l_columns,
p_query_type => apex_exec.c_query_type_sql_query,
p_sql_query => 'select * from emp where deptno = 10',
p_lost_update_detection => apex_exec.c_lost_update_implicit );
if apex_exec.next_row( p_context => l_query_context ) then
apex_exec.add_dml_row(
p_context => l_dml_context,
p_operation => apex_exec.c_dml_operation_update);
apex_exec.set_row_version_checksum(
p_context => l_dml_context,
p_checksum => apex_exec.get_row_version_checksum( p_context => l_query_context );
apex_exec.set_values(
p_context => l_dml_context,
p_cource_context => l_query_context );
apex_exec.set_value(
p_column_name => 'SAL',
p_value => 8000 );
else
raise_application_error( -20000, 'EMPNO #4711 is not present!');
end if;
apex_exec.execute_dml(
p_context => l_dml_context,
p_continue_on_error => false);
apex_exec.close( l_dml_context );
apex_exec.close( l_query_context );
exception
when others then
apex_exec.close( l_dml_context );
apex_exec.close( l_query_context );
raise;
end;
親トピック: APEX_EXEC