SQLite创建触发器。。。SQLite错误1和语句:输入不完整
正在尝试在Xcode/Swift5/GRDB中创建触发器。下面代码块中的触发器以静默方式失败,因此我移动它并在标题中看到错误[我已从标题中删除了SQL语句的文本]。奇怪的是,DB浏览器将运行SQL并创建触发器。应用程序会按照预期使用外部创建的触发器进行响应。在触发器之外,内部的更新似乎可以正常工作 用GRDB github repo打开了一个…只需传递原始SQL。在线检查几个验证器。所有人要么说没有任何错误,要么在下面的块中的SQLite创建触发器。。。SQLite错误1和语句:输入不完整,sqlite,triggers,phpmyadmin,grdb,Sqlite,Triggers,Phpmyadmin,Grdb,正在尝试在Xcode/Swift5/GRDB中创建触发器。下面代码块中的触发器以静默方式失败,因此我移动它并在标题中看到错误[我已从标题中删除了SQL语句的文本]。奇怪的是,DB浏览器将运行SQL并创建触发器。应用程序会按照预期使用外部创建的触发器进行响应。在触发器之外,内部的更新似乎可以正常工作 用GRDB github repo打开了一个…只需传递原始SQL。在线检查几个验证器。所有人要么说没有任何错误,要么在下面的块中的CREATE TABLE上失败……因此对任何验证器都没有信心 记得我在
CREATE TABLE
上失败……因此对任何验证器都没有信心
记得我在ipad上有DraftCode,包括phpLiteAdmin。发送SQL并获得相同的不完整输入
错误。返回桌面…更新PHP,并获取phpLiteAdmin
…相同错误
那么…它是不是像SQLite一样的bug?或者更可能是我的语法错误。我以前从来没有玩过触发器…所以我可能是一个忽视显而易见的东西的笨蛋。如果是,请帮我纠正
还有一点有趣的。。。在phpLiteAdmin中,使用触发器生成器,一切正常。但是尝试运行结果CREATESQL语句,复制/删除触发器/并粘贴回,会产生相同的错误
SQLite version: 3.31.1
PHP version: 7.3.14
phpLiteAdmin version: 1.9.8.2
在GRDB
或phpLiteAdmin
中创建触发器作为SQL语句的任何帮助都将不胜感激。thnx
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;
在phpLiteAdmin的SQL选项卡中,语句由您可以在input选项卡下面配置的分隔符分隔。默认情况下,这是
代码>。
在触发器定义中使用代码>,但拆分此时输入的内容将导致这两个查询:
第一个问题:
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;
所以这显然是失败的。您可以简单地配置另一个分隔符,如$
,以确保它作为一个查询执行