DBI && DB2
Уважаемый comp!!!
Всем привет!
Возникла у меня проблема:
При попытке сделать select из рекурсивного view в ручную (с помощью
интерактивного SQL клиента от DB2)
select происходит нормально, но в конце выдается предупреждение
(warning):
Command entered select * from OBJ.STRUCT_TREE fetch first 10 rows only;
ID LVL CLASS TYPE NAME
PATH GRP_ID
SQL0347W The recursive common table expression "OBJ.DIR_TREE" may contain an
infinite loop. SQLSTATE=01605
15 0 15 1 <Иерархия компаний>
0
100 0 100 1 <Типы коммутаторов>
0
16 1 15 8193 Компания-1
/Компания-1 0
101 1 101 2049 <Коммутатор>
/<Коммутатор> 0
20 2 20 0 <Иерархия клиентов>
/Компания-1/<Иерархия клиентов> 0
30 2 30 0 <Иерархия контрактов>
/Компания-1/<Иерархия контрактов> 0
35 2 35 0 <Иерархия физ. лиц>
/Компания-1/<Иерархия физ. лиц> 0
1000 2 101 8193 Коммутатор-1
/<Коммутатор>/Коммутатор-1 2
1100 2 101 8193 Коммутатор-2
/<Коммутатор>/Коммутатор-2 1
1200 2 101 8193 Коммутатор-3
/<Коммутатор>/Коммутатор-3 0
10 record(s) selected with 1 warning messages printed.
Т.е. сам SQL запрос и VIEW верны.
Но вот драйвер (DBD::DB2) интерпретирует этот warning как ошибку. Вот
что выдает DBI->trace(20,"~/logs/dbi.log");
SQLNumResultCols failed error 1 recorded: [IBM][CLI Driver][DB2/NT] SQL0347W
The recursive common table expression "OBJ.DIR_TREE" may contain an infinite
loop. SQLSTATE=01605
т.е. не проходит метод prepare на этапе выяснения количества колонок в
результирующей таблице. И, соответственно, без $sth->prepare не
выполняется $sth->execute.
Подскажите пожажулуйста, как обойти это недоразумение?
--
С Уважением,
Сергей.
-*Название листа "Linux: разрешение вопросов, перспективы и общение"; Участников: 987
Написать в лист: comp.soft.linux.discuss-list@subscribe.ru
Архив Листа - http://subscribe.ru/archive/comp.soft.linux.discuss Поиск: http://www.google.com
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 4054; Возраст листа: 205
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/80565
-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписаться: mailto:comp.soft.linux.discuss--unsub@subscribe.ru
http://subscribe.ru/ mailto:ask@subscribe.ru
Sergey Tamkovich пишет:
an
Я бы не сказал, что запрос проходит нормально. Есть же предупреждение,
что OBJ.DIR_TREE может иметь бесконечный цикл.
prepare не выясняет количество колонок. Он говорит БД построить план
запроса для выполнения. Потом можно будет биндить параметры к запросу,
если они там указаны и выполнять его много раз с разными параметрами, не
препарируя запрос каждый раз.
Попробуй $dbh->do(). Хотя вряд-ли поможет. Поковыряйся в DBI на предмет
уровня ошибок. Может, есть опция "игнорировать предупреждения". Хотя,
самый лучший вариант разобраться с запросом на предмет предупреждения и
сделать так, чтобы оно не появлялось.
-*Название листа "Linux: разрешение вопросов, перспективы и общение"; Участников: 990
Написать в лист: comp.soft.linux.discuss-list@subscribe.ru
Архив Листа - http://subscribe.ru/archive/comp.soft.linux.discuss Поиск: http://www.google.com
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 4069; Возраст листа: 206
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/80885
-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписаться: mailto:comp.soft.linux.discuss--unsub@subscribe.ru
http://subscribe.ru/ mailto:ask@subscribe.ru