SQLITE3触发器执行总是出现错误

fffjjjhhh 2013-05-16 05:20:06
设计了俩个SQLITE3触发器。如下:
CREATE TRIGGER trigger_l_hyxf_in AFTER INSERT ON l_hyxf
BEGIN
update l_hyxx set 积分余额=new.本次积分+积分余额,累计消费=new.实付金额+累计消费 where 会员卡号=new.会员卡号;
End;


CREATE TRIGGER trigger_l_hyxf_in1 BEFORE INSERT ON l_hyxf WHEN NEW.会员卡号 NOT IN(SELECT 会员卡号 from l_hyxx where 会员卡号=new.会员卡号)
BEGIN
INSERT INTO l_hyxx(会员卡号) VALUES(NEW.会员卡号);
END;

执行时总是出现错误,表已经建立成功了。语法也看不出什么错误。错误如下:

CREATE TRIGGER trigger_l_hyxf_in AFTER INSERT ON l_hyxf 语句出现错误。错误原因:near " ": syntax error。

update l_hyxx set 积分余额=new.本次积分+积分余额,累计消费=new.实付金额+累计消费 where 会员卡号=new.会员卡号;语句出现错误。错误原因:no such column: new.本次积分。

CREATE TRIGGER trigger_l_hyxf_in1 BEFORE INSERT ON l_hyxf WHEN NEW.会员卡号 NOT IN(SELECT 会员卡号 from l_hyxx where 会员卡号=new.会员卡号)语句出现错误。错误原因:near ")": syntax error。

INSERT INTO l_hyxx(会员卡号) VALUES(NEW.会员卡号);语句出现错误。错误原因:no such column: NEW.会员卡号。

...全文
444 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
fffjjjhhh 2013-05-16
  • 打赏
  • 举报
回复
update l_hyxf set 积分余额=l_hyxx.积分余额 where 会员卡号=new.会员卡号;我这样写也不行。提示:no such column: l_hyxx.积分余额
fffjjjhhh 2013-05-16
  • 打赏
  • 举报
回复
谢谢版主了,通过了,只是又加了一条件语句,还是提示错误。 如下: CREATE TRIGGER trigger_l_hyxf_in AFTER INSERT ON l_hyxf BEGIN update l_hyxx set 积分余额=ifnull(new.本次积分,0)+ifnull(积分余额,0),累计消费=ifnull(new.实付金额,0)+ifnull(累计消费,0) where 会员卡号=new.会员卡号; update l_hyxf set 积分余额=(select 积分余额 from l_hyxx where 会员卡号=new.会员卡号) where 会员卡号=new.会员卡号; End; 语句出现错误。错误原因:near "积分余额": syntax error。
wwwwb 2013-05-16
  • 打赏
  • 举报
回复
貌似是1条,你测试一下2条SQL语句(结束加分号),看看能否通过
wwwwb 2013-05-16
  • 打赏
  • 举报
回复
你的建表语句有误,造成字段找不到,设置字段的默认值为0 OR 加入对NULL的判断,可以不用转换,字符型也可以,测试通过 update l_hyxx set 积分余额=ifnull(new.本次积分,0)+ifnull(积分余额,0),累计消费=ifnull(new.实付金额,0)+ifnull(累计消费,0) where 会员卡号=new.会员卡号;
fffjjjhhh 2013-05-16
  • 打赏
  • 举报
回复
还想问一下,sqlite3_exec一次只可以执行一个SQL语句,还是可以执行多个SQL语句。
fffjjjhhh 2013-05-16
  • 打赏
  • 举报
回复
我这里第二个触发也通过了,原来的错误触发器的一行当成一个语句了。只是第一个还不行。我数据库的字段全部是文本类型或无类弄数据,而且不能修改。例如 积分余额='new.本次积分+积分余额',如果加上单引号也就通过了。但就没意义了。我想问一下,SQLITE SQL中有没有数字和文本类型互换的函数,我找了一下没找到。或着自定义一个也行,只是不知道怎么做。
wwwwb 2013-05-16
  • 打赏
  • 举报
回复
Begin Transaction; Drop Trigger If Exists MAIN.[trigger_l_hyxf_in]; Create Trigger MAIN.[trigger_l_hyxf_in] AFTER INSERT On [l_hyxf] FOR EACH ROW BEGIN update l_hyxx set 积分余额=new.本次积分+积分余额,累计消费=new.实付金额+累计消费 where 会员卡号=new.会员卡号; End; Commit Transaction; Begin Transaction; Drop Trigger If Exists MAIN.[trigger_l_hyxf_in1]; Create Trigger MAIN.[trigger_l_hyxf_in1] BEFORE INSERT On [l_hyxf] FOR EACH ROW WHEN NEW.会员卡号 NOT IN(SELECT 会员卡号 from l_hyxx where 会员卡号=new.会员卡号) BEGIN INSERT INTO l_hyxx(会员卡号) VALUES(NEW.会员卡号); END; Commit Transaction; 测试通过
wwwwb 2013-05-16
  • 打赏
  • 举报
