试图在 Xcode / Swift5 / GRDB 中创建触发器。下面代码块中的触发器静默失败,所以我移动它并看到标题中的错误[我已从标题中删除了 SQL 语句的文本]。奇怪的是,DB Browser 将运行 SQL 并创建触发器就好了。并且应用程序使用外部创建的触发器按预期响应。并且内部的 UPDATE 似乎在触发器之外工作正常。
打开了GRDB github repo 的问题...只是通过原始 SQL。在线检查几个验证器。所有人要么说没有错,要么CREATE TABLE
在下面的块中失败了……所以对任何验证者都不信任。
记得我在 ipad 上有 DraftCode,包括 phpLiteAdmin。发送 SQL 并得到相同的incomplete input
错误。回到桌面...更新 PHP,并得到phpLiteAdmin
...同样的错误。
所以...它是像https://github.com/sqlitebrowser/sqlitebrowser/issues/1470这样的 SQLite 错误?或者更可能是我的语法错误。我以前从来没有玩过触发器……所以我可能是个忽视显而易见的笨蛋。如果是这样,请帮我纠正。
还有一点有趣...在phpLiteAdmin
,使用触发器生成器,一切正常。但尝试运行生成的创建 SQL 语句、复制/删除触发器/并重新粘贴,会产生相同的错误
SQLite version: 3.31.1
PHP version: 7.3.14
phpLiteAdmin version: 1.9.8.2
任何有关以 SQL 语句GRDB
或phpLiteAdmin
SQL 语句创建触发器的帮助将不胜感激。谢谢。
CREATE TABLE CartItem (
id INTEGER PRIMARY KEY AUTOINCREMENT,
transactionID INTEGER DEFAULT NULL,
wasReceived BOOLEAN,
sku VARCHAR,
label VARCHAR,
description VARCHAR,
unitLabel VARCHAR,
cost DOUBLE,
wholesale DOUBLE,
retail DOUBLE,
tax DOUBLE,
cartQty FLOAT,
modified REAL
);
-- because 'transaction' is reserved
CREATE TABLE TransXion (
id INTEGER PRIMARY KEY AUTOINCREMENT,
transactionNum VARCHAR,
shippingSubtotal DOUBLE,
taxableSubtotal DOUBLE,
nontaxableSubtotal DOUBLE,
subtotal DOUBLE,
total DOUBLE,
paymentsSubtotal DOUBLE,
balance DOUBLE,
itemsWereRcvd BOOLEAN,
locked BOOLEAN,
modified REAL
);
CREATE TRIGGER insert_TransXion_Dollar_Values_trigger
AFTER INSERT ON CartItem
WHEN transactionID = new.transactionID
BEGIN
UPDATE TransXion
SET total = (
SELECT SUM(ci.retail) AS retail_total
FROM CartItem ci
WHERE ci.transactionID = TransXion.id
)
WHERE id IN (
SELECT transactionID
FROM CartItem ci
WHERE ci.transactionID = TransXion.id
);
END;