powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / -23197 при вставке из процедуры в таблицу в другой базе
14 сообщений из 14, страница 1 из 1
-23197 при вставке из процедуры в таблицу в другой базе
    #38086054
falcon111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Платформа 2008R2x64, 11.50FC9.

Надо сделать связку двух проектов. Каждый использует свою базу, обе базы на одном сервере. Первая база DB_LOCALE=ru_ru.1251, вторая ru_ru.utf8

Суть в том, что при обработке данных процедурой в первой базе в некоторых случаях надо создавать записи во второй базе.

Внутри процедуры есть код
Код: sql
1.
2.
3.
if BitAnd(res, mask)!=0 then
  insert into billing:exttasks(ClientId, UnitId, command, status) values(cid, unid, cmd, 0);
end if;


Если условие выполняется, при попытке вставки получается -23197
Если вставка не происходит - все работает.

Процедура вызывается из СИшного приложения с CLIENT_LOCALE=ru_ru.1251 через odbc как execute procedure procname(params);

Как победить эту ситуацию?

Кстати, если мне не изменяет память, раньше подобные insert-ы использовались и проблем не возникало, но давно это было и я уже не помню деталей, хотя точно помню что с тех пор не один апгрейд информикса был поставлен и может в этой версии что-то поменяли в этой части...
...
Рейтинг: 0 / 0
-23197 при вставке из процедуры в таблицу в другой базе
    #38086722
falcon111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неужели никто не использует insert into anotherDB:sometable() ?
...
Рейтинг: 0 / 0
-23197 при вставке из процедуры в таблицу в другой базе
    #38086884
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
falcon111Неужели никто не использует insert into anotherDB:sometable() ?

Ну почему же не использует.
Ошибка -23197 вам явно указывает на не соответствие DB_LOCALE.
Для первой, к которой подключаетесь, базы вы используете DB_LOCALE=ru_ru.1251, CLIENT_LOCALE=ru_ru.1251

При вызове insert into anotherDB:sometable() происходит неявный коннект ко второй базе у которой DB_LOCALE=ru_ru.utf8.
Если программа написана на ESQL/C , то я бы сделал два явных коннекта и где надо переключался бы SET CONNECTION.
...
Рейтинг: 0 / 0
-23197 при вставке из процедуры в таблицу в другой базе
    #38086911
falcon111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ikirfalcon111Неужели никто не использует insert into anotherDB:sometable() ?

Ну почему же не использует.
Ошибка -23197 вам явно указывает на не соответствие DB_LOCALE.
Для первой, к которой подключаетесь, базы вы используете DB_LOCALE=ru_ru.1251, CLIENT_LOCALE=ru_ru.1251

При вызове insert into anotherDB:sometable() происходит неявный коннект ко второй базе у которой DB_LOCALE=ru_ru.utf8.
Если программа написана на ESQL/C , то я бы сделал два явных коннекта и где надо переключался бы SET CONNECTION.

Вы не совсем поняли, я же не в С-программе занимаюсь обработкой данных, а в процедуре. И коннект ко второй базе происходит внутри SPL-процедуры, а не из СИшного приложения, поэтому второй коннект тут не поможет. А при обращении из SPL от одной базы к другой в пределах одного сервера, как мне кажется, сервер сам должен заниматься перекодированием, ru_ru.1251 и ru_ru.utf8 совместимы и проблем вызывать не должны. Да и вставка там идет - одни интежеры, которые, по-хорошему, и перекодировать-то не надо.

Вообще все это напоминает мне косяк версий в районе 11.50xC3, где с этой же ошибкой не работал автоапдейт статистики (точнее сам шедулер), тоже там что-то такое было при работе между разными базами, но с тех пор должны были все это починить...
...
Рейтинг: 0 / 0
-23197 при вставке из процедуры в таблицу в другой базе
    #38086979
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
falcon111,

