Мне нужно запускать динамически создаваемые запросы к Informix IDS 9.x;в то время как предложение WHERE в основном довольно простое, предложение Projection может быть довольно сложным с большим количеством столбцов и формул, примененных к столбцам.Вот один пример:
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, если она там есть.