Юникодное приложение на VC++ 2005
Клиент: OCCI 11 (Instant Client)
Загружаю юникодный текст через ХП в NCLOB поле таблицы (параметр "TEXTVAL" в ХП тоже NCLOB), внутри ХП - INSERT
m_pEnv = oracle::occi::Environment::createEnvironment("OCCIUTF16","OCCIUTF16", oracle::occi::Environment::OBJECT);
... // Вызываем ХП, вставляющую запись в таблицу
m_pOCCIStmt = m_pOCCIConn->createStatement((utext*) (LPCTSTR) sProcName);
.. // Пишем NCLOB
oracle::occi::Clob* pClob = OCCIGetTempClob();
pClob->open(oracle::occi::OCCI_LOB_READWRITE);
pClob->setCharSetIdUString((utext*) L"OCCIUTF16");
int iReaded = _tcslen(strVal);
pClob->writeChunk(iReaded, (utext*) strVal, iReaded*2, 1);
pClob->close();
m_pOCCIStmt->setClob(m_iOCCIParamIndex, *pClob);
m_pOCCIStmt->executeUpdate();
С моим сервером "FINDER" все работает прекрасно, с сервером ORACLE-TEST на executeUpdate() возникает ошибка:
PLS-00561: character set mismatch on value for parameter 'TEXTVAL'
Перечитал уже кучу статей, но совсем запутался. Со стороны клиента я явно передаю юникод, поле в БД - юникодное NCLOB, на каком этапе Оракл пытается что-то там преобразовать???
Вот краткая инфа о чарсетах (NLS_CHARACTERSET разный, но он же не должен влиять?!):
--select * from nls_database_parameters;
-- сервер ORACLE-TEST (9i)
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_CHARACTERSET AL32UTF8
--сервер FINDER (10g)
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_CHARACTERSET CL8MSWIN1251
Прошу помочь разобраться, перелопатил уже кучу инфы и все равно никак не пойму... :-(