我一直在尝试实现基于列值的表的自动更新。下面是一个示例。其思想是用户将输入他们的电话号码,而不是他们的国家,如下所示:
| 手机|乡村|
| - ------|- ------|
| "51682815"||
| "51261728"||
| "56682815"||
| '56261728'||
| "57682815"||
| '五七二六一七二八'||
根据"* mobile_phone *"信息,我想使用以下逻辑自动分配他们的国家/地区:
- WHERE左侧(移动电话,2)="51",然后执行"PE"
- WHERE左侧(移动电话,2)="56",然后选择"CL"
- 左移(移动电话,2)="57",然后按"CO"
根据该逻辑,表格应使用以下信息自动更新:
| 手机|乡村|
| - ------|- ------|
| "51682815"|"PE"|
| "51261728"|"PE"|
| "56682815"|"CL"|
| '56261728'|"CL"|
| "57682815"|"文书主任"|
| '五七二六一七二八'|"文书主任"|
我想创建一个这样的触发器,但问题是我不知道如何创建更新列country的函数:
CREATE TRIGGER update_country AFTER INSERT ON info
FOR EACH ROW EXECUTE PROCEDURE function_name()
先谢谢你的帮助。
2条答案
按热度按时间ygya80vv1#
由于要更新的记录已在数据库中找到,因此应首先使用
UPDATE
语句更新当前行。可以使用CASE
表达式来执行此操作,该表达式将根据“* 移动的_phone*"有条件地分配“country”值。然后创建相应的触发器,它将在插入之前更新您的记录。
NEW
访问插入行中的值并更新其国家值检查here演示。
owfi6suc2#
您可以使用"生成的列"。使用"生成的列"不能执行以下操作
update info set country = 'x';
或insert into info(country) value ('x');
https://www.postgresql.org/docs/current/ddl-generated-columns.html