我需要针对Informix IDS 9.x运行动态构建的查询;而WHERE子句大多非常简单,Projection子句可能非常复杂,大量的列和公式适用于列。这里有一个例子:使用DBD捕获错误:: Informix
SELECT ((((table.I_ACDTIME + table.I_ACWTIME + table.I_DA_ACDTIME + table.I_DA_ACWTIME +
table.I_RINGTIME))+(table.I_ACDOTHERTIME + table.I_ACDAUXINTIME +
table.I_ACDAUX_OUTTIME)+(table.I_TAUXTIME + table.I_TAVAILTIME +
table.I_TOTHERTIME)+((table.I_AVAILTIME + table.I_AUXTIME)*
((table.MAX_TOT_PERCENTS/100)/table.MAXSTAFFED)))/(table.INTRVL*60))
FROM table
WHERE ...
当一些使用的字段包含零时,问题就出现了; Informix的可预见的零错误抛出分裂,但错误信息是不是非常有帮助:
DBD::Informix::st fetchrow_arrayref failed:
SQL: -1202: An attempt was made to divide by zero.
在这种情况下,最好是在未能计算返回NULL。除了解析Projection子句并附上CASE ... END中的每个分区尝试之外,是否有任何方法可以实现此目的?如果它在那里,我宁愿使用一些DBD :: Informix的魔法。
我也这么认为,但是在这样做之前必须检查。感谢DECODE()提示,我对Informix不太熟悉,不知道这个函数。 –
如果Informix支持'NULLIF',那么这将变成NULLIF(...,0),甚至可以被认为是整数。 –