Как создать запрос с учетом регистра в формах Oracle? - PullRequest
2 голосов
/ 05 августа 2011

У меня есть блок на основе таблицы.Если я введу «12345» в режиме ввода запроса, он создаст запрос с

WHERE my_field = '12345' 

. Если я введу «12345A», он получит

WHERE (upper(my_field) = '12345A' AND my_field like '12%')

, что плохо, поскольку my_fieldиндексируется нормально (не на верхнем (my_field)).Я попытался переключить атрибут «Ограничение регистра» между смешанным и верхним, а «Запрос без учета регистра» между да и нет, кажется, ничего не помогает.У меня также есть триггер PRE-QUERY на уровне блоков (триггер начинается с оператора RETURN;), установленный на переопределение, поэтому ничто не должно мешать формированию запроса, но он все еще не работает.

Любые идеи о том, чтоиначе я мог бы попробовать?

EDIT:

Был неясный вызов функции в триггере WHEN_NEW_FORM_INSTANCE некоторой подключенной библиотеке, которая сбрасывала все элементы блока триггера в CASE_SENSITIVE_QUERY = TRUE.Никогда бы не догадался.

Ответы [ 3 ]

1 голос
/ 13 августа 2011

Не уверен, как запрос меняется на эту форму;WHERE (upper (my_field) = '12345A' И my_field наподобие '12% '

Сначала проверьте, что в форме нет триггеров ввода или предварительных запросов. Кто-то мог подключить триггер на более высоком уровне. Oracleне слишком умный, чтобы переписать запрос. Проверьте, что вы привязываете к таблице, а не к представлению или хранимой процедуре, ...

Если все остальное не удается, включите триггеры запроса в данных черного цвета и перепишите гдезаявите о себе. Это довольно просто.

Дайте версию форм оракула, прежде чем публиковать.

0 голосов
/ 10 августа 2011

Самый наивный вопрос, можете ли вы обновить колонку, чтобы она была в верхнем регистре?Я имею в виду, может ли это причинить неудобство вашему приложению?

Если вы можете, его можно обработать с помощью триггера базы данных, чтобы убедиться, что оно всегда в верхнем регистре.

Если вы не можете, то я предлагаювы создаете другое поле, которое вы обновляете в верхний регистр с помощью триггера базы данных.

Вы также можете создать индекс функции, чтобы он был верхним (my_field).

0 голосов
/ 08 августа 2011

my_field like '12%'

Использует индекс. Подмножество затем фильтруется с помощью

upper(my_field) = '12345A'

Так что это может быть не так плохо, как вы думаете ...

...