GBase 8s
适配迁移
文章

【案例分析】创建存储过程报错误282: Found a quote for which there is no matching quote.

发表于2020-06-19 10:34:001844次浏览3个评论
drop procedure if exists proc1;
create procedure proc1(out p_cursor sys_refcursor)
  define v_sqlstr lvarchar(1024);
  let v_sqlstr = "select tabid,tabname 
                  from systables
                  where tabid > 99
                    and tabtype = 'T'";
  open p_cursor for v_sqlstr;
end procedure;

从let 语句上看,只有简单的双引号、单引号,且存在一一对应关系,不应存在引号不匹配的情况。 考虑到引号内存在换行,那么可能的原因就是数据库没有开启ALLOW_NEWLINE。 在没有开启ALLOW_NEWLINE的情况下,引号内的内容不允许换行。即: 语句需要改为

  -- 单行
  let v_sqlstr = "select tabid,tabname from systables where tabid > 99 and tabtype = 'T'";
  -- 或者
  let v_sqlstr = "select tabid,tabname " || 
                 "from systables " ||
                 "where tabid > 99 " ||
                 "  and tabtype = 'T'";

为避免出现字符串换行出现的此类问题,可以在ONCONFIG配置文件中开启ALLOW_NEWLINE(默认为0,不开启),设置为1为开启允许换行

ALLOW_NEWLINE 1

如果临时仅仅是当前会话允许使用换行,那么可以先执行过程ifx_allow_newline('f')

execute procedure ifx_allow_newline('t');

然后,该会话在关闭前或者修改allow_newline参数前,将允许字符串换行。

评论

登录后才可以发表评论
崔哥发表于 10个月前
丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。明月几时有,把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间?转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。
用户头像
levvel发表于 9个月前
哎呀,怎么说呢,嗯......
崔哥发表于 8个月前
十里西畴熟稻香,槿花篱落竹丝长,垂垂山果挂青黄。浓雾知秋晨气润,薄云遮日午阴凉,不须飞盖护戎装。