Ingres SQL недопустимое совпадение шаблонов и недопустимая escape-последовательность, неожиданные результаты

#sql #database #escaping #ingres

#sql #База данных #экранирование #ingres

Вопрос:

Я запрашиваю базу данных, которая использует Ingres 10.2. Кажется, я не могу заставить какой-либо из моих кодов сопоставления с шаблоном работать так, как я ожидаю.

Например:

 SELECT TOP 20 * 
FROM table_name 
WHERE variable_name IN ('XaKDG', 'XaKDH')
 

возвращает оба XaKDG и XaKDH, как и ожидалось.

Однако при попытке этого:

 SELECT TOP 5 * 
FROM table_name 
WHERE variable_name LIKE 'XaKD[GH]' escape  ''
 

Я получаю следующие ошибки:

ОШИБКА ‘22025’ 1315172
Недопустимое совпадение шаблонов с указанной
недопустимой ESCAPE-последовательностью.

Я сбит с толку, поскольку в руководстве пользователя указано следующее:

«Для сопоставления любой строки, начинающейся с 0 по 4, за которой следует заглавная буква, затем [, любые два символа и конечный ]:»

 name like '[01234][A-Z][__]' escape ''
 

Насколько я могу судить, мой запрос должен быть правильным. Я также пробовал вообще без escape-символов и с двойными escape-символами. Это не привело ни к каким ошибкам, но также ничего не вернуло.

Я ценю любую помощь.

Руководство пользователя здесь: https://supportactian.secure.force.com/help/servlet/fileField?id=0BEf3000000PLPf

Комментарии:

1. Ingres 10.2 — это СУБД, если я не неправильно понимаю значение этого термина

2. Согласно документации, можете ли вы убедиться, что ваша СУБД действительно поддерживает это ESCAPE-предложение? Я предполагаю, что это так, но это скорее проверка работоспособности. Смотрите: The iidbcapabilities catalog contains information about the capabilities provided by the Enterprise Access product or Ingres DBMS. ... The cap_capability column in the iidbcapabilities catalog contains one or more of the following values: ESCAPE - Contains Y if DBMS supports the ESCAPE clause of the LIKE predicate in the WHERE clause of search statements. Contains N if ESCAPE is not supported. Строка ниже, объясняющая, что такое escape-символ

3. Спасибо, я не видел эту часть документации. Да, предложение escape поддерживается. # cap_capability cap_value 18 ESCAPE Y

4. Я не могу получить доступ к серверу СУБД 10.2 (срок поддержки 10.2 истек), но синтаксис правильный, я попробовал следующее в 11.1 и получил ожидаемый результат: объявить глобальную временную таблицу session.x(имя varchar(50)) при фиксации сохранить строки с помощью norecovery; вставить взначения session.x(‘XaKDG’),(‘XaKDH’),(‘ГГГГ’); выберите * из session.x, где имя типа ‘XaKD [GH]’ escape »;

5. Какой клиент вы используете? Не исключено, что клиент что-то делает с вашими escape-символами и выдает неожиданные результаты. Где, как если бы вы использовали терминал ingres, мы, вероятно, можем это исключить.