Oracle - error ora 22275 numérico o de valor

 
Vista:

error ora 22275 numérico o de valor

Publicado por pamela (1 intervención) el 07/11/2016 07:22:39
hola buenas noches tengo este programa y cuando lo ejecute me marca un error

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
create or replace procedure load_blob_from_file (
v_directory_name	in varchar2,
v_src_file_name		in varchar2,
v_table_name		in varchar2,
v_blob_column_name	in varchar2,
v_pk_column_name	in varchar2,
v_pk_column_value	in varchar2
) is
--variables
v_src_blob bfile:=bfilename(v_directory_name,v_src_file_name);
v_dest_blob blob;
v_query varchar2(2000);
v_src_offset number := 1;
v_dest_offset number := 1;
v_src_blob_size number;
begin
--abre el archivo
if dbms_lob.fileexists(v_src_blob)=1 and not
	dbms_lob.isopen(v_src_blob)=1 then
	v_src_blob_size := dbms_lob.getlength(v_src_blob);
	dbms_lob.open(v_src_blob,dbms_lob.LOB_READONLY);
else
	dbms_output.put_line(v_src_file_name ||' does not exist or it is open');
end if;
--creación de la sentencia sql dinámica
v_query := 'update '||v_table_name||' set '||v_blob_column_name
	||'= empty_blob() where '||v_pk_column_name||'='''||v_pk_column_value
	||''' returning '||v_blob_column_name||' into :locator';
dbms_output.put_line(v_query);
--ejecuta el query dinámico
execute immediate v_query using out v_dest_blob;
--lee el archivo y escribe en el blob
dbms_lob.loadblobfromfile(
	dest_lob	=> v_dest_blob,
	src_bfile	=> v_src_blob,
	amount		=> dbms_lob.getlength(v_src_blob),
	dest_offset	=> v_dest_offset,
	src_offset	=> v_src_offset
);
--cerrando blob
dbms_lob.close(v_src_blob);
--commit
if v_src_blob_size = dbms_lob.getlength(v_dest_blob) then
	commit;
	dbms_output.put_line('done '|| v_src_blob_size || ' bytes.' );
else
	dbms_output.put_line('blob creation failed.');
	raise dbms_lob.operation_failed;
end if;
end load_blob_from_file;
/


error ORA-06502: PL/SQL: error: invalid LOB locator specified: ORA-22275 numerico o de valor
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 499
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

error ora 22275 numérico o de valor

Publicado por Rafael (328 intervenciones) el 08/11/2016 11:57:24
Intentalo asi:

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
create or replace procedure load_blob_from_file (
	v_directory_name	in varchar2,
	v_src_file_name		in varchar2,
	v_table_name		in varchar2,
	v_blob_column_name	in varchar2,
	v_pk_column_name	in varchar2,
	v_pk_column_value	in varchar2
) is
	--variables
	v_src_blob bfile:=bfilename(v_directory_name,v_src_file_name);
	v_dest_blob blob;
	v_query varchar2(2000);
	v_src_offset number := 1;
	v_dest_offset number := 1;
	v_src_blob_size number;
begin
	DBMS_LOB.CREATETEMPORARY(v_dest_blob,true);
 
	if dbms_lob.fileexists(v_src_blob)=1 and not
		dbms_lob.isopen(v_src_blob)=1 then
		v_src_blob_size := dbms_lob.getlength(v_src_blob);
		dbms_lob.open(v_src_blob,dbms_lob.LOB_READONLY);
	else
		dbms_output.put_line(v_src_file_name ||' does not exist or it is open');
	end if;
 
	--creación de la sentencia sql dinámica
	v_query := 'update '||v_table_name||' set '||v_blob_column_name
				||'= empty_blob() where '||v_pk_column_name||'='''||v_pk_column_value
				||''' returning '||v_blob_column_name||' into :locator';
	dbms_output.put_line(v_query);
 
	--ejecuta el query dinámico
	execute immediate v_query using out v_dest_blob;
 
	--lee el archivo y escribe en el blob
	dbms_lob.loadblobfromfile(
		dest_lob	=> v_dest_blob,
		src_bfile	=> v_src_blob,
		amount		=> dbms_lob.getlength(v_src_blob),
		dest_offset	=> v_dest_offset,
		src_offset	=> v_src_offset
	);
 
	--cerrando blob
	dbms_lob.close(v_src_blob);
 
	--commit
	if v_src_blob_size = dbms_lob.getlength(v_dest_blob) then
		commit;
		dbms_output.put_line('done '|| v_src_blob_size || ' bytes.' );
	else
		dbms_output.put_line('blob creation failed.');
		raise dbms_lob.operation_failed;
	end if;
end load_blob_from_file;
/

OJO con esto:
DBMS_LOB.CREATETEMPORARY(v_dest_blob,true);

Si no lo creas no hay donde recibir los datos...

Saludos
Pd. Si la info te sirve a mi me sirve un +1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar