Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > Oracle

Respuesta
 
Herramientas Desplegado
Antiguo 10-mar-2008, 05:22   #1 (permalink)
Sonic_plsql ha deshabilitado el karma
 
Fecha de Ingreso: marzo-2008
Mensajes: 4
Retorno De Carro, Salto De Linea En Plsql

Hola!!

Soy nuevo en este foro y tengo un problema con un plsql, a ver si alguien sabe darme una idea :)

Me estan pasando un fichero de array de bites desde java para que lo desglose con un plsql, tiene la siguiente forma:

[73, 68, 83, 72, 80, 124, 78, 79, 77, 67, 79, 77, 80, 76, 69, 84, 79, 124, 78, 79, 77, 82, 79, 84, 85, 76, 65, 82, 124, 78, 79, 77, 67, 79, 82, 84, 79, 124, 71, 69, 78, 69, 82, 73, 67, 79, 124, 78, 79, 77, 66, 85, 83, 81, 85, 69, 68, 65, 124, 78, 79, 77, 78, 79, 77, 84, 73, 80, 79, 95, 67, 124, 78, 79, 77, 78, 79, 77, 84, 73, 80, 79, 95, 69, 13, 10, 55, 124, 101, 100, 105, 102, 105, 99, 105, 111, 124, 101, 100, 105, 102, 105, 99, 105, 111, 46, 116, 101, 115, 116, 100, 99, 124, 101, 100, 105, 102, 105, 99, 105, 111, 46, 116, 101, 115, 116, 100, 99, 124, 101, 100, 105, 102, 105, 99, 105, 111, 46, 116, 101, 115, 116, 100, 99, 124, 101, 100, 105, 102, 105, 99, 105, 111, 46, 116, 101, 115, 116, 100, 99, 124, 101, 100, 105, 102, 105, 99, 105, 111, 124, 101, 114, 97, 105, 107, 105, 110, 13, 10, 50, 48, 50, 124, 101, 100, 105, 102, 105, 99, 105, 111, 124, 101, 100, 105, 102, 105, 99, 105, 111, 46, 116, 101, 115, 116, 100, 99, 124, 101, 100, 105, 102, 105, 99, 105, 111, 46, 116, 101, 115, 116, 100, 99, 124, 101, 100, 105, 102, 105, 99, 105, 111, 46, 116, 101, 115, 116, 100, 99, 124, 101, 100, 105, 102, 105, 99, 105, 111, 46, 116, 101, 115, 116, 100, 99, 124, 101, 100, 105, 102, 105, 99, 105, 111, 124, 101, 114, 97, 105, 107, 105, 110, 13, 10, 57, 48, 50, 124, 101, 100, 105, 102, 105, 99, 105, 111, 124, 101, 100, 105, 102, 105, 99, 105, 111, 46, 116, 101, 115, 116, 100, 99, 124, 101, 100, 105, 102, 105, 99, 105, 111, 46, 116, 101, 115, 116, 100, 99, 124, 101, 100, 105, 102, 105, 99, 105, 111, 46, 116, 101, 115, 116, 100, 99, 124, 101, 100, 105, 102, 105, 99, 105, 111, 46, 116, 101, 115, 116, 100, 99, 124, 101, 100, 105, 102, 105, 99, 105, 111, 124, 101, 114, 97, 105, 107, 105, 110, 13, 10, 49, 55, 55, 56, 124, 101, 100, 105, 102, 105, 99, 105, 111, 124, 101, 100, 105, 102, 105, 99, 105, 111, 46, 116, 101, 115, 116, 100, 99, 124, 101, 100, 105, 102, 105, 99, 105, 111, 46, 116, 101, 115, 116, 100, 99, 124, 101, 100, 105, 102, 105, 99, 105, 111, 46, 116, 101, 115, 116, 100, 99, 124, 101, 100, 105, 102, 105, 99, 105, 111, 46, 116, 101, 115, 116, 100, 99, 124, 101, 100, 105, 102, 105, 99, 105, 111, 124, 101, 114, 97, 105, 107, 105, 110]

Se que el retorno de carro es el caracter 13 y el salto de linea es el 10.
Mis pregunta son ¿Existe alguna función dentro de un paquete en el que pueda hacer el retorno de carro y el salto de linea?
Estoy usando UTL_FILE para abrir ficheros, ¿existe dentro de este paquete alguna función que me almacene temporalmente un fichero en la base de datos y luego borrarlo?.
Llevo poco programando el PLSQL y una ayudita me vendria genial.
Gracias de antemano :)
Sonic_plsql está desconectado   Responder Citando
Antiguo 10-mar-2008, 06:15   #2 (permalink)
matanga ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2007
Ubicación: Barcelona, España
Mensajes: 494
Re: Retorno De Carro, Salto De Linea En Plsql

Hola,

Cita:
¿Existe alguna función dentro de un paquete en el que pueda hacer el retorno de carro y el salto de linea?
Si entiendo bien, lo que buscas es la funcion CHR, chr(10) y chr(13) es la representacion de retorno de carro y salto de linea.

