Deprecated: Function create_function() is deprecated in
/home/nekdyruf/public_html/codi/wp-content/plugins/wp-syntax/geshi/geshi.php on line
4751
DBMS_LOB
Aquí os dejo algunos ejemplos del paquete DBMS_LOB:
–1º Ejemplo datos clob y blob (internos)
CREATE TABLE prueba
(id NUMBER,
col_clob CLOB,
col_blob BLOB,
col_bfile bfile);
DECLARE
v_blob BLOB;
BEGIN
-- Inicializa col_clob con la cadena especificada
INSERT INTO prueba(id,col_clob,col_blob,col_bfile)
VALUES (1,'abcdefghijklmnopqrstuvxyz',empty_blob(),NULL);
-- Modifica col_blob para la misma fila
UPDATE prueba
SET col_blob = Hextoraw('00FF00FF00FF')
WHERE id = 1;
END;
/ |
Create table prueba
(id number,
col_clob clob,
col_blob blob,
col_bfile bfile);
declare
v_blob blob;
begin
-- Inicializa col_clob con la cadena especificada
Insert into prueba(id,col_clob,col_blob,col_bfile)
values (1,'abcdefghijklmnopqrstuvxyz',empty_blob(),null);
-- Modifica col_blob para la misma fila
Update prueba
set col_blob = Hextoraw('00FF00FF00FF')
where id = 1;
end;
/
–2º Ejemplo : Manipulación de datos BFILE.
--Creación de un directorio
CREATE Directory DIRECTORIO AS 'C:\Ficheros' ;
GRANT READ ON directory DIRECTORIO TO public;
-- Ejemplo de inserción de objeto BFILE
-- Cuidado con las mayúsculas y con guión bajo
INSERT INTO prueba (id,col_bfile)
VALUES(2,bfilename('DIRECTORIO','empleados.txt')); |
--Creación de un directorio
Create Directory DIRECTORIO as 'C:\Ficheros' ;
grant read on directory DIRECTORIO to public;
-- Ejemplo de inserción de objeto BFILE
-- Cuidado con las mayúsculas y con guión bajo
insert into prueba (id,col_bfile)
values(2,bfilename('DIRECTORIO','empleados.txt'));
–3º Ejemplo: Función BFILEEXISTS
DECLARE
v_valor NUMBER;
v_col_bfile bfile;
BEGIN
SELECT col_bfile
INTO v_col_bfile
FROM prueba
WHERE id=2;
v_valor := dbms_lob.fileexists(v_col_bfile);
IF v_valor = 0 THEN
dbms_output.put_line('Existe');
elsif v_valor = 1 THEN
dbms_output.put_line('No Existe');
END IF;
END;
/ |
declare
v_valor number;
v_col_bfile bfile;
begin
select col_bfile
into v_col_bfile
from prueba
where id=2;
v_valor := dbms_lob.fileexists(v_col_bfile);
if v_valor = 0 then
dbms_output.put_line('Existe');
elsif v_valor = 1 then
dbms_output.put_line('No Existe');
end if;
end;
/
— 4º Ejemplo: Función FILEGETNAME
DECLARE
v_col_bfile bfile;
v_dir_alias varchar2(100);
v_fichero varchar2(100);
BEGIN
SELECT col_bfile
INTO v_col_bfile
FROM prueba
WHERE id=2;
dbms_lob.filegetname(v_col_bfile,v_dir_alias,v_fichero);
dbms_output.put_line('Directorio: '||v_dir_alias);
dbms_output.put_line('Fichero: '||v_fichero);
END;
/ |
declare
v_col_bfile bfile;
v_dir_alias varchar2(100);
v_fichero varchar2(100);
begin
select col_bfile
into v_col_bfile
from prueba
where id=2;
dbms_lob.filegetname(v_col_bfile,v_dir_alias,v_fichero);
dbms_output.put_line('Directorio: '||v_dir_alias);
dbms_output.put_line('Fichero: '||v_fichero);
end;
/
— 5º Ejemplo: Función FILEOPEN y FILECLOSE
-- (Abrir y Cerrar un BFILE) Similar a UTL_FILE
DECLARE
v_col_bfile bfile;
BEGIN
v_col_bfile := bfilename('DIRECTORIO','empleados.txt');
dbms_lob.fileopen(v_col_bfile);
dbms_output.put_line('Abriendo fichero');
dbms_lob.fileclose(v_col_bfile);
dbms_output.put_line('Fichero cerrado');
END;
/
-- Si la columna clob está vacía no funciona. Se requiere el for update
INSERT INTO prueba (id,col_bfile,col_clob)
VALUES(2,bfilename('DIRECTORIO','empleados.txt'),empty_clob()); |
-- (Abrir y Cerrar un BFILE) Similar a UTL_FILE
declare
v_col_bfile bfile;
begin
v_col_bfile := bfilename('DIRECTORIO','empleados.txt');
dbms_lob.fileopen(v_col_bfile);
dbms_output.put_line('Abriendo fichero');
dbms_lob.fileclose(v_col_bfile);
dbms_output.put_line('Fichero cerrado');
end;
/
-- Si la columna clob está vacía no funciona. Se requiere el for update
insert into prueba (id,col_bfile,col_clob)
values(2,bfilename('DIRECTORIO','empleados.txt'),empty_clob());
–6º Ejemplo: Función LOADFROMFILE y GETLENGTH
DECLARE
v_col_bfile bfile;
v_dest_lob CLOB;
BEGIN
SELECT col_clob
INTO v_dest_lob
FROM prueba
WHERE id=2 FOR UPDATE;
v_col_bfile := bfilename('DIRECTORIO','empleados.txt');
dbms_lob.fileopen(v_col_bfile);
dbms_lob.loadfromfile(v_dest_lob,v_col_bfile,dbms_lob.getlength(v_col_bfile));
UPDATE prueba
SET col_clob = v_dest_lob
WHERE id = 2;
commit;
dbms_lob.fileclose(v_col_bfile);
END;
/
-- Ver en SQL-PLUS el Clob
SELECT col_clob FROM prueba
WHERE id = 6; |
declare
v_col_bfile bfile;
v_dest_lob clob;
begin
select col_clob
into v_dest_lob
from prueba
where id=2 for update;
v_col_bfile := bfilename('DIRECTORIO','empleados.txt');
dbms_lob.fileopen(v_col_bfile);
dbms_lob.loadfromfile(v_dest_lob,v_col_bfile,dbms_lob.getlength(v_col_bfile));
update prueba
set col_clob = v_dest_lob
where id = 2;
commit;
dbms_lob.fileclose(v_col_bfile);
end;
/
-- Ver en SQL-PLUS el Clob
select col_clob from prueba
where id = 6;
— 7º Ejemplo: Función COMPARE
-- Primero Copiamos fichero anterior en S.O. (fichero_copia)
DECLARE
v_valor NUMBER;
v_col_bfile bfile;
v_col_bfile_bis bfile;
BEGIN
v_col_bfile := bfilename('DIRECTORIO','Fichero.txt');
v_col_bfile_bis := bfilename('DIRECTORIO','Fichero_copia.txt');
dbms_lob.fileopen(v_col_bfile);
dbms_lob.fileopen(v_col_bfile_bis);
v_valor:= dbms_lob.compare(v_col_bfile,v_col_bfile_bis,25);
dbms_lob.fileclose(v_col_bfile_bis);
dbms_lob.fileclose(v_col_bfile);
IF v_valor = 0 THEN
dbms_output.put_line('ficheros Iguales');
ELSE
dbms_output.put_line('Ficheros Diferentes');
END IF;
END;
/ |
-- Primero Copiamos fichero anterior en S.O. (fichero_copia)
declare
v_valor number;
v_col_bfile bfile;
v_col_bfile_bis bfile;
begin
v_col_bfile := bfilename('DIRECTORIO','Fichero.txt');
v_col_bfile_bis := bfilename('DIRECTORIO','Fichero_copia.txt');
dbms_lob.fileopen(v_col_bfile);
dbms_lob.fileopen(v_col_bfile_bis);
v_valor:= dbms_lob.compare(v_col_bfile,v_col_bfile_bis,25);
dbms_lob.fileclose(v_col_bfile_bis);
dbms_lob.fileclose(v_col_bfile);
If v_valor = 0 then
dbms_output.put_line('ficheros Iguales');
else
dbms_output.put_line('Ficheros Diferentes');
End If;
end;
/
–8º Ejemplo Función READ simple
DECLARE
v_dest_lob CLOB;
v_contenido varchar2(1000);
v_longitud INTEGER:=20; -- longitud de linea
v_pos INTEGER:=1;
BEGIN
SELECT col_clob
INTO v_dest_lob
FROM prueba
WHERE id=6 FOR UPDATE;
-- Lee y muestra los primeros v_longitud caracteres a partir de la posicion v_pos
dbms_lob.read(v_dest_lob,v_longitud,v_pos,v_contenido);
dbms_output.put_line('Contenido:'||v_contenido);
exception
WHEN no_data_found THEN
NULL;
END;
/ |
declare
v_dest_lob clob;
v_contenido varchar2(1000);
v_longitud integer:=20; -- longitud de linea
v_pos integer:=1;
begin
select col_clob
into v_dest_lob
from prueba
where id=6 for update;
-- Lee y muestra los primeros v_longitud caracteres a partir de la posicion v_pos
dbms_lob.read(v_dest_lob,v_longitud,v_pos,v_contenido);
dbms_output.put_line('Contenido:'||v_contenido);
exception
when no_data_found then
null;
end;
/
–9º Ejemplo Función READ con bucle
DECLARE
v_dest_lob CLOB;
v_contenido varchar2(1000);
v_longitud INTEGER:=20; -- longitud de linea
v_pos INTEGER:=1;
BEGIN
SELECT col_clob
INTO v_dest_lob
FROM prueba
WHERE id=4 FOR UPDATE;
loop
-- Lee y muestra los primeros v_longitud caracteres a partir de la posicion v_pos
dbms_lob.read(v_dest_lob,v_longitud,v_pos,v_contenido);
dbms_output.put_line('Contenido:'||v_contenido);
v_pos := v_pos + v_longitud;
END loop;
exception
WHEN no_data_found THEN
NULL;
END;
/ |
declare
v_dest_lob clob;
v_contenido varchar2(1000);
v_longitud integer:=20; -- longitud de linea
v_pos integer:=1;
begin
select col_clob
into v_dest_lob
from prueba
where id=4 for update;
loop
-- Lee y muestra los primeros v_longitud caracteres a partir de la posicion v_pos
dbms_lob.read(v_dest_lob,v_longitud,v_pos,v_contenido);
dbms_output.put_line('Contenido:'||v_contenido);
v_pos := v_pos + v_longitud;
end loop;
exception
when no_data_found then
null;
end;
/
— 10º Ejemplo WRITE
DECLARE
v_dest_lob CLOB;
v_contenido varchar2(19):='Hola ¿Como estamos?';
v_pos NUMBER:=1;
BEGIN
SELECT col_clob
INTO v_dest_lob
FROM prueba
WHERE id=4 FOR UPDATE;
dbms_lob.write(v_dest_lob,19,v_pos,v_contenido);
END;
/ |
declare
v_dest_lob clob;
v_contenido varchar2(19):='Hola ¿Como estamos?';
v_pos number:=1;
begin
select col_clob
into v_dest_lob
from prueba
where id=4 for update;
dbms_lob.write(v_dest_lob,19,v_pos,v_contenido);
end;
/
— 11º Ejemplo SUBSTR
DECLARE
v_dest_lob CLOB;
v_contenido varchar2(20);
v_longitud NUMBER:=20;
v_pos NUMBER:=1;
BEGIN
SELECT col_clob
INTO v_dest_lob
FROM prueba
WHERE id=6 FOR UPDATE;
-- Lee y muestra los primeros v_longitud caracteres a partir de la posicion v_pos
v_contenido := dbms_lob.substr(v_dest_lob,v_longitud,v_pos);
dbms_output.put_line('Contenido:'||v_contenido);
END;
/ |
declare
v_dest_lob clob;
v_contenido varchar2(20);
v_longitud number:=20;
v_pos number:=1;
begin
select col_clob
into v_dest_lob
from prueba
where id=6 for update;
-- Lee y muestra los primeros v_longitud caracteres a partir de la posicion v_pos
v_contenido := dbms_lob.substr(v_dest_lob,v_longitud,v_pos);
dbms_output.put_line('Contenido:'||v_contenido);
end;
/
— 12º Ejemplo APPEND
-- Abrimos fichero nuevo llamado fichero_prueba e insertamos reg nuevo
INSERT INTO prueba (id,col_clob)
VALUES(9,empty_clob());
-- Lo insertamos en la columna LOB mediante ejemplo 6
-- Añadimos el contenido del 6 al 9
DECLARE
v_lob CLOB;
v_lob_bis CLOB;
BEGIN
SELECT col_clob
INTO v_lob
FROM prueba
WHERE id=6 FOR UPDATE;
SELECT col_clob
INTO v_lob_bis
FROM prueba
WHERE id=9 FOR UPDATE;
-- Añade el contenido del CLOB v_lob (6) al v_lob_bis(9)
dbms_lob.append(v_lob_bis,v_lob);
END;
/ |
-- Abrimos fichero nuevo llamado fichero_prueba e insertamos reg nuevo
insert into prueba (id,col_clob)
values(9,empty_clob());
-- Lo insertamos en la columna LOB mediante ejemplo 6
-- Añadimos el contenido del 6 al 9
declare
v_lob clob;
v_lob_bis clob;
begin
select col_clob
into v_lob
from prueba
where id=6 for update;
select col_clob
into v_lob_bis
from prueba
where id=9 for update;
-- Añade el contenido del CLOB v_lob (6) al v_lob_bis(9)
dbms_lob.append(v_lob_bis,v_lob);
end;
/
— 13º Ejemplo COPY
DECLARE
v_lob CLOB;
v_lob_bis CLOB;
v_tamano NUMBER:= 20;
BEGIN
SELECT col_clob
INTO v_lob
FROM prueba
WHERE id=6 FOR UPDATE;
SELECT col_clob
INTO v_lob_bis
FROM prueba
WHERE id=10 FOR UPDATE;
-- Añade el contenido del CLOB v_lob (6) al v_lob_bis(10) los
-- primeros v_tamano caracteres
dbms_lob.copy(v_lob_bis,v_lob,v_tamano);
END;
/ |
declare
v_lob clob;
v_lob_bis clob;
v_tamano number:= 20;
begin
select col_clob
into v_lob
from prueba
where id=6 for update;
select col_clob
into v_lob_bis
from prueba
where id=10 for update;
-- Añade el contenido del CLOB v_lob (6) al v_lob_bis(10) los
-- primeros v_tamano caracteres
dbms_lob.copy(v_lob_bis,v_lob,v_tamano);
end;
/
— 14º Ejemplo ERASE
DECLARE
v_lob CLOB;
v_tamano NUMBER:= 5; -- Borramos unas lineas
-- v_tamano_todo number:= 50; -- Borramos todo
BEGIN
SELECT col_clob
INTO v_lob
FROM prueba
WHERE id=10 FOR UPDATE;
-- Borra los primeros v_tamano caracteres del CLOB de 10
dbms_lob.erase(v_lob,v_tamano);
-- Borra todo el CLOB
-- dbms_lob.erase(v_lob,v_tamano_todo);
END;
/ |
declare
v_lob clob;
v_tamano number:= 5; -- Borramos unas lineas
-- v_tamano_todo number:= 50; -- Borramos todo
begin
select col_clob
into v_lob
from prueba
where id=10 for update;
-- Borra los primeros v_tamano caracteres del CLOB de 10
dbms_lob.erase(v_lob,v_tamano);
-- Borra todo el CLOB
-- dbms_lob.erase(v_lob,v_tamano_todo);
end;
/
DBMS_LOB ORACLE