Portál AbcLinuxu, 9. listopadu 2025 02:04
Ahoj, nedokazal byste nekdo poradit, jak precist blob v oracle proc*c a ulozit ho do pameti? Pouzivam tento kod, ale pokud ret->data pretypuji na to co v nich je a dreferencuji, tak to ma vzdycky pocatecni byty nejak zmrseny.
Zda se mi, ze tam jako rpvni 2(?) byty je prave velikost toho blobu v DB. Jinak mam jistotu, ze do tech cca 30KB se mi to vejde.
Diky za kazdkou radu, uz se s tim param dva dny v kuse.
typedef unsigned char *my_raw;
long lid;
long structure_id;
int color;
lid = id;
my_raw data;
ret * node
node * ret;
node ** childs;
unsigned size_of_childs;
int i;
ub4 len, amt;
int datalen;
OCIBlobLocator *blob ;
ret = (node*)malloc(sizeof(node));
EXEC SQL ALLOCATE :blob;
EXEC SQL SELECT STRUCTURE_ID, color, data into :structure_id , :color, :blob
from node WHERE id = :lid;
ret->color = color;
ret->structure_id = structure_id;
EXEC SQL TYPE my_raw IS VARRAW(30000);
EXEC SQL LOB DESCRIBE :blob GET LENGTH INTO :len;
// printf("velikost blobu : %i\n", len);
amt = len;
data = malloc(len);
if(len > 0){
//puts("blob neco obsahuje");
EXEC SQL LOB READ :amt
FROM :blob INTO :data WITH LENGTH :len ;
ret->data = malloc(len);
memcpy(ret->data, data, len);
ret->data_size=len;
}else{
ret->data = NULL;
}
EXEC SQL FREE :blob;
if(data){free(data);}
return ret;
Na otázku zatím nikdo bohužel neodpověděl.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.