powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / странный баг с trim()
12 сообщений из 12, страница 1 из 1
странный баг с trim()
    #39660248
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0

Запрос:
Код: plsql
1.
2.
3.
4.
5.
6.
select	acc.brief, trim(acc.brief)
from	tResource$t 		acc
	inner join tAccountLink$t	acc_lnk
		on	acc.id = acc_lnk.resourceid
where  (trim(acc.brief) like '458%' or trim(acc.brief) like '459%')
and  length(trim(acc.brief)) = 20;


Ничего не возвращает. Но стоит убрать trim(acc.brief) в списке полей - и он выдает (правильный) результат.
План запроса:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
3	-------------------------------------------------------------------------------------------------------------
4	| Id  | Operation                       | Name                      | Rows  | Bytes | Cost (%CPU)| Time     |
5	-------------------------------------------------------------------------------------------------------------
6	|   0 | SELECT STATEMENT                |                           |     2 |   152 |     2  (50)| 00:00:01 |
7	|*  1 |  COUNT STOPKEY                  |                           |       |       |            |          |
8	|   2 |   CONCATENATION                 |                           |       |       |            |          |
9	|*  3 |    FILTER                       |                           |       |       |            |          |
10	|   4 |     NESTED LOOPS                |                           |     1 |    76 |     1   (0)| 00:00:01 |
11	|   5 |      TABLE ACCESS BY INDEX ROWID| TRESOURCE$T           |     1 |    67 |     0   (0)| 00:00:01 |
12	|*  6 |       INDEX RANGE SCAN          | TRESOURCE$ACCCODE_ADV |     1 |       |     0   (0)| 00:00:01 |
13	|*  7 |      INDEX RANGE SCAN           | TACCOUNTLINK$ACCID    |     2 |    18 |     0   (0)| 00:00:01 |
14	|*  8 |    FILTER                       |                           |       |       |            |          |
15	|   9 |     NESTED LOOPS                |                           |     1 |    76 |     1   (0)| 00:00:01 |
16	|  10 |      TABLE ACCESS BY INDEX ROWID| TRESOURCE$T           |     1 |    67 |     0   (0)| 00:00:01 |
17	|* 11 |       INDEX RANGE SCAN          | TRESOURCE$ACCCODE_ADV |     1 |       |     0   (0)| 00:00:01 |

Но что это, как это может быть???
Как от этого избавиться понятно, есть десятки способов обойти. Но как бы проблема в том, что сначала догадаться, что здесь есть проблема.


Nobody faults but mine... (LZ)
...
Рейтинг: 0 / 0
странный баг с trim()
    #39660253
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aag11.2.0.2.0aagНо что это, как это может быть???
...
Рейтинг: 0 / 0
странный баг с trim()
    #39660569
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aagПлан запроса:
Код: plaintext
1.
2.
3.
4.
5.
6.
3	-------------------------------------------------------------------------------------------------------------
4	| Id  | Operation                       | Name                      | Rows  | Bytes | Cost (%CPU)| Time     |
5	-------------------------------------------------------------------------------------------------------------
6	|   0 | SELECT STATEMENT                |                           |     2 |   152 |     2  (50)| 00:00:01 |
7	|*  1 |  COUNT STOPKEY                  |                           |       |       |            |          |
8	|   2 |   CONCATENATION                 |                           |       |       |            |          |
А к какому условию относится строка с Id=1 (я уже не говорю про id=2)
Или tAccountLink$t вью с [объединением и] ограничением по количеству строк?
...
Рейтинг: 0 / 0
странный баг с trim()
    #39660570
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aagПлан запроса:
Код: plaintext
1.
2.
3.
4.
5.
6.
3	-------------------------------------------------------------------------------------------------------------
4	| Id  | Operation                       | Name                      | Rows  | Bytes | Cost (%CPU)| Time     |
5	-------------------------------------------------------------------------------------------------------------
6	|   0 | SELECT STATEMENT                |                           |     2 |   152 |     2  (50)| 00:00:01 |
7	|*  1 |  COUNT STOPKEY                  |                           |       |       |            |          |
8	|   2 |   CONCATENATION                 |                           |       |       |            |          |
А к какому условию относится строка с Id=1 (я уже не говорю про id=2)
Или tAccountLink$t вью с [объединением и] ограничением по количеству строк?
...
Рейтинг: 0 / 0
странный баг с trim()
    #39660592
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И id=9 нестедлупит одного подчиненного.
Вячеслав Любомудров(я уже не говорю про id=2)(or expansion).
...
Рейтинг: 0 / 0
странный баг с trim()
    #39660888
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,

я для примера обрезал по rownum < 10;
Здесь не показал.
Как вы догадываетесь, это был кусок более сложного запроса, специально выдранный чтобы продемонстрировать проблему.
...
Рейтинг: 0 / 0
странный баг с trim()
    #39660889
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дополню,
изменение любого из условий (убрать length или какую-то часть из or) - и запрос начинает работать правильно.
При том что в данном наборе все brief по 20 символов.
...
Рейтинг: 0 / 0
странный баг с trim()
    #39660895
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aagДополню,
изменение любого из условий (убрать length или какую-то часть из or) - и запрос начинает работать правильно.
При том что в данном наборе все brief по 20 символов.

так убери length ... например так
Код: plsql
1.
trim(acc.brief) like rpad('458',20,'_')



А лучше не пользуй забагованную 11.2.0.2, а подними ее до 11.2.0.4 например
...
Рейтинг: 0 / 0
странный баг с trim()
    #39660897
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aagДополню,
изменение любого из условий (убрать length или какую-то часть из or) - и запрос начинает работать правильно.
При том что в данном наборе все brief по 20 символов.

Вам намекнули, что в 11.2.0.2 было много багов с ansi join

либо перепишите запрос в старой нотации,
либо обновите до стабильной версии, например 11.2.0.4+ и проверьте там,
либо попросите проверить других, для чего подготовьте testcase в виде
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
with tResource$t(id,brief,col11,col12,col13...) as (
select 34,'AAAAAA45633BBBBBBBB' ... from dual union all
...
select 35,'AAAAAA45644BBBBBBBB' ... from dual
)
, tAccountLink$t (resourceid,col21,col22,col23...) as 
(
....
)
select	acc.brief, trim(acc.brief)
from	tResource$t 		acc
	inner join tAccountLink$t	acc_lnk
		on	acc.id = acc_lnk.resourceid
where  (trim(acc.brief) like '458%' or trim(acc.brief) like '459%')
and  length(trim(acc.brief)) = 20;
...
Рейтинг: 0 / 0
странный баг с trim()
    #39661148
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Lejnin,

Да понял я уже.
К сожалению, обновлять версии Оракла не в моей власти. Поговорю с админами, но как вы понимаете, это не так просто.
Старый синтаксис (без join) от проблемы не избавляет.
Еще раз - как решить конкретный баг, я знаю, способов много. Беда в том, что такие мины могут быть и в других местах.
...
Рейтинг: 0 / 0
странный баг с trim()
    #39661178
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aagVadim Lejnin,

Да понял я уже.
К сожалению, обновлять версии Оракла не в моей власти. Поговорю с админами, но как вы понимаете, это не так просто.
Старый синтаксис (без join) от проблемы не избавляет.
Еще раз - как решить конкретный баг, я знаю, способов много. Беда в том, что такие мины могут быть и в других местах.

Задача в такой постановке, имеет только одно решение...
...
Рейтинг: 0 / 0
странный баг с trim()
    #39661187
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim LejninЗадача в такой постановке, имеет только одно решение...

перейти на PostGreSQL

.....
stax
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / странный баг с trim()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]