经过多方查阅资料,终于搞定这个恶心的问题。
在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
||