sql - 在 Postgres 中创建一个触发器函数,它不允许你有两个具有相同 id 的条目
问题描述
我在 postgres 中有两个表,我想创建一个函数,该函数在借贷表中没有超过 2 个具有相同人员 ID 的贷款。例如:在贷款表中,我不能有 3 笔来自同一个人的贷款,即我们用同一个人的 id 贷款。
我需要使用一个函数来做到这一点,我把我想做的事情做了,但它没有用
CREATE TABLE person (
name_person varchar (100) ,
id_person varchar(14) primary key
)
CREATE TABLE lending(
id_lending primary key (100) ,
id_publication (14) FK,
id_person fk REFERENCES id_person (person)
CREATE OR REPLACE FUNCTION check_numlending()
RETURNS trigger AS
$BODY$
BEGIN
IF( select * from lending
inner join person
on person.id_person = lending.id_person > 2 ) THEN
RAISE EXCEPTION 'ERROR';
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
-- Trigger
CREATE TRIGGER
trg_check_num_lending
BEFORE INSERT OR UPDATE ON
lendingFOR EACH ROW EXECUTE PROCEDURE check_numlending();
解决方案
编写您的触发函数,如下所示:
-- Function
CREATE OR REPLACE FUNCTION check_numlending()
RETURNS trigger AS
$BODY$
declare counter int;
BEGIN
select count(*) into counter from lending where id_person =new.id_person;
IF( counter>=2 ) THEN
RAISE EXCEPTION 'ERROR';
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
-- Trigger
CREATE TRIGGER
trg_check_num_lending
BEFORE INSERT OR UPDATE ON
lending FOR EACH ROW EXECUTE PROCEDURE check_numlending();
推荐阅读
- python - 如何将列表小部件中的项目链接到qt设计器中表单中的单选按钮?
- react-native - 如何将购买选项移到右侧?
- asp.net-core - 运行“npm run webpack”我得到一个“TypeError:CleanWebpackPlugin 不是构造函数”
- php - 如何在 PHP 中将 ASCII 转换为 ISO-8859-1?
- gitlab - GITLAB Repo 克隆到 Google 可以存储
- windows - 停止并启动 IIS 服务器以进行 TFS 构建访问被拒绝
- google-chrome - Chrome:使用快捷方式从信息亭模式切换到桌面模式
- python - 我们如何根据不同的数据集预测新数据的目标值?scikit 学习 / gaussianNB
- java - 使用 JMeter/Java 上下文的 Scala JSR223 脚本
- javascript - 循环带有获胜条件的基本 Javascript 游戏