我有2个表A和表B. 表A:
col1 col2 col3 col4 col5
1 A 1 0 N/A
和类似的表B我想将表A复制到表B中我为它写了一个触发器 触发功能:
CREATE OR REPLACE FUNCTION add_data()
RETURNS trigger AS
$BODY$DECLARE
nos integer;
a integer;
b integer;
c integer;
d integer;
e text;
select max(col1) INTO nos from "A";
select col1,col2,col3,col4,col5 into a,b,c,d,e from A where col1=nos;
INSERT INTO "B" VALUES(a,b,c,d,e)
RETURN NULL;
END
问题是
1)经过几秒后col3,col4,col5值在3-4秒后更新
2)col1值不断增加所以我不能使用max()是否有任何其他方法来选择正在更新的特定行。
另外我不能使用max(),因为在更新表A中的col3-5之间,表A中有一个新条目,触发器无法提供所需的输出
答案 0 :(得分:0)
见下面的例子,
create table a (col1 int,col2 int,col3 int,col4 int,col5 int);
create table b (col1 int,col2 int,col3 int,col4 int,col5 int);
用于测试目的,将一些值插入表a
insert into a select 11,21,31,41,51
现在表a
有一行而表b
为空,现在创建一个触发器,如下所示
create or replace function a_to_b()
RETURNS trigger AS
$$
begin
insert into b (col1, col2, col3, col4, col5) values (new.col1, new.col2, new.col3, new.col4, new.col5);
RETURN NULL;
end
$$
language plpgsql
并将触发器分配给表a
CREATE TRIGGER add_data
AFTER insert -- or update
ON a
FOR EACH ROW
EXECUTE PROCEDURE a_to_b();
再次将值插入表a
insert into a select 1,2,3,4,5
现在检查两个表
select * from a;
select * from b
答案 1 :(得分:0)
我尝试了很多方法,但最终在java中使用了synchronize方法。有效。谢谢所有