DB21007E Достигнут конец файла при чтении ошибки команды

#cmd #db2 #db2-connect

Вопрос:

Я пытаюсь выполнить приведенный ниже файл sql с помощью db2 в командной строке. Но я получаю следующую ошибку. Я не уверен, где все пошло не так.

«DB21007E Конец файла достигнут при чтении команды»

Я выполняю приведенный ниже файл sql с помощью sql-файла db2-tvf

 connect to ****** user ***** using ******
export to "D:Vikas.csv" OF DEL MESSAGES
select
T1.ROW_NUM,
T5.DETAIL_TYPE_CD,
T1.ADMIN_FEES_TICKET,
T1.ADMINISTRATIVE_FEES,
T1.BASE_RENT,
T1.CITATIONS,
T1.COLLECTION_REPO_FEES,
T1.DESC,
T1.EFFECTIVE_DATE,
T1.LATE_CHARGE,
T1.MISC_FEE,
T2.STATUS_CD,
T4.ROW_ID,
T3.ROW_ID,
T2.BUILD,
T1.REVERSE_FLG,
T1.NSF_FLG,
T2.PR_CON_ID,
T1.PROC_DATE,
T1.PROPERTY_TAX,
T1.REGISTRATION_FEES,
T1.REPAIR_FEES,
T1.SALES_TAX,
T1.TERMINATION_FEES,
T1.TOTAL_TRANS,
T1.TRANSACTION_TYPE

FROM
SIEBEL.LSE_INPHIST_VIEW T1
LEFT OUTER JOIN SIEBEL.S_ASSET T2 ON T1.ACCOUNT_NUM = T2.ASSET_NUM
LEFT OUTER JOIN SIEBEL.S_ASSET_CON T3 ON T2.ROW_ID = T3.ASSET_ID AND
T3.RELATION_TYPE_CD = 'Obligor'
LEFT OUTER JOIN SIEBEL.S_ASSETCON_ADDR T4 ON T3.ROW_ID = T4.ASSET_CON_ID 
AND T4.USE_TYPE_CD = 
'Bill To'
LEFT OUTER JOIN SIEBEL.S_PROD_INT T5 ON T2.PROD_ID = T5.ROW_ID
WHERE
(T1.ACNT_ID = '01003501435')
ORDER BY
T1.ACNT_ID DESC,T1.PROC_DATE DESC WITH UR
 

Теперь я могу подключить DB2, но при выполнении инструкции select возникает следующая ошибка

 SQL0104N  An unexpected token "T1.ROW_NUM" was found following "SELECT".
Expected tokens may include:  "SELECT".  SQLSTATE=42601
 

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

1. Заканчиваются ли оба оператора в SQL-файле точкой с запятой (или другим настроенным разделителем) ? Используете ли вы CLP Db2 для запуска файла в оболочке операционной системы ( db2 -tvf sqlfile ) ? Отредактируйте свой вопрос, чтобы внести больше ясности, не используйте комментарии

2. Вы исправили исходную проблему (DB21007E), предположительно, добавив разделитель операторов к каждому оператору в файле, как было предложено в первой рекомендации выше. Теперь у вас другой симптом. Вы не должны использовать один вопрос для двух разных несвязанных симптомов. Вместо этого для каждого симптома задайте другой вопрос. Вот как работает stackoverflow.

3. Ваше export заявление может быть недействительным, поскольку оно отображается MESSAGES без требуемого имени файла, содержащего сообщения. Просмотрите документацию Db2 для команды ЭКСПОРТА ibm.com/docs/en/db2/11.5?topic=commands-export

4. Спасибо, мао. Я могу это исправить, и файл генерируется сейчас. Я поднял другой вопрос об отсутствии заголовков в файле CSV.

Ответ №1:

В исходном тексте вопроса был симптом «»DB21007E Конец файла достигнут при чтении команды»».

Это было вызвано тем, что не удалось завершить каждый оператор разделителем. Разделителем по умолчанию для SQL-операторов является точка с запятой (;) . Вы можете использовать другой разделитель, в этом случае вы должны указать дополнительную информацию о конфигурации либо в командной строке, либо внутри самого файла sqlfile, чтобы указать новый разделитель.

Каждая инструкция в файле sqlfile, которую вы отправляете db2 -tvf sqlfile с помощью процессора командной строки Db2, должна быть действительной. Если какая-либо отдельная инструкция имеет неправильный синтаксис, то по умолчанию Db2 вернет ошибку и продолжит выполнение следующей инструкции в файле. Если вы хотите, чтобы Db2 остановила выполнение при первой ошибке и вышла из файла sqlfile, используйте параметр s командной строки.

Для любого другого симптома , отличного от DB21007E End of file reached while reading the command , вам следует задать отдельный новый другой вопрос. Всегда проверяйте свои запросы независимо, прежде чем помещать их в файл сценария, например, запустите SELECT... свой любимый графический инструмент и исправьте ошибки, прежде чем помещать рабочий запрос в файл SQL для написания сценариев. Для export команды вы используете MESSAGES опцию, но забыли указать имя файла, содержащее эти сообщения. Обратитесь к документации.