powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TOraSession ошибка записи в blob при переходе на Directly - Ошибка ORA-01460
5 сообщений из 5, страница 1 из 1
TOraSession ошибка записи в blob при переходе на Directly - Ошибка ORA-01460
    #39629560
dsbspb7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый.

Второй день бьюсь, уже не знаю куда копать... Перевел соединение с настроек Oracle-клиента на Directly, посыпались ошибки "ORA-01460: затребовано нереализованное или неразумное преобразование"

Начал смотреть отличия между директ и tnsnames.ora, обнаружил, что при директе v$nls_parameters другие. Сделал set nls после коннекта к БД(делаю вызов TOraStoredProc сразу после коннекта, которая ставит нужные NLS-параметры) аналогичными коннекту с TNS, не помогло, падает на записи в блоб.

Код вставки в блоб:
Код: pascal
1.
2.
3.
4.
   qryTmp.sql.Text:='INSERT INTO TKTBIS_IN_FILES(WKFLF_WKFLF_ID, BLOB_FILE) VALUES (:vWkflfId,:vBlob_file)';
   qryTmp.Params[0].AsInteger:= vWkflfId;
   qryTmp.Params[1].LoadFromFile(TKTBIS.FileListBoxIn.FileName,ftblob);
   qryTmp.ExecSQL;

При соединении с TNS работает без проблем, при директе - "ORA-01460: затребовано нереализованное или неразумное преобразование"


Версия Oracle 11g
ODAC 9.3.10

Прошу помощи знатоков)

Установки NLS:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
procedure set_nls_params is
begin
  execute immediate 'alter session set NLS_LANGUAGE = '||chr(39)||'RUSSIAN'||chr(39);
  execute immediate 'alter session set NLS_TERRITORY ='||chr(39)|| 'CIS'||chr(39);
  execute immediate 'alter session set NLS_ISO_CURRENCY = '||chr(39)||'CIS'||chr(39);
  execute immediate 'alter session set NLS_NUMERIC_CHARACTERS = '||chr(39)||', '||chr(39);
  execute immediate 'alter session set NLS_CALENDAR = '||chr(39)||'GREGORIAN'||chr(39);
  execute immediate 'alter session set NLS_DATE_FORMAT = '||chr(39)||'DD.MM.RR'||chr(39);
  execute immediate 'alter session set NLS_DATE_LANGUAGE = '||chr(39)||'RUSSIAN'||chr(39);
  execute immediate 'alter session set NLS_CURRENCY = '||chr(39)||'р.'||chr(39);
  execute immediate 'alter session set NLS_DUAL_CURRENCY = '||chr(39)||'р.'||chr(39);
 
--  execute immediate 'alter session set NLS_CHARACTERSET = '||chr(39)||'CL8MSWIN1251'||chr(39);
  execute immediate 'alter session set NLS_SORT = '||chr(39)||'RUSSIAN'||chr(39);
  execute immediate 'alter session set NLS_TIME_FORMAT = '||chr(39)||'HH24:MI:SSXFF'||chr(39);
  execute immediate 'alter session set NLS_TIMESTAMP_FORMAT = '||chr(39)||'DD.MM.RR HH24:MI:SSXFF'||chr(39);
  execute immediate 'alter session set NLS_TIME_TZ_FORMAT = '||chr(39)||'HH24:MI:SSXFF TZR'||chr(39);
  execute immediate 'alter session set NLS_TIMESTAMP_TZ_FORMAT = '||chr(39)||'DD.MM.RR HH24:MI:SSXFF TZR'||chr(39);
--  execute immediate 'alter session set NLS_NCHAR_CHARACTERSET = '||chr(39)||'AL16UTF16'||chr(39);
  execute immediate 'alter session set NLS_COMP = '||chr(39)||'BINARY'||chr(39);
  execute immediate 'alter session set NLS_LENGTH_SEMANTICS = '||chr(39)||'BYTE'||chr(39);
  execute immediate 'alter session set NLS_NCHAR_CONV_EXCP = '||chr(39)||'FALSE'||chr(39);
    
end set_nls_params;



Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
...
Рейтинг: 0 / 0
TOraSession ошибка записи в blob при переходе на Directly - Ошибка ORA-01460
    #39629766
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ODAC? Делай запись BLOB так (работает и в дайректе, и через клиент). Ниже просто пример, разберешься.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
// BlobStream содержит двоичные данные

            SQL.Text := 'update DOCSIGNS set SIGN_CONTENT = empty_blob() where COUNTER = :pCOUNTER returning SIGN_CONTENT into :pSIGN_CONTENT';
            ParamByName('pCOUNTER').AsString := DTSSigns.FieldByName('COUNTER').AsString;
            ParamByName('pSIGN_CONTENT').DataType:= ftOraBlob; 
            ParamByName('pSIGN_CONTENT').ParamType:= ptInput; 
            ParamByName('pSIGN_CONTENT').AsOraBlob.LoadFromStream(BlobStream); 
            ExecSQL;
...
Рейтинг: 0 / 0
TOraSession ошибка записи в blob при переходе на Directly - Ошибка ORA-01460
    #39629942
dsbspb7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Квейд, помогло. Проблема решена, большое спасибо!
...
Рейтинг: 0 / 0
TOraSession ошибка записи в blob при переходе на Directly - Ошибка ORA-01460
    #39629961
Фотография devart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dsbspb7
Код: pascal
1.
   qryTmp.Params[1].LoadFromFile(TKTBIS.FileListBoxIn.FileName,ftblob);


тип ftblob следует использовать для полей с типом LONG RAW, а для BLOB следует указывать ftOraBlob, например, так:
Код: pascal
1.
   qryTmp.Params[1].LoadFromFile(TKTBIS.FileListBoxIn.FileName,ftOraBlob);
...
Рейтинг: 0 / 0
TOraSession ошибка записи в blob при переходе на Directly - Ошибка ORA-01460
    #39630050
dsbspb7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да работает, моя ошибка в неправильном выборе fieldtype. Спасибо!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TOraSession ошибка записи в blob при переходе на Directly - Ошибка ORA-01460
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]