gpt4 book ai didi

sqlite - 在 INSERT 触发器中插入时触发器递归级别过多

转载 作者:行者123 更新时间:2023-12-03 03:05:34 24 4
gpt4 key购买 nike

我想为 SQLite3 表中创建或插入的每个新行创建一个 UniqueIdentifier。我在这个论坛上搜索了解决方案,发现了两个创建这样一个 UniqueIdentifier 的“Select statements”。代码如下:

SELECT substr(u,1,8)||'-'||substr(u,9,4)||'-4'||substr(u,13,3)||
'-'||v||substr(u,17,3)||'-'||substr(u,21,12) from (
select lower(hex(randomblob(16))) as u, substr('89ab',random() % 4 + 1, 1) as v);

当我在 Firefox SQLite Manager 中输入 SQL 时,它工作得很好,并提供了我想要使用的值。

我尝试将创建的值使用到表中,但它不起作用。我总是收到错误消息“太多递归...”

我使用以下 SQL 代码创建了工作正常的表。

CREATE TABLE "SampleTable" (
"SampleTableID" integer PRIMARY KEY AUTOINCREMENT NOT NULL ,
"SampleTableUID" varchar(32) UNIQUE NOT NULL,
"Name" varchar(50),
)

然后我尝试使用以下 SQL 代码来创建触发器,但没有成功。在我的一次试验中,我首先创建了一条数据记录,然后创建了触发器,当我添加第二条数据记录时,它似乎起作用了。

CREATE TRIGGER "UID" AFTER INSERT ON "SampleTable" FOR EACH ROW  BEGIN INSERT INTO "SampleTable" ("SampleTableUID") 
SELECT substr(u,1,8)||'-'||substr(u,9,4)||'-4'||substr(u,13,3)||
'-'||v||substr(u,17,3)||'-'||substr(u,21,12) from (
select lower(hex(randomblob(16))) as u, substr('89ab',random() % 4 + 1, 1) as v); END

我做错了什么?

我想使用第一个数据记录和所有后续记录创建此 UniqueIdentifier。

<小时/>

正确的代码如下

<小时/>

感谢 CL 的帮助,我自己找到了答案。正确的工作解决方案是:

    CREATE TABLE "SampleTable" (
"SampleTableID" integer PRIMARY KEY AUTOINCREMENT NOT NULL ,
"SampleTableUID" varchar(32),
"Name" varchar(50)
)


CREATE TRIGGER "UID"
AFTER INSERT ON "SampleTable"
FOR EACH ROW
BEGIN
UPDATE "SampleTable"
SET "SampleTableUID" = (SELECT substr(u,1,8)||'-'||substr(u,9,4)||'-4'||substr(u,13,3)||
'-'||v||substr(u,17,3)||'-'||substr(u,21,12) from (
select lower(hex(randomblob(16))) as u, substr('89ab',random() % 4 + 1, 1) as v))
WHERE rowid = last_insert_rowid();
END


INSERT INTO "SampleTable" ("Name") VALUES ("Name1");

谢谢!

最佳答案

INSERT 语句向表中添加一条新记录。

要更改插入行中的某些内容,必须使用 UPDATE 语句:

CREATE TRIGGER UID
AFTER INSERT ON SampleTable
FOR EACH ROW
WHEN NEW.SampleTableUID IS NULL
BEGIN
UPDATE SampleTable
SET SampleTableUID = (SELECT whatever...)
WHERE SampleTableID = NEW.SampleTableID;
END;

关于sqlite - 在 INSERT 触发器中插入时触发器递归级别过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24392522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com