|
|
|
OCI - StmtPrepare/Execute и Unicode
|
|||
|---|---|---|---|
|
#18+
Всем привет, помогите разобраться где ошибка. Есть wchar_t-строка с SQL, которую надо выполнить. Делаю StmtPrepare, затем StmtExecute: Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. На методе Execute - получаю ошибку: L"ORA-00906: missing left parenthesis\n". Далее меняю Prepare - в качестве аргумента Len - передаю на число символов, а число байт: Код: plaintext 1. 2. И здесь все проходит без ошибки. Смущает что документация говорит следующее: Length of the statement in characters or in number of bytes, depending on the encoding. Must not be zero. А у меня encoding - UTF16: Код: plaintext 1. Т.е. по идее надо передавать количество символов? Здесь, на SQL.RU нашел один пример, где тоже передаются байты - http://www.sql.ru/forum/1086322/oci-insert-blob-a-kak-parametra-funkcii?hl=ocistmtprepare wcslen Я накосячил или правда число байтов надо передавать? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 09:57 |
|
||
|
OCI - StmtPrepare/Execute и Unicode
|
|||
|---|---|---|---|
|
#18+
да, а вот пример от оракла - здесь передается число символов: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Источник - https://docs.oracle.com/cd/B14117_01/server.101/b10749/ch7progrunicode.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 10:31 |
|
||
|
OCI - StmtPrepare/Execute и Unicode
|
|||
|---|---|---|---|
|
#18+
A OCI точно умеет wchar_t принимать в качестве параметра? Я всегда использовал MBCS и выставлял NLS_LANG в UTF_8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 10:40 |
|
||
|
OCI - StmtPrepare/Execute и Unicode
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, как раз по ссылке выше - официальный пример с wchar_t.. У меня только еще сомнения, не надо ли трогать как раз NLS_LANG, но мне казалось что правильное задание опций в OciEnvNlsCreate - это все, что нужно. Интересно, что в отличие от StmtPrepare, функция OciBindByName принимает байты и это явно указано в документации, хотя ситуация очень похожа - есть аргумент text*, а затем следующий аргумент - его длина, но в байтах: sword OCIBindByName ( OCIStmt *stmtp, OCIBind **bindpp, OCIError *errhp, CONST text *placeholder, sb4 placeh_len, . . . . placeh_len (IN) The length of the name specified in placeholder, in number of bytes regardless of the encoding. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 11:04 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39433766&tid=1886150]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
177ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
| others: | 222ms |
| total: | 475ms |

| 0 / 0 |
