【案例分析】创建存储过程报错误282: Found a quote for which there is no matching quote.
创建存储过程时第4行报282错误,该错误的原是说引号不匹配。创建的存储过程语句如下:
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参数前,将允许字符串换行。