Cita:
¿existe dentro de este paquete alguna función que me almacene temporalmente un fichero en la base de datos y luego borrarlo?.
Te dejo un procedimiento que utilizo para cargar ficheros a la base de datos dentro de campos LOBs, aunque no veo claramente para que los quieres cargar. Tendras que cambiar el codigo y pasar de utilizar el package UTL_FILE al package DBMS_LOB para leer la informacion.

Código:
SQL> CREATE TABLE files (
  2  dir_name  VARCHAR2(30),
  3  file_name VARCHAR2(30),
  4  file_data BLOB)
  5  /

Tabla creada.

SQL> CREATE DIRECTORY TEMP AS 'C:\TEMP\'
  2  /

Directorio creado.

SQL>
SQL> CREATE OR REPLACE PROCEDURE load (
  2    p_dir_name  VARCHAR2,
  3    p_file_name VARCHAR2
  4  )
  5  IS
  6
  7   s_file BFILE;
  8   d_file BLOB;
  9   len BINARY_INTEGER;
 10
 11  BEGIN
 12
 13    s_file := bfilename(p_dir_name, p_file_name);
 14
 15    INSERT INTO files VALUES (p_dir_name, p_file_name, EMPTY_BLOB());
 16
 17    SELECT file_data INTO d_file
 18    FROM files
 19    WHERE dir_name = p_dir_name and file_name = p_file_name;
 20
 21    dbms_lob.fileopen(s_file, dbms_lob.file_readonly);
 22
 23    len := dbms_lob.getlength(s_file);
 24
 25    dbms_lob.loadfromfile(d_file, s_file, len);
 26
 27    UPDATE files
 28    SET file_data = d_file
 29    WHERE dir_name = p_dir_name and file_name = p_file_name;
 30
 31    dbms_lob.fileclose(s_file);
 32
 33  END;
 34  /

Procedimiento creado.

SQL> exec load('TEMP','1.txt');

Procedimiento PL/SQL terminado correctamente.

SQL>
SQL> commit;

Confirmaci¾n terminada.
Saludos
matanga está desconectado   Responder Citando
Antiguo 12-mar-2008, 04:56   #3 (permalink)
Sonic_plsql ha deshabilitado el karma
 
Fecha de Ingreso: marzo-2008
Mensajes: 4
Re: Retorno De Carro, Salto De Linea En Plsql

Matanga, muchisimas gracias por ayudarme.

Me han servido de guia tus aclaraciones.

De nuevo mil gracias ;)
Sonic_plsql está desconectado   Responder Citando
Antiguo 12-mar-2008, 05:02   #4 (permalink)
matanga ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2007
Ubicación: Barcelona, España
Mensajes: 494
Re: Retorno De Carro, Salto De Linea En Plsql

Por nada :)

Saludos
matanga está desconectado   Responder Citando
Antiguo 27-mar-2008, 11:13   #5 (permalink)
Sonic_plsql ha deshabilitado el karma
 
Fecha de Ingreso: marzo-2008
Mensajes: 4
Re: Retorno De Carro, Salto De Linea En Plsql

Esta ha sido mi solución final

DECLARE

v_file CLOB := 'IDSHP|CAMPO1|CAMPO2|CAMPO3|CAMPO4|CAMPO5|CAMPO6|C AMPO7|'||CHR(10)||CHR(13)||'1|REG1|REG2|REG3|REG4| REG5| REG6|REG7|'||CHR(10)||CHR(13);

v_texto_linea VARCHAR2(4000);
v_long INTEGER;
v_contini PLS_INTEGER;
v_initline PLS_INTEGER;
v_salto VARCHAR2(10);
v_chunk_size INTEGER := 0;
v_cont PLS_INTEGER;
v_campo_idshp VARCHAR2(32);

BEGIN

v_cont := 1;
v_contini := 0;
v_initline := 1;
v_salto :=CHR(10)||CHR(13); --salto de carro

LOOP

v_contini := DBMS_LOB.INSTR(v_file,v_salto,v_initline,1);

v_chunk_size := v_contini - v_initline;

DBMS_LOB.READ(v_file,
v_chunk_size,
v_initline,
v_texto_linea);

v_long := DBMS_LOB.GETLENGTH(v_texto_linea);

v_initline := v_contini + 2;

IF v_cont = 1 THEN

v_campo_idshp := SUBSTR(v_texto_linea, 1, INSTR(v_texto_linea, '|') - 1);
v_texto_linea := SUBSTR(v_texto_linea, INSTR(v_texto_linea, '|') + 1, LENGTH(v_texto_linea));

END IF;

dbms_output.put_line(v_campo_idshp);
dbms_output.put_line(v_texto_linea);

END LOOP;
END;

Bueno puedo ir quedandome con los nombres de campo o registros que necesite leyendo desde cada separador de campo "|", si quiero ir a que me desglose los registros tendre que meter un contador en el loop y sumando 1 (cont := cont +1).

Y me ha funcionado bien , de nuevo gracias a los que me han ayudado
Sonic_plsql está desconectado   Responder Citando
Respuesta
Calificación: Calificación de Tema: 2 votos, 4,50 de promedio.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 23:51.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93