回复
Create TABLE l_hyxf( [编号] nchar(100) ,[会员卡号] nchar(100) ,[本次积分] tinyint(100) DEFAULT 0 ,[实付金额] tinyint(100) DEFAULT 0) Create TABLE l_hyxx( [会员卡号] nhar(100) ,[累计消费] tinyint(100) DEFAULT 0 ,[积分余额] nchar(100) DEFAULT 0 );
wwwwb 2013-05-16
  • 打赏
  • 举报
回复
create table l_hyxx(会员卡号 nhar(100),累计消费 nchar(100), 积分余额 nchar(100)) create table l_hyxf(编号 nchar(100),会员卡号 nchar(100),本次积分 nchar(100),实付金额 nchar(100)) 建表语句有误
fffjjjhhh 2013-05-16
  • 打赏
  • 举报
回复
create table l_hyxx(会员卡号 QString,累计消费 QString 积分余额 QString) create table l_hyxf(编号 QString,会员卡号 QString,本次积分 QString,实付金额 QString)
wwwwb 2013-05-16
  • 打赏
  • 举报
回复
检查表中是否有会员卡号 本次积分 CREATE TRIGGER trigger_l_hyxf_in AFTER INSERT ON l_hyxf for each row BEGIN update l_hyxx set 积分余额=new.本次积分+积分余额,累计消费=new.实付金额+累计消费 where 会员卡号=new.会员卡号; End; CREATE TRIGGER trigger_l_hyxf_in1 BEFORE INSERT ON aa for each row WHEN NEW.会员卡号 NOT IN(SELECT 会员卡号 from l_hyxx where 会员卡号=new.会员卡号) BEGIN INSERT INTO l_hyxx(会员卡号) VALUES(NEW.会员卡号); END;
ACMAIN_CHM 2013-05-16
  • 打赏
  • 举报
回复
贴出create table 语句以供分析。
ACMAIN_CHM 2013-05-16
  • 打赏
  • 举报
回复
update l_hyxf set 积分余额=select 积分余额 from l_ 这儿楼主用的是中文括号啊,系统语法不支持的。
fffjjjhhh 2013-05-16
  • 打赏
  • 举报
回复
CREATE TRIGGER trigger_l_hyxf_in AFTER INSERT ON l_hyxf BEGIN update l_hyxx set 积分余额=ifnull(new.本次积分,0)+ifnull(积分余额,0),累计消费=ifnull(new.实付金额,0)+ifnull(累计消费,0) where 会员卡号=new.会员卡号; update l_hyxf set 积分余额=(select 积分余额 from l_hyxx where 会员卡号=new.会员卡号) where 订单编号=new.订单编号; End; 第二个也通过了,谢谢版主了。把where 会员卡号=new.会员卡号改为where 订单编号=new.订单编号,不然所同一会员的每次消费记录都会被修改。
wwwwb 2013-05-16
  • 打赏
  • 举报
回复
注意全角符号:积分余额= 我的TRIGGER已经测试通过
wwwwb 2013-05-16
  • 打赏
  • 举报
回复
Create TABLE l_hyxf( [编号] nchar(100) ,[会员卡号] nchar(100) ,[本次积分] tinyint(100) DEFAULT 0 ,[实付金额] tinyint(100) DEFAULT 0 ,[积分余额] varchar(10) ); Create TABLE l_hyxx( [会员卡号] nhar(100) ,[累计消费] varchar(100) ,[积分余额] nchar(100) ); Create Trigger MAIN.[trigger_l_hyxf_in] AFTER INSERT On [l_hyxf] FOR EACH ROW BEGIN update l_hyxx set 积分余额=ifnull(new.本次积分,0)+ifnull(积分余额,0),累计消费=ifnull(new.实付金额,0)+ifnull(累计消费,0) where 会员卡号=new.会员卡号; update l_hyxf set 积分余额=(select 积分余额 from l_hyxx where 会员卡号=new.会员卡号) where 会员卡号=new.会员卡号; End; 测试通过
fffjjjhhh 2013-05-16
  • 打赏
  • 举报
回复
数据类型都为无类类型。 还是出现下列错误: CREATE TRIGGER trigger_l_hyxf_in AFTER INSERT ON l_hyxf BEGIN update l_hyxx set 积分余额=ifnull(new.本次积分,0)+ifnull(积分余额,0),累计消费=ifnull(new.实付金额,0)+ifnull(累计消费,0) where 会员卡号=new.会员卡号; update l_hyxf set 积分余额=(select 积分余额 from l_hyxx where 会员卡号=new.会员卡号) where 会员卡号=new.会员卡号; End; 语句出现错误。错误原因:near "积分余额": syntax error。
fffjjjhhh 2013-05-16
  • 打赏
  • 举报
回复
这是消费表的结构
fffjjjhhh 2013-05-16
  • 打赏
  • 举报
回复
create table l_hyxx(会员卡号 QString,累计消费 QString 积分余额 QString) create table l_hyxf(编号 QString,会员卡号 QString,本次积分 QString,实付金额 QString,积分余额 QString)
wwwwb 2013-05-16
  • 打赏
  • 举报
回复
积分余额是哪张表的?从你给出的结构来看,
是 l_hyxx的
加载更多回复(2)

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