Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Exportar Campo BLOB a un Archivo txt

Estas en el tema de Exportar Campo BLOB a un Archivo txt en el foro de Oracle en Foros del Web. hola amigos, mi necesidad es que tengo una aplicacion web - Primero: subo archivos txt y los guardo en mi base de Datos Oracle - ...
  #1 (permalink)  
Antiguo 17/09/2010, 15:39
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 15 años, 10 meses
Puntos: 1
Exportar Campo BLOB a un Archivo txt

hola amigos, mi necesidad es que tengo una aplicacion web
- Primero: subo archivos txt y los guardo en mi base de Datos Oracle
- Segundo: en otro punto de mi intranet hay otra persona que necesita recuperar esos archivos y guardarlo en una carpeta especifica.

ya solucione la primera parte ya guardo bien mi archivo, lo hace excelente; ahora mi problema es en la segunda parte:

tengo el siguiente procedimiento en Oracle
Código SQL:
Ver original
  1. CREATE OR REPLACE PROCEDURE SENATI.extract_file2(str_file_name IN VARCHAR) IS
  2.  
  3. vblob BLOB;
  4. vstart NUMBER := 1;
  5. bytelen NUMBER := 32760;
  6. len NUMBER;
  7. my_vr RAW(32760);
  8. x NUMBER;
  9. l_output utl_file.file_type;
  10.  
  11. BEGIN
  12.     l_output := utl_file.fopen('DIRECTORIO', str_file_name,'w', 32760);
  13.  
  14.     vstart := 1;
  15.     bytelen := 32760;
  16.  
  17.     SELECT  dbms_lob.getlength(BLOB_CONTENT)
  18.     INTO    len
  19.     FROM    wwv_flow_file_objects$
  20.     WHERE   filename = str_file_name;
  21.     -- save blob length
  22.     x := len;
  23.     -- select blob into variable
  24.     SELECT  BLOB_CONTENT
  25.     INTO    vblob
  26.     FROM    wwv_flow_file_objects$
  27.     WHERE   filename = str_file_name;
  28.  
  29.     -- if small enough for a single write
  30.     IF len < 32760 THEN
  31.         utl_file.put_raw(l_output,vblob);
  32.         utl_file.fflush(l_output);
  33.     ELSE -- write in pieces
  34.         vstart := 1;
  35.         WHILE vstart < len AND bytelen > 0
  36.         LOOP
  37.             dbms_lob.READ(vblob,bytelen,vstart,my_vr);
  38.             utl_file.fflush(l_output);
  39.             utl_file.put_raw(l_output,my_vr);
  40.  
  41.             -- set the start position for the next cut
  42.             vstart := vstart + bytelen;
  43.             -- set the end position if less than 32760 bytes
  44.             x := x - bytelen;
  45.             IF x < 32760 THEN
  46.                 bytelen := x;
  47.             END IF;
  48.             utl_file.fclose(l_output);
  49.         END loop;
  50.     END IF;
  51. END;
y lo ejecuto de la siguiente manera:
Código SQL:
Ver original
  1. BEGIN
  2.     extract_file2('archivo.txt');
  3. END;
pero me resulta un error, cuando el archivo sobrepasa la longitud de 32760 me sale el error en las lineas:
Código SQL:
Ver original
  1. dbms_lob.READ(vblob,bytelen,vstart,my_vr);
  2.             utl_file.fflush(l_output);
Serio ya intente de 1000 formas, seguire intentando pero si alguien ya le sucedio lo mismo por favor ayudenme!!! es bastante urgente!!!

informarles tambien que me sale el siguiente error:
Cita:
ORA-29282: invalid file ID
ORA-06512: at "SYS.UTL_FILE", line 984
ORA-06512: at "SENATI.EXTRACT_FILE2", line 38
ORA-06512: at line 2
Saludos!!!
__________________
Odio verte ir, pero me encanta verte yendo :)

Última edición por -rommel_; 17/09/2010 a las 16:57

Etiquetas: blob, txt, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:25.