아마도 여기 누군가가 나를 도울 수 있습니다. 나는 아이디어가 부족하다.C 및 내장 SQL을 사용하여 Oracle에서 CLOB 선택
Oracle에서 CLOB를 포함하는 테이블에서 SELECT 문을 구현하려고합니다. 내 SELECT 문이 방법 보이는
PQUE
ID NOT NULL NUMBER(13)
PGA_ID NUMBER(13)
WS_CODE NUMBER(5)
OPERATION VARCHAR2(30)
RF_NR NUMBER(13)
STATUS NUMBER(5)
SENDER NUMBER(5)
EMPFAENGER NUMBER(5)
START_ZEIT TIMESTAMP(6)
DATEN CLOB
:이 테이블의 정의입니다
Semantic error at line 59, column 67, file pap_pque_sel.pc: EXEC SQL LOB READ :bufsize FROM :clob AT :start INTO :buffer ; ..................................................................1 PCC-S-02428, Buffer type is incompatible with LOB type
:
void pap_pque_select(long *sql_ptr,
PQUE_RECORD *pque_ptr)
{
OCIClobLocator *clob=NULL ;
long bufsize=4294967295, start=1, i=0 ;
long old_size, new_size=1 ;
char buffer[2048] ;
EXEC SQL ALLOCATE :clob ;
EXEC SQL
SELECT PQUE.ID,
PQUE.PGA_ID,
PQUE.WS_CODE,
NVL(PQUE.OPERATION, ' '),
PQUE.RF_NR,
PQUE.STATUS,
PQUE.SENDER,
PQUE.EMPFAENGER,
TO_CHAR(PQUE.START_ZEIT, 'YYYYMMDDHH24MISSFF2'),
NVL(PQUE.DATEN, EMPTY_CLOB())
INTO :(pque_ptr->pque_id),
:(pque_ptr->pga_id),
:(pque_ptr->ws_code),
:(pque_ptr->operation),
:(pque_ptr->rf_nr),
:(pque_ptr->status),
:(pque_ptr->sender),
:(pque_ptr->empfaenger),
:(pque_ptr->start_zeit),
:clob
FROM PQUE
WHERE PQUE.ID = :(pque_ptr->pque_id) ;
*sql_ptr = sqlca.sqlcode ;
if (sqlca.sqlcode == 0)
{
ds_trim(pque_ptr->operation) ;
do
{
if (i++ == 0)
EXEC SQL LOB READ :bufsize FROM :clob AT :start INTO :buffer ;
else
EXEC SQL LOB READ :bufsize FROM :clob INTO :buffer ;
if (sqlca.sqlcode == 0 || sqlca.sqlcode == 1403)
{
old_size = new_size ;
new_size += bufsize ;
if (pque_ptr->daten == NULL)
pque_ptr->daten = calloc(new_size, sizeof(char)) ;
else
pque_ptr->daten = realloc(pque_ptr->daten,
new_size*sizeof(char)) ;
memcpy(pque_ptr->daten+old_size-1, buffer, bufsize) ;
pque_ptr->daten[new_size-1] = '\0' ;
}
}
while (sqlca.sqlcode == 0) ;
}
EXEC SQL FREE :clob ;
*sql_ptr = sqlca.sqlcode ;
return ;
}
프로-C-프리 컴파일러를 사용하여, 나는 오류 아무도 아이디어가있어, char [...]가 CLOB와 호환되지 않아야하는 이유는 무엇입니까? 내 데이터베이스에있는 다른 CLOB와 동일한 구문을 sed했는데 정상적으로 작동했습니다.
내가 마지막으로 문제 나 자신을 발견 안부 르그