Portál AbcLinuxu, 12. května 2025 16:51
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.