|
Странный глюк при вызове функции из select
|
|||
---|---|---|---|
#18+
Вроде простая функция, с одним параметром, а в моем оракле почему-то глючит когда передаю параметр определенного формата. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Если переписать без decode(), то все в порядке: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Если убрать "default" в определении глобальной функции, то все работает как следует ожидать. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2021, 21:58 |
|
Странный глюк при вызове функции из select
|
|||
---|---|---|---|
#18+
На моём ORA 19.3 EE отрабатывает корректно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2021, 22:30 |
|
Странный глюк при вызове функции из select
|
|||
---|---|---|---|
#18+
Правильный Вася На моём ORA 19.3 EE отрабатывает корректно. Наверное, просто старый баг. Хорошо, что исправили. Надо будет грепнуть все исходники на предмет передачи decode() в функции с параметрами по умолчанию. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2021, 22:40 |
|
Странный глюк при вызове функции из select
|
|||
---|---|---|---|
#18+
Работает корректно и в 11.2, и 18.5, и 19+. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2021, 00:04 |
|
Странный глюк при вызове функции из select
|
|||
---|---|---|---|
#18+
Sayan Malakshinov Работает корректно и в 11.2, и 18.5, и 19+. Спасибо что проверили. Значит, проблема именно с моим сервером. Я попробовал с фиддл, у меня там не получилось создать функцию, поэтому пришлось найти библиотечную функцию с default у которой нет SQL аналога. Код: sql 1. 2.
https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=d28fbfefad722bb8de232c2ec2a1af82 Фиддл (11.2 и 18) отработала как следует, а вот у меня три строки одинаковые, т.е. ошибка. Попробовал в другой схеме - все равно ошибка. Наверно что-то где-то сломано. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2021, 01:40 |
|
Странный глюк при вызове функции из select
|
|||
---|---|---|---|
#18+
НеофитSQL, А тримы сами по себе корректно работают? еще интересно было бы взглянуть на вывод Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2021, 12:04 |
|
Странный глюк при вызове функции из select
|
|||
---|---|---|---|
#18+
Melkomyagkii_newbi НеофитSQL, А тримы сами по себе корректно работают? еще интересно было бы взглянуть на вывод Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Да, тримы нормально, проверил. dbms_sql2 пакет моей 11.2.0.1 версии почему-то неведом. Я убрал XML таблицу чтоб не загромождала тримами, теперь так: Код: plsql 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. 28. 29. 30. 31. 32.
Баг довольно хрупкий. Если я делаю мало-мальский намек что третий параметр decode является строкой, то все работает нормально: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Если убрать default из определения функции, баг тоже исчезает. Если параметр функции не текстовый, то бага нет, с дефолтом или без. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2021, 00:59 |
|
Странный глюк при вызове функции из select
|
|||
---|---|---|---|
#18+
НеофитSQL, может быть проблема в том, что default '666' в какой-то момент трактуется как число? Другие варианты с default пробовали? default null? default to_char('666')? Вообще похоже на какой-то баг в оракловом словаре, у меня была ошибка, когда триггер on delete срабатывал и на update (или наоборот, уже точно не помню)... и это случилось, когда сначала триггер был создан как триггер на update + delete, потом в ходе ряда правок осталась только одна операция и в момент компиляции моя сессия повисла. Переименование триггера ситуацию исправило, но если вернуть имя обратно, то стабильно воспроизводится этот баг (на конкретном инстансе, 11.2.0.4 x64). Т.е. оно работает, будто в словаре осталось старое определение триггера. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2021, 09:23 |
|
Странный глюк при вызове функции из select
|
|||
---|---|---|---|
#18+
delphinotes НеофитSQL, может быть проблема в том, что default '666' в какой-то момент трактуется как число? Другие варианты с default пробовали? default null? default to_char('666')? Вообще похоже на какой-то баг в оракловом словаре, у меня была ошибка, когда триггер on delete срабатывал и на update (или наоборот, уже точно не помню)... и это случилось, когда сначала триггер был создан как триггер на update + delete, потом в ходе ряда правок осталась только одна операция и в момент компиляции моя сессия повисла. Переименование триггера ситуацию исправило, но если вернуть имя обратно, то стабильно воспроизводится этот баг (на конкретном инстансе, 11.2.0.4 x64). Т.е. оно работает, будто в словаре осталось старое определение триггера. Я довольно детально поковырял эту проблему, значение дефолта не влияет. повторяется и с null, и с любой другой строкой дефолта. Для типов отличных от varchar/2 этот баг получить не удалось. Если в decode в третьем параметре вручную проставить тип как я сделал с конкатенацией, то баг исчезает. Если бы это повторялось вне моего сервера, можно было бы порассуждать что где-то в этой неудобной для оракла конструкции остался косяк. Неудобной, потому что в PL/SQL коде decode не может быть параметром функции, соответственно и тест кейс нужен особый. Но эта проблема только у меня, в различных БД и разных схемах. Надеюсь убедить моего и.о. ДБА пропатчить до последнего 11г, и тогда еще раз проверить. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2021, 17:54 |
|
|
start [/forum/topic.php?fid=52&msg=40068470&tid=1880224]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
150ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 262ms |
total: | 503ms |
0 / 0 |