Вставка тут ни причем. Такую же ошибку вы получите выполнив SELECT count(*) FROM anotherDB:sometable
...
Рейтинг: 0 / 0
-23197 при вставке из процедуры в таблицу в другой базе
    #38086984
falcon111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ikirfalcon111,

Вставка тут ни причем. Такую же ошибку вы получите выполнив SELECT count(*) FROM anotherDB:sometable

Т.е. это не косяк автоперекодировки а фича? И объехать ее без костылей никак?
...
Рейтинг: 0 / 0
-23197 при вставке из процедуры в таблицу в другой базе
    #38087461
Выбегалло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
falcon111Ikirfalcon111,

Вставка тут ни причем. Такую же ошибку вы получите выполнив SELECT count(*) FROM anotherDB:sometable

Т.е. это не косяк автоперекодировки а фича? И объехать ее без костылей никак?

Я бы попробовал убрать CLIENT_LOCALE. И DB_LOCALE на стороне сервера тоже.
...
Рейтинг: 0 / 0
-23197 при вставке из процедуры в таблицу в другой базе
    #38087562
Leonid Belov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выбегаллоfalcon111пропущено...


Т.е. это не косяк автоперекодировки а фича? И объехать ее без костылей никак?

Я бы попробовал убрать CLIENT_LOCALE. И DB_LOCALE на стороне сервера тоже.

Не поможет. Вариант с разными локалями работать не будет.
...
Рейтинг: 0 / 0
-23197 при вставке из процедуры в таблицу в другой базе
    #38088873
Выбегалло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid BelovВыбегаллопропущено...


Я бы попробовал убрать CLIENT_LOCALE. И DB_LOCALE на стороне сервера тоже.

Не поможет. Вариант с разными локалями работать не будет.

Мне смутно помнится, я с этим боролся когда база для HPLoader-а была в одной кодировке, а основная база - в utf8...
Надо будет поковыряться.
...
Рейтинг: 0 / 0
-23197 при вставке из процедуры в таблицу в другой базе
    #38088973
Leonid Belov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выбегалло,

Мне кажется, что вариант с разными локалями работоспособен, только если работа ведется внешним клиентом, а не изнутри сервера (как это происходит в случае хранимой процедуры). Клиент может установить два соединения - каждое со своей базой и соответственно со своими настройками кодировок, - и гонять данные через себя. Я что-то подобное делал - правда, только на Java, где локаль указывается в URL каждого подключения. С ESQL-C не экспериментировал.
...
Рейтинг: 0 / 0
-23197 при вставке из процедуры в таблицу в другой базе
    #38090383
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
Leonid Belov,

не не кажется. Чтобы работать с двумя базами из одного соединения надо чтобы локали базы были одинаковы.
Вариант с внешним приложением и двумя JDBC коннекциями самый рабочий.
Ну есть еще грабли когда с одной стороны UTF, а с другой 866, но это решается фильтрацией.
...
Рейтинг: 0 / 0
-23197 при вставке из процедуры в таблицу в другой базе
    #38091073
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cprНу есть еще грабли когда с одной стороны UTF, а с другой 866, но это решается фильтрацией.
Про фильтрацию поясните пожалуйста.
...
Рейтинг: 0 / 0
-23197 при вставке из процедуры в таблицу в другой базе
    #38092313
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
bk0010cprНу есть еще грабли когда с одной стороны UTF, а с другой 866, но это решается фильтрацией.
Про фильтрацию поясните пожалуйста.

Некоторые UTF-8 символы при попытке вставки строки char в БД с локалью 866 приводили к зависанию jdbc соединения, ошибка при этом не возникала.
Пришлось писать на java фильтры , которые удаляли из строки UTF-8 то, что не может быть преобразовано в 866.
...
Рейтинг: 0 / 0
-23197 при вставке из процедуры в таблицу в другой базе
    #38092722
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / -23197 при вставке из процедуры в таблицу в другой базе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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