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

Retorno De Carro, Salto De Linea En Plsql

Estas en el tema de Retorno De Carro, Salto De Linea En Plsql en el foro de Oracle en Foros del Web. Hola!! Soy nuevo en este foro y tengo un problema con un plsql, a ver si alguien sabe darme una idea :) Me estan pasando ...
  #1 (permalink)  
Antiguo 10/03/2008, 05:22
 
Fecha de Ingreso: marzo-2008
Mensajes: 7
Antigüedad: 16 años, 1 mes
Puntos: 0
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 :)
  #2 (permalink)  
Antiguo 10/03/2008, 06:15
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
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
  #3 (permalink)  
Antiguo 12/03/2008, 04:56
 
Fecha de Ingreso: marzo-2008
Mensajes: 7
Antigüedad: 16 años, 1 mes
Puntos: 0
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 ;)
  #4 (permalink)  
Antiguo 12/03/2008, 05:02
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Re: Retorno De Carro, Salto De Linea En Plsql

Por nada :)

Saludos
  #5 (permalink)  
Antiguo 27/03/2008, 11:13
 
Fecha de Ingreso: marzo-2008
Mensajes: 7
Antigüedad: 16 años, 1 mes
Puntos: 0
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
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

SíEste tema le ha gustado a 2 personas (incluyéndote)




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