Перевод строки в Oracle выполняется лишь 10м символом, независимо от платформы! А ведь промучался с динамическим PL\SQL-кодом 3 дня! Думал сначала на права, потом на свои руки, потом на индусов, потом опять на свои руки, а вот в результате оказалось, что вместо chr(13)||chr(10) надо было ставить просто chr(10). И все, джобы с динамически сформированным кодом заработали.
Спасибо! Однако у меня не так давно и классический CHR(10)||CHR(13) вполне работал в простом анонимном блоке. Может дело, в порядке слагаемых? Сперва перевод строки, потом возврат каретки? Или всё равно?
ОтветитьУдалитьПорядок слагаемых менять пробовал - эффекта полный ноль.
ОтветитьУдалитьЭто касается исключительно(!) динамического PL\SQL-кода. Смотрим пример:
declare
-- Local variables here
s VARCHAR2(32000);
cr VARCHAR2(2) := CHR(10)||CHR(13);
begin
-- Test statements here
s:='declare'||cr||' vTemp date;'||cr||'begin'||cr||' select sysdate into vTemp from dual;'||cr||'end;';
EXECUTE IMMEDIATE s;
end;
ORA-06550: line 2, column 1:
PLS-00103: Encountered the symbol "" when expecting one of the following:
begin function package pragma procedure subtype type use
<an identifier> <a double-quoted delimited-identifier> form
current cursor
ORA-06512: at line 9
Порядок значения не имеет, должен быть только chr(10)
ОтветитьУдалитьНебольшой вопрос,
ОтветитьУдалитьВ спецификации пакета UTL_TCP (Oracle 10.2) есть такой фрагмент
/*
* Carriage-return line-feed character sequence. This CRLF package variable
* is intended to be a constant that denotes the carriage-return-line-feed
* character sequence. Do not try to modify its value. Modification
* of its value may result in errors in other PL/SQL applications.
*/
CRLF VARCHAR2(10);
В Oracle 11.1 написано следующее
/*
* Carriage-return line-feed character sequence.
*/
CRLF CONSTANT VARCHAR2(2 CHAR) := unistr('\000D\000A');
Это как-нибудь относится к топику?
Спасибо
Значение в UTL_TCP зависит от платформы, а перевод строки в коде всегда(!) CHR(10).
Удалить