如何根据国外 table 更新另一个 table
How to update another table based on foreign table
我有两个数据库“销售”和“服务”,然后为两个 table 的“销售”数据库(帐户和订单)在服务上创建了一个外部数据包装器,并创建了两个外部 tables 在名为 accounts_sales 和 orders_sales.
的服务上
现在在 order_sales 国外 table,我创建了一个触发器,如果任何帐户有任何新订单,记录将插入 service.accounts table但它不工作。下面是代码。
CREATE table sales.accounts
(
account_id int,
account_name text
)
CREATE table sales.order
(
order_id_id int,
order_code text,
amount numeric,
account-id int
)
然后在服务环境上为上述table创建了两个外来的table。
CREATE table accounts_sale
(
account_id int,
account_name text
) SERVER sales
OPTIONS (schema_name 'public', table_name 'accounts');
CREATE table order_sales
(
order_id_id int,
order_code text,
amount numeric,
account-id int
) SERVER sales
OPTIONS (schema_name 'public', table_name 'orders');
现在我希望在销售环境中生成任何新的销售订单时,应根据 sales.order table 在 service.accounts table 中插入或更新新的帐户条目.
这是我在 order_sales table
上创建的触发器
CREATE OR REPLACE FUNCTION set_sales_account_creation()
RETURNS trigger
LANGUAGE 'plpgsql'
AS $BODY$
BEGIN
IF TG_OP = 'INSERT' THEN
v_effective_from := NEW.created_date;
v_created_by := NEW.created_by;
ELSE
v_effective_from := NEW.last_modified_date;
v_created_by := NEW.last_modified_by;
END IF;
IF TG_OP IN ('INSERT') THEN
SELECT COUNT(1) INTO V_COUNT FROM
ACCOUNTS WHERE SALES_ACCOUNT_ID = NEW.account_id;
IF V_COUNT IS NULL OR V_COUNT = 0 THEN
INSERT INTO service.accounts
SELECT
FROM accounts_sales
WHERE account_id = new.account_id;
END IF;
END IF;
RETURN NUll;
END;
$BODY$;
但是当我在 Sales.orders table 中插入新订单时,它就不起作用了。
CREATE TRIGGER TRG_ACCOUNT_SYNCUP_SALES
BEFORE INSERT OR UPDATE
ON service.order_sales
FOR EACH ROW
EXECUTE PROCEDURE set_sales_account_creation();
对于外国 table 的触发器如何工作存在一个根本性的误解。
如果你在数据库 A 中,并且你有一个外部 table 引用数据库 B 中的一个 table,那么 A 中外部 table 上的触发器将触发每当你 运行 DML 语句 针对 A 中的外国 table。如果您修改 B.
中引用的 table,触发器将 不会 触发
我有两个数据库“销售”和“服务”,然后为两个 table 的“销售”数据库(帐户和订单)在服务上创建了一个外部数据包装器,并创建了两个外部 tables 在名为 accounts_sales 和 orders_sales.
的服务上现在在 order_sales 国外 table,我创建了一个触发器,如果任何帐户有任何新订单,记录将插入 service.accounts table但它不工作。下面是代码。
CREATE table sales.accounts
(
account_id int,
account_name text
)
CREATE table sales.order
(
order_id_id int,
order_code text,
amount numeric,
account-id int
)
然后在服务环境上为上述table创建了两个外来的table。
CREATE table accounts_sale
(
account_id int,
account_name text
) SERVER sales
OPTIONS (schema_name 'public', table_name 'accounts');
CREATE table order_sales
(
order_id_id int,
order_code text,
amount numeric,
account-id int
) SERVER sales
OPTIONS (schema_name 'public', table_name 'orders');
现在我希望在销售环境中生成任何新的销售订单时,应根据 sales.order table 在 service.accounts table 中插入或更新新的帐户条目.
这是我在 order_sales table
上创建的触发器 CREATE OR REPLACE FUNCTION set_sales_account_creation()
RETURNS trigger
LANGUAGE 'plpgsql'
AS $BODY$
BEGIN
IF TG_OP = 'INSERT' THEN
v_effective_from := NEW.created_date;
v_created_by := NEW.created_by;
ELSE
v_effective_from := NEW.last_modified_date;
v_created_by := NEW.last_modified_by;
END IF;
IF TG_OP IN ('INSERT') THEN
SELECT COUNT(1) INTO V_COUNT FROM
ACCOUNTS WHERE SALES_ACCOUNT_ID = NEW.account_id;
IF V_COUNT IS NULL OR V_COUNT = 0 THEN
INSERT INTO service.accounts
SELECT
FROM accounts_sales
WHERE account_id = new.account_id;
END IF;
END IF;
RETURN NUll;
END;
$BODY$;
但是当我在 Sales.orders table 中插入新订单时,它就不起作用了。
CREATE TRIGGER TRG_ACCOUNT_SYNCUP_SALES
BEFORE INSERT OR UPDATE
ON service.order_sales
FOR EACH ROW
EXECUTE PROCEDURE set_sales_account_creation();
对于外国 table 的触发器如何工作存在一个根本性的误解。
如果你在数据库 A 中,并且你有一个外部 table 引用数据库 B 中的一个 table,那么 A 中外部 table 上的触发器将触发每当你 运行 DML 语句 针对 A 中的外国 table。如果您修改 B.
中引用的 table,触发器将 不会 触发