Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite创建触发器。。。SQLite错误1和语句:输入不完整_Sqlite_Triggers_Phpmyadmin_Grdb - Fatal编程技术网

SQLite创建触发器。。。SQLite错误1和语句:输入不完整

SQLite创建触发器。。。SQLite错误1和语句:输入不完整,sqlite,triggers,phpmyadmin,grdb,Sqlite,Triggers,Phpmyadmin,Grdb,正在尝试在Xcode/Swift5/GRDB中创建触发器。下面代码块中的触发器以静默方式失败,因此我移动它并在标题中看到错误[我已从标题中删除了SQL语句的文本]。奇怪的是,DB浏览器将运行SQL并创建触发器。应用程序会按照预期使用外部创建的触发器进行响应。在触发器之外,内部的更新似乎可以正常工作 用GRDB github repo打开了一个…只需传递原始SQL。在线检查几个验证器。所有人要么说没有任何错误,要么在下面的块中的CREATE TABLE上失败……因此对任何验证器都没有信心 记得我在

正在尝试在Xcode/Swift5/GRDB中创建触发器。下面代码块中的触发器以静默方式失败,因此我移动它并在标题中看到错误[我已从标题中删除了SQL语句的文本]。奇怪的是,DB浏览器将运行SQL并创建触发器。应用程序会按照预期使用外部创建的触发器进行响应。在触发器之外,内部的更新似乎可以正常工作

用GRDB github repo打开了一个…只需传递原始SQL。在线检查几个验证器。所有人要么说没有任何错误,要么在下面的块中的
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;  
所以这显然是失败的。您可以简单地配置另一个分隔符,如
$
,以确保它作为一个查询执行