2016-03-23 2 views
0

Я делаю простую программу java для чтения блока plsql из текстового файла, а затем выполняю его через CallableStatement.Oracle Jdbc CallableStatement не работает с plsql содержит CR (" r")

Если текстовый файл использует оба CRLF ("\ r \ n"), выполнение не выполняется с ORA-06550 и PLS-00103 (Обнаружен символ "").

Между тем, он отлично работает, если текстовый файл использует только LF.

NG:

BEGIN\r\nNULL;\r\nEND; 

OK:

BEGIN\nNULL;\nEND; 

ответ

0

* Nux против пробельных символов для Windows, пари вашего сервера * Nix и видит \ г как часть заявления.

+0

Я не отвечает за управление базами данных, поэтому я использую 'ВЫБЕРИТЕ ПРОДУКТ, Добавлено SYS.PRODUCT_COMPONENT_VERSION; 'для проверки информации о базе данных, и она показывает' TNS для 64-разрядных Windows: \t 10.2.0.5.0'. Я думаю, это сервер Windows. –

0

Либо файлы не соответствуют примерам, либо текст должен быть переведен каким-либо другим процессом до его отправки в Oracle. Оба примера отлично работают на Oracle, независимо от версии и операционной системы. Это может помочь построить команду в виде строки и использовать DUMP в операторе SELECT, чтобы точно определить, какие символы отправляются в Oracle.

Приведенный ниже код работает без ошибок, демонстрируя, что для разделения ключевых слов достаточно сочетания перевода строки и возврата каретки.

declare 
    lf varchar2(1) := chr(10); 
    cr varchar2(1) := chr(13); 
begin 
    execute immediate 'begin'||lf||'null;'||lf||'end;'; 
    execute immediate 'begin'||cr||lf||'null;'||cr||lf||'end;'; 
    execute immediate 'begin'||cr||'null;'||cr||'end;'; 
end; 
/
+0

Спасибо за ответ. Вы правы, что оба CRLF и LF отлично работают при выполнении непосредственно на Oracle, но моя проблема связана с JDBC 'CallableStatement' –

+0

Но эти сообщения об ошибках поступают от Oracle, а не от Java. Я думаю, что программа не отправляет строку, которую вы считаете отправкой. –

+0

Вы снова считаете правильным, и это то, о чем я прошу в своем посте (проблема оракула jdbc 'CallableStatement'). –

0

У меня была такая же проблема, и решить ее, заменив все разрывы строк перед использованием содержимого файла:

plsqlText = plsqlText.replace("\r\n", " "); 
Смежные вопросы