В моем приложении в таблицу базы данных был добавлен новый столбец XMLType. Я должен читать и писать в эту таблицу с использованием Oracle C API. Как я получил из Интернета, базовым типом данных XMLType является CLOB, и, как я понимаю, тот же API, который я использовал для управления столбцами CLOB, должен также поддерживать столбцы XMLType.Как использовать столбцы OCI для XMLType в Oracle?
Моя таблица выглядит следующим образом (эта таблица не была фактической и использовалась как POC).
CREATE TABLE STUDENT
(
NIC NUMBER(10),
MESSAGE XMLTYPE
);
SQL для выбора данных
SELECT MESSAGE FROM STUDENT
Однако при получении данных он дал мне следующую ошибку в приложении.
ORA-00932: inconsistent datatypes: expected CLOB got OPAQUE TYPE
Я определяю переменную следующим образом.
pLocator = new OCILobLocator*;
*pLocator = NULL;
OCIDescriptorAlloc(p_DBCon->p_env, (dvoid **)pLocator, OCI_DTYPE_LOB,
(size_t)0, (dvoid **)0);
b_IsErr = OCIDefineByPos(p_sql, &p_dfn, p_DBCon->p_err, iPos,
(dvoid*)pLocator, -1, SQLT_CLOB, 0, 0, 0, OCI_DEFAULT);
Однако я изменил SQL следующим образом, а не она работает без каких-либо ошибок, даже для больших XMLs (более 4k)
SELECT A.MESSAGE.GETCLOBVAL() FROM STUDENT A
Так одна часть была завершена.
Однако моя вторая часть, которая предназначена для вставки данных, не была выполнена.
My SQL является
INSERT INTO STUDENT (MESSAGE) VALUES (:1)
Я связывание следующих данных.
В процессе выполнения он дает ошибку при заходе на посадку.
ORA-01461: can bind a LONG value only for insert into a LONG column
Пожалуйста, помогите мне в решении этой проблемы.