Portál AbcLinuxu, 26. dubna 2024 02:45


Dotaz: Cteni BLOBU v oracle pro*c

Jakub Hájek avatar 21.9.2010 22:26 Jakub Hájek | skóre: 14 | blog: zamek | Praha
Cteni BLOBU v oracle pro*c
Přečteno: 243×
Odpovědět | Admin

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;

Teprve tehdy, až nebudeme mít co ztratit, budeme opravdu svobodní.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Na otázku zatím nikdo bohužel neodpověděl.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.