需求:在對表A 執行 insert操作時,篩選符合條件的資料 insert到表B中,撰寫為存盤程序(postgreSQL資料庫)
[篩選條件]:
- dd !=“A” 或是 dd為 null;
- aa 欄位第【3】位="5"或=“6”;
- 滿足條件1不滿足2的資料將欄位 aa、bb、cc插入表 B;
滿足條件1和2的資料將欄位 aa、bb、cc、dd="1"插入表 B,
1、創建A表:
create table A(
aa VARCHAR(50) NOT NULL,
bb VARCHAR(50) NOT NULL,
cc VARCHAR(3) NOT NULL,
dd VARCHAR(1)
);
2、創建B表:
create table B(
aa VARCHAR(50) NOT NULL,
bb VARCHAR(50) NOT NULL,
cc VARCHAR(3) NOT NULL,
hh VARCHAR(1) DEFAULT '0',
ii VARCHAR(1) DEFAULT '0',
dd VARCHAR(1) DEFAULT '0',
PRIMARY KEY (bb)
);
3、創建存盤程序:
CREATE OR REPLACE FUNCTION insert_table () RETURNS trigger
VOLATILE
AS $pgsql$
declare
value1 varchar(50);
value2 varchar(50);
value3 varchar(3);
BEGIN
if (NEW.dd is null or NEW.dd != 'A') then
value1 := NEW.aa;
value2 := NEW.bb;
value3 := NEW.cc;
if (substring(value1,3,1) = '5' or substring(value1,3,1) = '6') then
insert into B (aa,bb,cc,dd) values(value1,value2,value3,'1');
else
insert into B (aa,bb,cc) values(value1,value2,value3);
end if;
end if;
return new;
end;
$pgsql$ LANGUAGE plpgsql;
【注:如果是在 DbVisualizer 工具創建 存盤程序,必須 在第一行加上 --/ 和最后一行加上 / ,否則報錯!】
【insert 時 NEW 表示新插入的行資料】
4、創建觸發器:
CREATE TRIGGER "example_trigger"
AFTER INSERT ON A
FOR EACH ROW
EXECUTE PROCEDURE insert_table();
【AFTER 關鍵字決定是在關聯行的插入之后執行觸發器動作】
【FOR EACH ROW 在一次操作表的陳述句中,每操作成功一行就會觸發一次;不寫的 話,表示是表級觸發器,則無論操作多少行,都只觸發一次】
5、插入insert陳述句測驗:
insert into A values('a4567','AWM2020','3',null);
insert into A values('b4797','AWM2021','4',null);
insert into A values('c4567','AWM2022','5','A');
insert into A values('d4797','AWM2023','6','2');
A表資料:

B表資料:

注:觸發器 中具體語法 可參考菜鳥教程:
https://www.runoob.com/postgresql/postgresql-trigger.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/213020.html
標籤:AI
