|
|
|
RETURN NULL в функции, возвращающей множество
|
|||
|---|---|---|---|
|
#18+
Добрый день. Приходится переводить древний проект с PostgreSQL версии 7.4 на версию 9.2 Большую часть явных ошибок уже исправлено. Столкнулась с функциями, возвращающими множество (SETOF integer). Раньше (в 7.4) в начале функции стояла проверка с возвращением NULL (компилятор пропускал ее, а сама функция и функция ее вызывающая корректно работали): Код: plsql 1. 2. 3. 4. 5. Сейчас компилятор СУБД не воспринимает это для подобных функций. Рекомендует заменить на RETURN NEXT или RETURN QUERY. Пробовала разные варианты, например RETURN NEXT NULL; RETURN; Но логика работы с возвращаемым значением функции не отрабатывает. Подскажите как изменить условие, чтобы отработал ANY? Результат возвращается и должен подставляться для проверки: Код: plsql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 17:07 |
|
||
|
RETURN NULL в функции, возвращающей множество
|
|||
|---|---|---|---|
|
#18+
Valentine_vaia, Код: sql 1. что возвращает эта функция? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 18:03 |
|
||
|
RETURN NULL в функции, возвращающей множество
|
|||
|---|---|---|---|
|
#18+
big-trot, набор чисел типа integer. В функции находится по одному значению и возвращает через RETURN NEXT rec.ret; В версии 7.4 при пустом параметре функция возвращала RETURN NULL; Этот NULL попадал в выражение $3=ANY(SELECT * FROM func($1,$2), и оно оказывалось верным. В версии 9.2 эти вещи так не работают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 09:44 |
|
||
|
RETURN NULL в функции, возвращающей множество
|
|||
|---|---|---|---|
|
#18+
Valentine_vaia, может это как-то поможет Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 10:47 |
|
||
|
RETURN NULL в функции, возвращающей множество
|
|||
|---|---|---|---|
|
#18+
Valentine_vaiabig-trot, набор чисел типа integer. В функции находится по одному значению и возвращает через RETURN NEXT rec.ret; В версии 7.4 при пустом параметре функция возвращала RETURN NULL; Этот NULL попадал в выражение $3=ANY(SELECT * FROM func($1,$2), и оно оказывалось верным. В версии 9.2 эти вещи так не работают. приведите для 7 возврат Код: sql 1. 2. 3. 4. 5. 6. смутно помнится что где то что то менялось на сравнения с NULL--содержащими. но кажется для компаундов, а не для array-ев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 11:42 |
|
||
|
RETURN NULL в функции, возвращающей множество
|
|||
|---|---|---|---|
|
#18+
qwwq, Выполнила ваш пример под версией 7.4 Код: sql 1. 2. 3. 4. 5. Мне теперь ясно в чем проблема. Если будут предложения, как поправить это - пишите. Благодарю за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 16:08 |
|
||
|
RETURN NULL в функции, возвращающей множество
|
|||
|---|---|---|---|
|
#18+
qwwq, Возвращает true, если в наборе нет NULL. Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 16:56 |
|
||
|
RETURN NULL в функции, возвращающей множество
|
|||
|---|---|---|---|
|
#18+
Valentine_vaia, всего богатства сочетаний отсюда не видно. попробую выдать завиральную идею, что return NULL; (без next) в STF в 7.x могло быть просто эквивалентно RETURN; с пустым сетом в выводе. вы покажите вывод f при $2 == NULL Код: sql 1. -- будет легче понять, куда копать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 18:22 |
|
||
|
RETURN NULL в функции, возвращающей множество
|
|||
|---|---|---|---|
|
#18+
qwwq, Версия 7.4 с нулевым параметром Код: sql 1. 2. 3. с параметрами Код: sql 1. 2. 3. Версия 9.2 (без изменений) с любым параметром Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Версия 9.2 Изменила возврат RETURN NULL; на обычный RETURN; все заработало корректно Я правлю сразу несколько ошибок, могла затронуть цепочку. Код: sql 1. 2. 3. Код: sql 1. 2. 3. +++++++++++++++++++++++++++++++++++++++++++++ Версия 9.2 Изменила возврат RETURN NULL; на обычный RETURN NEXT NULL; RETURN; все заработало корректно Я правлю сразу несколько ошибок, могла затронуть цепочку. Код: sql 1. 2. 3. Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 12:46 |
|
||
|
RETURN NULL в функции, возвращающей множество
|
|||
|---|---|---|---|
|
#18+
Спасибо за помощь, нашла способ отлаживать выполнение скриптов и данных к ним. В данной ситуации, как и советует компилятор для функций, возвращающих множество (например, SETOF integer) в версии 7.4 использовалось RETURN NULL; в версии 9.2 можно заменить на RETURN; или RETURN NULL; RETURN; Я дальше буду переводить проект. Такая ситуация встречается еще в нескольких местах. И конечно нужно рассматривать данные, которые передаются таким функциям. Ибо как показала практика, если в массиве есть NULL и искомое значение, то не сможеет найти искомое значение. (см. 18834068 и 18836427 ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 12:55 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39173791&tid=1997422]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
160ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 441ms |

| 0 / 0 |
