*closed* [Perl] DBI и undef

Geddi-S

Недавно заметил такую странную вещь (использую DBI для работы с Oracle 10.1).
Если запрос ничего не возвращает, то:
1. при использовании метода selectrow_arrayref возвращает undef
2. при использовании метода selectall_arrayref (и hashref) возвращает не undef. Приходится проверять не

if (defined $ref) {...}

а

if (@$ref) {...} (или if (%$ref){...} соотв.)

и это как с установленной RaiseError, так и без.
Хотя в документации к DBI вот что сказано:
If any method fails, and "RaiseError" is not set, "selectrow_array" will return undef.
...
If "RaiseError" is not set and any method except "fetchall_arrayref" fails then "selectall_arrayref" will return "undef"; if "fetchall_arrayref" fails then it will return with whatever data has been fetched thus far.
Правильно ли я понимаю, что вся соль в выделенном жирным фрагменте?
Разъясните, пожалуйста

eduard615

Нет. RaiseError и то, что ты процитировал — это в случае ошибки. А у тебя ошибки нет, просто результат запроса пустой.
perldoc DBI
If there are no rows to return, "fetchall_arrayref" returns a reference to an empty array.

Geddi-S

Точно, надо было посмотреть часть документации по fetch...
Там и про fetchrow написано
If there are no more rows or if an error occurs, then "fetchrow_arrayref" returns an "undef".
P.S. Спасибо тебе, , за ответы. А то раньше часто действовал методом тыка, а сейчас начал задумываться, как же оно все работает.
Оставить комментарий
Имя или ник:
Комментарий: