几周以来,我们使用JOOQ作为我们的主要持久性框架,而不是所有的Spring Data JPA/Hibernate之类的东西。我真的印象深刻!!!
对于简单的积垢操作,我们使用record。store()
而此记录是一个可更新的RecordImpl
,因为基础表包含一个ID(列ID
,PostgreSQL类型为串行
),此外,JOOQ配置了和ReturnAllonUpdateRecord(true)
,并且我们的表包含一个用于生成列值的触发器努默:
CREATE OR REPLACE FUNCTION "public"."after_insert_angebot" () RETURNS trigger
VOLATILE
AS $body$
DECLARE
BEGIN
UPDATE kalkulation_angebot SET nummer = date_part('year', CURRENT_DATE) || '-' || LPAD(NEW.id::text, 3, '0') WHERE id = NEW.id;
RETURN NEW;
END;
$body$ LANGUAGE plpgsql
CREATE TRIGGER "after_insert_angebot"
AFTER INSERT ON kalkulation_angebot
FOR EACH ROW
EXECUTE PROCEDURE after_insert_angebot()
我期望,之后record.store()
和由于with ResnAllOnUp数据库记录(true)
记录包含id(由列类型生成)和Nummer(由触发器生成)的值。但只填充了id
。我必须通过一个额外的查询手动设置Nummer
:
// jooq fetched the new values and the id is available
Integer angebotId = record.getId();
// ... but nummer is missing and has to set manually
angebot.setNummer(jooq.select(KALKULATION_ANGEBOT.NUMMER)
.from(KALKULATION_ANGEBOT)
.where(KALKULATION_ANGEBOT.ID.eq(record.getId()))
.fetchSingleInto(String.class));
我假设,错误在触发函数内?如何触发应该,以履行留档的promise:
标识值不是默认情况下生成的唯一值。具体而言,可能存在用于[…]的触发器希望在所有store()、insert()或update()调用之后自动获取这些值的用户可以通过指定ReturnAllonUpDataableRecord设置来实现
提前感谢
Dominik
使用ReturnAllonUpdateRecord(true)设置,
生成一个插入。。正在返回
或更新。。返回jOOQ中的
语句。由于您已在INSERT触发器后定义了,因此这无助于返回您可能期望的值。在香草PostgreSQL中尝试:
CREATE TABLE kalkulation_angebot (
id serial,
nummer text
);
-- Your own TRIGGER below:
CREATE OR REPLACE FUNCTION "public"."after_insert_angebot" () RETURNS trigger
VOLATILE
AS $body$
BEGIN
UPDATE kalkulation_angebot
SET nummer = date_part('year', CURRENT_DATE) || '-' || LPAD(NEW.id::text, 3, '0')
WHERE id = NEW.id;
RETURN NEW;
END;
$body$ LANGUAGE plpgsql;
CREATE TRIGGER "after_insert_angebot"
AFTER INSERT ON kalkulation_angebot
FOR EACH ROW EXECUTE PROCEDURE after_insert_angebot();
INSERT INTO kalkulation_angebot DEFAULT VALUES RETURNING *;
输出为:
|id |nummer |
|-----------|--------|
|1 | |
把你的触发器换成我认为更有意义的东西怎么样:
CREATE OR REPLACE FUNCTION "public"."before_insert_angebot" () RETURNS trigger
VOLATILE
AS $body$
BEGIN
NEW.nummer = date_part('year', CURRENT_DATE) || '-' || LPAD(NEW.id::text, 3, '0');
RETURN NEW;
END;
$body$ LANGUAGE plpgsql;
CREATE TRIGGER "before_insert_angebot"
BEFORE INSERT ON kalkulation_angebot
FOR EACH ROW EXECUTE PROCEDURE before_insert_angebot();
INSERT INTO kalkulation_angebot DEFAULT VALUES RETURNING *;
现在输出为:
|id |nummer |
|-----------|--------|
|1 |2020-001|
本文向大家介绍MySQL如何创建触发器,包括了MySQL如何创建触发器的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了MySQL创建触发器的具体代码,供大家参考,具体内容如下 先来个实例: 实例解析: 先创建触发器中待存储的表t_attendance DELIMITER $ 意思是告诉mysql下文执行语句以“$”结束,如果没有这句,下面语句会出错,mysql无法判断哪句
我有以下记录是通过一个带有几个连接的查询得到的: 现在,当我尝试检索不在结果中的特定列时: 其中生成具有以下详细信息的静态编程语言代码: 我希望得到null。但是,返回了错误的id值(zkn_zaak.id)。 我错过了什么?jOOQ不应该有足够的信息(表和字段名)来从记录中检索正确的列吗? =======更新============= 从代码来看,这似乎是预期的行为,并且已经在例如。https:
问题内容: 我正在尝试创建一个存储的proc,它返回所有已更新的记录。 我的更新查询是这样的: 我只是不确定如何返回这些特定记录。 问题答案: 您可以用来获取语句已修改的行。 例子;
主要内容:基本语法,创建 BEFORE 类型触发器,创建 AFTER 类型触发器触发器是与 MySQL 数据表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。 基本语法 在 MySQL 5.7 中,可以使用 CREATE TRIGGER 语句创建触发器。 语法格式如下: CREATE <触发器名> < BEFORE | AFTER > <INSERT | UPDATE | DELETE > ON <
进入函数详情页,点击“触发器”标签,展示当前函数配置的触发器,点击“创建新触发器”,选择HttpTrigger,填写对应信息。 路径映射必须以“/”开头,可以选择以GET或POST方法触发函数。 创建触发器后,触发器详情页面可对触发器进行修改及删除的操作,点击下图所示图标,可以获得HTTPS URL,通过该URL在浏览器或终端直接访问,触发Hello World函数。
问题内容: mysql有什么方法可以在创建时自动将时间戳存储在记录行中。我试图将timestamp(数据类型)与current_timestamp用作默认值,但后来意识到,每当记录更新时,它将更新。我只需要一些可以存储创建时间戳记的东西。 谢谢 问题答案: 设置DEFAULT约束以使用CURRENT_TIMESTAMP: 对于现有表,请使用ALTER TABLE语句: 除非您为date_colum