Ошибка апострофа Informix SQL - PullRequest
       63

Ошибка апострофа Informix SQL

1 голос
/ 22 февраля 2010

Я получаю [Informix][Informix ODBC Driver][Informix]A syntax error has occurred при выполнении запроса ниже. Когда я удаляю двойные апострофы, запрос выполняется успешно. Все, что я могу найти с помощью Google, говорит мне, что я поступаю правильно. Семь лет назад я использовал Informix без проблем такого рода, поэтому я думаю, что забыл что-то важное!

insert into ct_repairs (ct_job_no,inh_job_no,reference,tab
,rec_date,rec_time,priority,start_dte,start_tme,app_date
,app_time,card_date,card_time,est_date_comp,est_time_comp
,act_date_comp,act_time_comp,exp_code,ct_notes,ct_status
) values (
2090
,335706
,'23026002003'
,'P'
,NULL
,''
,1
,"22/02/2010"
,'10:47'
,NULL
,''
,"22/02/2010"
,'11:14'
,NULL
,''
,NULL
,''
,'DTD'
,'**PLS NOTE PLANNED WRKS GOING ON ON ASCOT RD,IE ROOFS,RENDERERING,AND HIGH LEVEL CLOSE BOARD FENCES:SPOKE TO THE LADY AT NO 2 SHE DOESN''T NO ANYTHING ABOUT FENCE ISSUES,CALLED AT NO 4@6 ASCOT NO ACCESS TO EITHER PROPERTIES**:YOU YOU PLS SEND A EMAIL TO TREVOR ON PLANNED ASKING IF NO 2 ASCOT RD IS DOWN FOR A NEW CLOSED BOARDED FENCE,OR IS THAT THE PROBLEM NO 4 BEING PRIVATE THAT THEY  HAVEN''T PUT ONE UP**'
,0
)

1 Ответ

1 голос
/ 22 февраля 2010

Было бы полезно, если бы вы указали версию ODBC, которую вы используете, и версию IDS (IBM Informix Dynamic Server), а также платформу, на которой они работают.

Когда я копирую и вставляю код из вопроса в SQLCMD (эквивалент DB-Access) в базе данных без таблицы, я получаю ошибку:

SQL -206: The specified table (ct_repairs) is not in the database.

Это указывает на то, что SQL синтаксически правильный.

Итак, почему вы видите ошибку?

Мой первый подозреваемый в виновной стороне - длинная (более 400) строка символов в конце. Когда-то (некоторое время назад, AFAICR) была верхняя граница 255 длины символьного строкового литерала. Если вы используете достаточно старую версию драйвера ODBC (или IDS), это может быть фактором.

Мой второй подозреваемый - случайная строка даты в двойных кавычках. Informix обычно слабо относится к тому, используете ли вы одинарные или двойные кавычки вокруг строк; это может быть полезно Однако есть способ сделать его педантичным, как стандарт SQL, требуя одинарных кавычек вокруг строк и используя двойные кавычки только для «идентификаторов с разделителями». Если переменная окружения DELIMIDENT установлена ​​(возможно, через SETNET32 в Windows), будет вызван строгий режим, и когда я делаю это в SQLCMD, я получаю:

SQL -201: A syntax error has occurred.

Третий подозревает, что длинный столбец имеет тип BYTE или TEXT (или, возможно, BLOB или CLOB), и преобразование строкового литерала в этот тип отсутствует. Тем не менее, AFAIK, драйвер ODBC перепрыгивает через обручи, чтобы справиться с этой проблемой, и ошибка будет другой, вероятно, что-то вроде:

SQL -617: A blob data type must be supplied within this context.

Итак, на данный момент, я думаю, что DELIMIDENT стоит того, чтобы его преследовать - его, вероятно, легко исправить (либо путем обеспечения того, чтобы даты были заключены в одинарные кавычки, либо путем сброса DELIMIDENT). В противном случае попробуйте более короткую строку и посмотрите, работает ли она.

Но ваше базовое понимание верно - вы правильно используете двойные одинарные кавычки.

...