将记录插入/更新到不同数据库DB2触发器

t9eec4r0  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(139)

我想在一个数据库的表上创建一个触发器,并将该触发器的记录添加到另一个数据库的表中。让我们假设,我在第一个数据库中有一个表,该表有5行和2列。另一方面,我在另一个数据库中有一个表,该表有3行和2列,其中另一个数据库的表中有3行与第一个数据库的表中的3行完全相同。
我知道,如何在同一个数据库上触发插入/更新表。但是如何触发表从一个数据库到另一个数据库呢?
下面是触发同一数据库中的表的代码。
数据库_1---〉模式_1---〉表_1

|col1  col2|
_____|_____
|1a   1b   |
|2a   2b   |
|3a   3b   |
|4a   4b   |
|5a   5b   |

数据库_2---〉模式_2---〉表_2
第一个

c0vxltue

c0vxltue1#

用触发器可不行。
更新另一个数据库中的表的方法是使用昵称。
CREATE TRIGGER statement声明:

SQL过程语句

指定要作为触发操作一部分的SQL语句。不支持对复合SQL中的昵称执行搜索更新、搜索删除、插入或合并操作。

不支持在搜索的UPDATE语句、DELETE语句或INSERT语句中包含对昵称的引用的过程(SQLSTATE 25000)。
您可以将一些过程逻辑用于支持2 PC的联邦服务器,但不能用于触发器。
Enabling two-phase commit for federated transactions

更新日期:

首先,您应该熟悉Db2中Federation的概念。
Db2 -〉Db2联合的关键技术主题包括:
Enabling the federated server to access data sources(如果需要,请更新dbm cfg参数,并重新启动联邦服务器示例)。
Configuring remote Db2 data source information
在联合服务器上:

CREATE WRAPPER DRDA;

-- MYREMDB the alias of a cataloged remote database
CREATE SERVER MYSERVER
   TYPE DB2/UDB 
   VERSION '11.5' 
   WRAPPER "DRDA"
AUTHORIZATION some_user PASSWORD "some_password"
OPTIONS
(
  DBNAME  'MYREMDB'
, DB2_TWO_PHASE_COMMIT  'Y'
-- may be other options like:
, DB2_MAXIMAL_PUSHDOWN 'Y'
);

-- User mapping for some MY_LOCAL_USER
-- all work from MY_LOCAL_USER with remote tables will be with
-- this MY_REMOTE_USER account.
-- The corresponding GRANT statements must be run on
-- MY_LOCAL_USER locally and MY_REMOTE_USER remotely
-- to work with the corresponding tables
CREATE USER MAPPING FOR MY_LOCAL_USER
SERVER MYSERVER
OPTIONS
(
   REMOTE_AUTHID  'my_remote_user'
 , REMOTE_PASSWORD  'my_remote_password'
);

-- Create a nickname or use 3-part name directly in your statements
-- MYSERVER.MY_REMOTE_SCHEMA.MY_REMOTE_TABLE
CREATE NICKNAME MY_SCHEMA.MY_REMOTE_TABLE_NICKNAME
FOR MYSERVER.MY_REMOTE_SCHEMA.MY_REMOTE_TABLE;

-- Usage
-- Switch the autocommit off in your session
-- Both statements are either committed or rolled back successfully in their databases
-- because of 2PC option (DB2_TWO_PHASE_COMMIT) of the server MYSERVER
-- disregarding of what or where fails
INSERT INTO MY_LOCAL_TABLE ...;
INSERT INTO MY_SCHEMA.MY_REMOTE_TABLE_NICKNAME ...;
-- OR
-- INSERT INTO MYSERVER.MY_REMOTE_SCHEMA.MY_REMOTE_TABLE ...;
COMMIT;

相关问题