解决InterBase中定义存储过程和触发器时报错:unexpected end of command 问题

来源:互联网 发布:智慧树大学生网络课程 编辑:程序博客网 时间:2024/06/04 18:43

经过多方查阅资料,终于搞定这个恶心的问题。

在InterBase中用Sql语句生成触发器和存储过程时报错误:unexpected end of command 是由于Interbase分析器默认的语句分隔符是逗号,而这与我们要写的触发器或存储过程中结束语句体的符号刚好相同,造成判断语句结构体不完整。也就是说语句
CREATE TRIGGER SET_KEY_FIELD_VALUE FOR MY_TABLE

BEFORE INSERT AS
BEGIN

       NEW.MY_KEY_FIELD = GEN_ID (MY_GENERATOR, 1);


END
就会被理解为
CREATE TRIGGER SET_KEY_FIELD_VALUE FOR MY_TABLE

BEFORE INSERT AS
BEGIN

NEW.MY_KEY_FIELD = GEN_ID (MY_GENERATOR, 1)
这样,缺少了End结尾,所以报错。解决方法是修改默认分割符,在语句开头用SET Team语句指定分隔符,如||,然后在语句结尾加上这个分隔符,这样分析器就会自动识别整个语句,不会错误的结束了。

如:

SET Term ||;

 CREATE TRIGGER SET_KEY_FIELD_VALUE FOR MY_TABLE

BEFORE INSERT AS
BEGIN

       NEW.MY_KEY_FIELD = GEN_ID (MY_GENERATOR, 1);


END 
 ||