Informix SPL查询多BOOLEAN值赋值变量报错如何解决?
Informix SPL多BOOLEAN值SELECT INTO报错解决方案
错误原因
Informix 12.10版本的SPL解析器存在隐式转换逻辑差异:当单个CHAR类型字面量t/f赋值给BOOLEAN变量时,解析器能识别上下文自动触发隐式转换;但多列查询返回多个CHAR字面量时,解析器会优先将返回集识别为CHAR类型行,不会自动逐列匹配BOOLEAN变量的类型做隐式转换,因此触发-9635类型转换错误。
解决方案
- 方案1:显式转换每个BOOLEAN类型的返回值(最推荐)
对每个要赋值给BOOLEAN变量的返回值,用BOOLEAN()函数强制转换类型,修正后的存储过程代码如下:
CREATE PROCEDURE test() DEFINE b1 BOOLEAN; DEFINE b2 BOOLEAN; DEFINE i1 INTEGER; DEFINE i2 INTEGER; SELECT FIRST 1 't' INTO b1 FROM systables; -- OK SELECT FIRST 1 'f' INTO b2 FROM systables; -- OK SELECT FIRST 1 1, 2 INTO i1, i2 FROM systables; -- OK -- 增加显式BOOLEAN类型转换 SELECT FIRST 1 BOOLEAN('t'), BOOLEAN('t') INTO b1, b2 FROM systables; -- 正常运行 END PROCEDURE; EXECUTE PROCEDURE test();
- 方案2:拆分多BOOLEAN值查询为多个单值赋值
如果转换逻辑复杂不想增加显式转换,可以将多BOOLEAN的查询语句拆分为多个单值SELECT INTO语句,利用单值场景下的隐式转换能力运行。 - 方案3:如果返回值来自表的CHAR类型字段而非字面量,同样可以用
BOOLEAN(字段名)的方式做显式转换即可避免报错。
内容的提问来源于stack exchange,提问作者Herwig
相关产品推荐
相关产品推荐

