Я пытаюсь создать запрос, который работает с базой данных Oracle, к которой у нашей группы есть доступ для чтения, который извлекает результаты для вставки и изменения в локальной копии, находящейся под нашим контролем. У меня есть свой запрос, но я столкнулся с небольшой проблемой. Чтобы вернуть результаты моего запроса, я не могу использовать BETWEEN из-за того, как индексируется БД; использование диапазонов дат приводит к тому, что он работает слишком медленно, и PK не увеличивается последовательно. Вместо этого мне нужно перебрать массив значений и сопоставить их с PK.
Обычно для чего-то подобного против SQL-сервера я бы бросил на него что-то вроде этого:
AND (
1=1
<cfloop array="#orderHeaderNumArray#" index="i">
OR TABLENAME.S_HEADER_NUMBER LIKE '#i#%'
</cfloop>
)
Однако каждый раз, когда я пробовал 1 = 1 для запроса Oracle, я всегда получаю ошибку UTF-8. В прошлом я только что наполовину решил решение, установив известное несуществующее значение в качестве условного, но мне было интересно, является ли # 1 это ограничением Oracle или CF и # 2, если было лучше решение в соответствии с всегда истинным, а не всегда ложным условным выражением.
Изменить: сервер CF10, но я не знаю, какую версию Oracle мы используем.
1 = 1
означает, что он всегда будет возвращать true, поэтому1=1 or header like 'head%'
всегда будет возвращать все строки, потому что 1 всегда равно 1, частьor
вашего условного выражения не имеет значения, поскольку это утверждение всегда будет возвращать true - person Matt Busche   schedule 20.09.2013