tema enviado por Ignatius en SQL
tema iniciado el 16/12/2008
Te un paquete en el que trato 3 excepciones, el caos es que me dice q no las tengo definidas y lo he hecho no entiendo por que es. Os adjunto el pl
CREATE OR REPLACE PACKAGE BODY Pck_Clientes_Lopd_005 IS
PROCEDURE prc_act_datos_personales_lopd IS
Campo varchar2(30);
A NUMBER;
B NUMBER;
NoexisteTabla EXCEPTION;
NoexisteCampo EXCEPTION;
HayError BOOLEAN;
TYPE arr_number IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
v_id_cliente arr_number;
v_data_type all_tab_columns.data_type%TYPE;
v_data_length all_tab_columns.data_length%TYPE;
v_data_precision all_tab_columns.data_precision%TYPE;
lv_query VARCHAR2(2000);
lv_query_where VARCHAR2(1000) := 'WHERE';
nuevo_filtro VARCHAR2(1000);
nuevo_filtro_aux VARCHAR2(1000);
pos_almohadilla NUMBER;
pos_almohadilla1 NUMBER;
longitud NUMBER;
campo_nombre VARCHAR2(60);
aux VARCHAR2(60);
v_id_error NUMBER(4);
err_msg VARCHAR2(200);
filtro_nombre VARCHAR2(1);
prueba VARCHAR2(1);
PROCEDURE carga_tabla_clientes IS
BEGIN
-- Cargamos los clientes de borra bravo
/* INSERT INTO LOPD_CLIENTES(ID_CLIENTE,SW_PASADO)
(SELECT ID_CLIENTE,'N' FROM JBRAVO.CLIE_CLIENTES_HIS_DELETE@K570_PRODU
MINUS
SELECT ID_CLIENTE,'N' FROM LOPD_CLIENTES);*/
-- Recogemos los datos necesarios de clie_clientes_dw
FOR clientes IN (SELECT DISTINCT(id_cliente) id_cliente
FROM LOPD_CLIENTES
WHERE sw_pasado <> 'S') LOOP
FOR clientes2 IN (SELECT ccd.id_cliente cliente,
ccd.nombre nombre,
ccd.primer_apellido primer_apellido,
ccd.segundo_apellido seg_apellido,
ccd.numero_doc_acred num_acred
FROM CLIE_CLIENTES_DW ccd
WHERE ccd.id_cliente = clientes.id_cliente) LOOP
UPDATE LOPD_CLIENTES
SET nombre = clientes2.nombre,
primer_apellido = clientes2.primer_apellido,
segundo_apellido = clientes2.seg_apellido,
numero_doc_acred = clientes2.num_acred
WHERE id_cliente = clientes2.cliente;
ww_cont_actualizados := ww_cont_actualizados + SQL%ROWCOUNT;
COMMIT;
END LOOP;
END LOOP;
END carga_tabla_clientes;
PROCEDURE actualizar_lopd_clientes IS
BEGIN
UPDATE LOPD_CLIENTES
SET nombre = NULL,
primer_apellido = NULL,
segundo_apellido = NULL,
numero_doc_acred = NULL,
sw_pasado='S';
END actualizar_lopd_clientes;
BEGIN
--Inicio proceso log
ww_id_proceso_batch := 779;
ww_num_paso := 1;
Prc_Dwge0025('S',ww_id_proceso_batch,ww_num_paso,ww_cont_leidos,ww_cont_escritos,ww_cont_borrados,ww_cont_actualizados,v_sqlerrm);
-- Leer y cargar datos Clientes
carga_tabla_clientes;
FOR cursor_clientes_lopd IN (SELECT id_cliente,
nombre,
primer_apellido,
segundo_apellido,
numero_doc_acred,
sw_pasado,
f_solicitud
FROM LOPD_CLIENTES) LOOP
/* FOR cursor_clientes_tabla IN ( SELECT T1.id_tabla,
T1.tabla,
T1.filtro,
T2.owner
FROM LOPD_CLIENTES_TABLAS T1,
all_tables T2
where id_tabla not in (25,26) and
T1.tabla = T2.Table_name(+)) LOOP */
IF cursor_clientes_lopd.sw_pasado = 'S' THEN
FOR cursor_clientes_tabla IN
(SELECT id_tabla,
tabla,
filtro,
owner
FROM LOPD_CLIENTES_TABLAS
WHERE id_tabla NOT IN (25,26)) LOOP
SELECT COUNT(*)INTO A
FROM ALL_TABLES
WHERE TABLE_NAME=cursor_clientes_tabla.tabla
AND OWNER= cursor_clientes_tabla.owner;
-- Si no existen datos
IF A = 0
THEN RAISE NoexisteTabla;
END IF;
--Inicializamos la query para el siguiente cliente
lv_query := NULL;
lv_query := lv_query || ' UPDATE ';
lv_query := lv_query || cursor_clientes_tabla.tabla || ' A SET ';
lv_query_where := ' WHERE ';
FOR cursor_clientes_campos IN (SELECT nombre_campo,
valor_campo,
sw_fijo
FROM LOPD_CLIENTES_CAMPOS_TABLA
WHERE id_tabla = cursor_clientes_tabla.id_tabla) LOOP
campo := cursor_clientes_campos.nombre_campo;
SELECT COUNT(*) INTO B
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME=cursor_clientes_tabla.tabla
AND COLUMN_NAME= cursor_clientes_campos.nombre_campo
AND OWNER= cursor_clientes_tabla.owner;
-- Si no existen datos
IF B = 0
THEN RAISE NoexisteCampo;
END IF;
IF (cursor_clientes_campos.sw_fijo = 'S') THEN
IF(cursor_clientes_campos.valor_campo = 'NULO') THEN
lv_query := lv_query || cursor_clientes_campos.nombre_campo || ' = NULL,';
ELSIF(cursor_clientes_campos.valor_campo = 'DOCUMENTO') THEN
lv_query := lv_query || cursor_clientes_campos.nombre_campo || '= ''LOPD-' || cursor_clientes_lopd.id_cliente || ''',';
ELSIF (cursor_clientes_campos.valor_campo= 'FECHA') THEN
lv_query := lv_query || cursor_clientes_campos.nombre_campo || '= TO_DATE(''01/01/''||TO_CHAR(A.'||cursor_clientes_campos.nombre_campo||',''YYYY''),''DD/MM/YYYY'')'|| ' ,';
--lv_query := lv_query || cursor_clientes_campos.nombre_campo || '= ''01/01/''||TO_CHAR(A.'||cursor_clientes_campos.nombre_campo||',''YYYY'')'|| ' ,';
ELSE
lv_query := lv_query || cursor_clientes_campos.nombre_campo || '=' || cursor_clientes_campos.valor_campo || ',';
END IF;
ELSE -- sw_fijo = N
SELECT data_type,
data_length,
data_precision
INTO v_data_type,
v_data_length,
v_data_precision
FROM all_tab_columns
WHERE table_name = cursor_clientes_tabla.tabla
AND column_name = cursor_clientes_campos.nombre_campo;
IF (cursor_clientes_campos.valor_campo = 'NULO') THEN
aux := 'NULL';
ELSIF (cursor_clientes_campos.valor_campo = 'DOCUMENTO') THEN
aux := 'LOPD-' || cursor_clientes_lopd.id_cliente||'''';
ELSE
aux := cursor_clientes_campos.valor_campo;
END IF;
IF v_data_type = 'VARCHAR2' THEN
FOR i IN 1..v_data_length-1 LOOP
cursor_clientes_campos.valor_campo := cursor_clientes_campos.valor_campo || aux;
END LOOP;
lv_query := lv_query ||cursor_clientes_campos.nombre_campo || ' = ''' || cursor_clientes_campos.valor_campo || ''',';
ELSIF v_data_type = 'NUMBER' THEN
FOR i IN 1..v_data_precision - 1 LOOP
cursor_clientes_campos.valor_campo := cursor_clientes_campos.valor_campo || aux;
END LOOP;
lv_query := lv_query ||cursor_clientes_campos.nombre_campo || ' = ' || cursor_clientes_campos.valor_campo || ',';
ELSE -- el tipo no es ni varchar ni number
lv_query := lv_query ||cursor_clientes_campos.nombre_campo || ' = ' || cursor_clientes_campos.valor_campo || ',';
END IF;
END IF;
END LOOP;
-- Modificamos la variable lv_query para eliminar la última coma
longitud := LENGTH(lv_query);
lv_query := SUBSTR(lv_query,1,longitud-1);
-- Añadimos la parte del filtro
lv_query := lv_query || lv_query_where;
nuevo_filtro_aux := cursor_clientes_tabla.filtro;
filtro_nombre:='';
FOR i IN 1..5 LOOP
pos_almohadilla := INSTR(nuevo_filtro_aux,'#@');
pos_almohadilla1:= INSTR(nuevo_filtro_aux,'@#');
campo_nombre:=SUBSTR(nuevo_filtro_aux,pos_almohadilla+2,pos_almohadilla1-pos_almohadilla-2);
IF (campo_nombre='ID_CLIENTE') THEN -- Modificamos el campo id_cliente
longitud := pos_almohadilla + LENGTH(cursor_clientes_lopd.id_cliente);
nuevo_filtro_aux := SUBSTR(nuevo_filtro_aux,1,pos_almohadilla-1)
||''''|| cursor_clientes_lopd.id_cliente ||''''
|| SUBSTR(cursor_clientes_tabla.filtro,pos_almohadilla1+2,LENGTH(cursor_clientes_tabla.filtro));
ELSIF (campo_nombre='NOMBRE') THEN -- Modificamos el campo nombre
filtro_nombre:='S';
longitud := pos_almohadilla + LENGTH(cursor_clientes_lopd.nombre);
nuevo_filtro_aux := SUBSTR(nuevo_filtro_aux,1,pos_almohadilla-1)
||''''|| cursor_clientes_lopd.nombre ||''''
|| SUBSTR(cursor_clientes_tabla.filtro,pos_almohadilla1+2,LENGTH(cursor_clientes_tabla.filtro));
ELSIF (campo_nombre='PRIMER_APELLIDO') THEN -- Modificamos el campo primer_apellido
longitud := pos_almohadilla + LENGTH(cursor_clientes_lopd.primer_apellido);
nuevo_filtro_aux := SUBSTR(nuevo_filtro_aux,1,pos_almohadilla-1)
||''''|| cursor_clientes_lopd.primer_apellido ||''''
|| SUBSTR(nuevo_filtro_aux,pos_almohadilla1+2,LENGTH(cursor_clientes_tabla.filtro));
ELSIF (campo_nombre='SEGUNDO_APELLIDO') THEN -- Modificamos el campo segundo_apellido
longitud := pos_almohadilla + LENGTH(cursor_clientes_lopd.segundo_apellido);
nuevo_filtro_aux := SUBSTR(nuevo_filtro_aux,1,pos_almohadilla-1)
||''''|| cursor_clientes_lopd.segundo_apellido ||''''
|| SUBSTR(nuevo_filtro_aux,pos_almohadilla1+2,LENGTH(cursor_clientes_tabla.filtro));
ELSIF (campo_nombre='NUMERO_DOC_ACRED') THEN-- Modificamos el campo numero_doc_acred
longitud := pos_almohadilla + LENGTH(cursor_clientes_lopd.numero_doc_acred);
nuevo_filtro_aux := SUBSTR(nuevo_filtro_aux,1,pos_almohadilla-1)
||''''|| cursor_clientes_lopd.numero_doc_acred ||''''
|| SUBSTR(nuevo_filtro_aux,pos_almohadilla1+2,LENGTH(cursor_clientes_tabla.filtro));
END IF;
END LOOP;
lv_query := lv_query || nuevo_filtro_aux ;
BEGIN
--DBMS_OUTPUT.PUT_LINE ('Inicio: '||TO_CHAR(SYSDATE,'YYYYMMDD HH24:MI:SS'));
prueba:= SUBSTR(cursor_clientes_lopd.nombre,1,1);
IF (filtro_nombre='S' AND prueba ='*' ) THEN
DBMS_OUTPUT.PUT_LINE ('No se actualiza por filtro ***');
ELSE
EXECUTE IMMEDIATE lv_query;
END IF;
EXECUTE IMMEDIATE lv_query;
--DBMS_OUTPUT.PUT_LINE ('Final: '||TO_CHAR(SYSDATE,'YYYYMMDD HH24:MI:SS'));
COMMIT;
EXCEPTION
WHEN NoexisteTabla THEN
HayError := true;
-- Generamos nuevo valor para id_error
SELECT LOPD_CLIENTES_ERRORES_SQ.NEXTVAL
INTO v_id_error
FROM dual;
err_msg := 'NO EXISTE LA TABLA ';
-- Insertamos nuevo registro en la tabla lopd_clientes_errores
INSERT INTO LOPD_CLIENTES_ERRORES
VALUES (v_id_error,--IRIA VALOR DE SECUENCIA
cursor_clientes_lopd.id_cliente,
cursor_clientes_tabla.tabla,
err_msg,
SYSDATE);
COMMIT;
WHEN NoexisteCampo THEN
HayError := true;
-- Generamos nuevo valor para id_error
SELECT LOPD_CLIENTES_ERRORES_SQ.NEXTVAL
INTO v_id_error
FROM dual;
err_msg := 'NO EXISTE EL CAMPO ' ||
campo ||
' EN LA TABLA';
-- Insertamos nuevo registro en la tabla lopd_clientes_errores
INSERT INTO LOPD_CLIENTES_ERRORES
VALUES (v_id_error,--IRIA VALOR DE SECUENCIA
cursor_clientes_lopd.id_cliente,
cursor_clientes_tabla.tabla,
err_msg,
SYSDATE);
COMMIT;
WHEN OTHERS THEN
HayError := true;
--err_msg := SUBSTR(SQLERRM, 1, 200);
ROLLBACK;
-- Generamos nuevo valor para id_error
SELECT LOPD_CLIENTES_ERRORES_SQ.NEXTVAL
INTO v_id_error
FROM dual;
--err_code := SQLCODE;
err_msg := SUBSTR(SQLERRM, 1, 200);
-- Insertamos nuevo registro en la tabla lopd_clientes_errores
INSERT INTO LOPD_CLIENTES_ERRORES
VALUES (v_id_error,--IRIA VALOR DE SECUENCIA
cursor_clientes_lopd.id_cliente,
cursor_clientes_tabla.tabla,
err_msg,
SYSDATE);
COMMIT;
END;
END LOOP;
END IF;
IF cursor_clientes_lopd.sw_pasado = 'S' THEN
FOR cursor_clientes_tabla IN
(SELECT id_tabla,
tabla,
filtro,
owner
FROM LOPD_CLIENTES_TABLAS
WHERE id_tabla NOT IN (25,26)
AND f_alta_tabla > cursor_clientes_lopd.f_solicitud) LOOP
SELECT COUNT(*)INTO A
FROM ALL_TABLES
WHERE TABLE_NAME=cursor_clientes_tabla.tabla
AND OWNER= cursor_clientes_tabla.owner;
-- Si no existen datos
IF A = 0
THEN RAISE NoexisteTabla;
END IF;
--Inicializamos la query para el siguiente cliente
lv_query := NULL;
lv_query := lv_query || ' UPDATE ';
lv_query := lv_query || cursor_clientes_tabla.tabla || ' A SET ';
lv_query_where := ' WHERE ';
FOR cursor_clientes_campos IN (SELECT nombre_campo,
valor_campo,
sw_fijo
FROM LOPD_CLIENTES_CAMPOS_TABLA
WHERE id_tabla = cursor_clientes_tabla.id_tabla) LOOP
campo := cursor_clientes_campos.nombre_campo;
SELECT COUNT(*) INTO B
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME=cursor_clientes_tabla.tabla
AND COLUMN_NAME= cursor_clientes_campos.nombre_campo
AND OWNER= cursor_clientes_tabla.owner;
-- Si no existen datos
IF B = 0
THEN RAISE NoexisteCampo;
END IF;
IF (cursor_clientes_campos.sw_fijo = 'S') THEN
IF(cursor_clientes_campos.valor_campo = 'NULO') THEN
lv_query := lv_query || cursor_clientes_campos.nombre_campo || ' = NULL,';
ELSIF(cursor_clientes_campos.valor_campo = 'DOCUMENTO') THEN
lv_query := lv_query || cursor_clientes_campos.nombre_campo || '= ''LOPD-' || cursor_clientes_lopd.id_cliente || ''',';
ELSIF (cursor_clientes_campos.valor_campo= 'FECHA') THEN
lv_query := lv_query || cursor_clientes_campos.nombre_campo || '= TO_DATE(''01/01/''||TO_CHAR(A.'||cursor_clientes_campos.nombre_campo||',''YYYY''),''DD/MM/YYYY'')'|| ' ,';
--lv_query := lv_query || cursor_clientes_campos.nombre_campo || '= ''01/01/''||TO_CHAR(A.'||cursor_clientes_campos.nombre_campo||',''YYYY'')'|| ' ,';
ELSE
lv_query := lv_query || cursor_clientes_campos.nombre_campo || '=' || cursor_clientes_campos.valor_campo || ',';
END IF;
ELSE -- sw_fijo = N
SELECT data_type,
data_length,
data_precision
INTO v_data_type,
v_data_length,
v_data_precision
FROM all_tab_columns
WHERE table_name = cursor_clientes_tabla.tabla
AND column_name = cursor_clientes_campos.nombre_campo;
IF (cursor_clientes_campos.valor_campo = 'NULO') THEN
aux := 'NULL';
ELSIF (cursor_clientes_campos.valor_campo = 'DOCUMENTO') THEN
aux := 'LOPD-' || cursor_clientes_lopd.id_cliente||'''';
ELSE
aux := cursor_clientes_campos.valor_campo;
END IF;
IF v_data_type = 'VARCHAR2' THEN
FOR i IN 1..v_data_length-1 LOOP
cursor_clientes_campos.valor_campo := cursor_clientes_campos.valor_campo || aux;
END LOOP;
lv_query := lv_query ||cursor_clientes_campos.nombre_campo || ' = ''' || cursor_clientes_campos.valor_campo || ''',';
ELSIF v_data_type = 'NUMBER' THEN
FOR i IN 1..v_data_precision - 1 LOOP
cursor_clientes_campos.valor_campo := cursor_clientes_campos.valor_campo || aux;
END LOOP;
lv_query := lv_query ||cursor_clientes_campos.nombre_campo || ' = ' || cursor_clientes_campos.valor_campo || ',';
ELSE -- el tipo no es ni varchar ni number
lv_query := lv_query ||cursor_clientes_campos.nombre_campo || ' = ' || cursor_clientes_campos.valor_campo || ',';
END IF;
END IF;
END LOOP;
-- Modificamos la variable lv_query para eliminar la última coma
longitud := LENGTH(lv_query);
lv_query := SUBSTR(lv_query,1,longitud-1);
-- Añadimos la parte del filtro
lv_query := lv_query || lv_query_where;
nuevo_filtro_aux := cursor_clientes_tabla.filtro;
filtro_nombre:='';
FOR i IN 1..5 LOOP
pos_almohadilla := INSTR(nuevo_filtro_aux,'#@');
pos_almohadilla1:= INSTR(nuevo_filtro_aux,'@#');
campo_nombre:=SUBSTR(nuevo_filtro_aux,pos_almohadilla+2,pos_almohadilla1-pos_almohadilla-2);
IF (campo_nombre='ID_CLIENTE') THEN -- Modificamos el campo id_cliente
longitud := pos_almohadilla + LENGTH(cursor_clientes_lopd.id_cliente);
nuevo_filtro_aux := SUBSTR(nuevo_filtro_aux,1,pos_almohadilla-1)
||''''|| cursor_clientes_lopd.id_cliente ||''''
|| SUBSTR(cursor_clientes_tabla.filtro,pos_almohadilla1+2,LENGTH(cursor_clientes_tabla.filtro));
ELSIF (campo_nombre='NOMBRE') THEN -- Modificamos el campo nombre
filtro_nombre:='S';
longitud := pos_almohadilla + LENGTH(cursor_clientes_lopd.nombre);
nuevo_filtro_aux := SUBSTR(nuevo_filtro_aux,1,pos_almohadilla-1)
||''''|| cursor_clientes_lopd.nombre ||''''
|| SUBSTR(cursor_clientes_tabla.filtro,pos_almohadilla1+2,LENGTH(cursor_clientes_tabla.filtro));
ELSIF (campo_nombre='PRIMER_APELLIDO') THEN -- Modificamos el campo primer_apellido
longitud := pos_almohadilla + LENGTH(cursor_clientes_lopd.primer_apellido);
nuevo_filtro_aux := SUBSTR(nuevo_filtro_aux,1,pos_almohadilla-1)
||''''|| cursor_clientes_lopd.primer_apellido ||''''
|| SUBSTR(nuevo_filtro_aux,pos_almohadilla1+2,LENGTH(cursor_clientes_tabla.filtro));
ELSIF (campo_nombre='SEGUNDO_APELLIDO') THEN -- Modificamos el campo segundo_apellido
longitud := pos_almohadilla + LENGTH(cursor_clientes_lopd.segundo_apellido);
nuevo_filtro_aux := SUBSTR(nuevo_filtro_aux,1,pos_almohadilla-1)
||''''|| cursor_clientes_lopd.segundo_apellido ||''''
|| SUBSTR(nuevo_filtro_aux,pos_almohadilla1+2,LENGTH(cursor_clientes_tabla.filtro));
ELSIF (campo_nombre='NUMERO_DOC_ACRED') THEN-- Modificamos el campo numero_doc_acred
longitud := pos_almohadilla + LENGTH(cursor_clientes_lopd.numero_doc_acred);
nuevo_filtro_aux := SUBSTR(nuevo_filtro_aux,1,pos_almohadilla-1)
||''''|| cursor_clientes_lopd.numero_doc_acred ||''''
|| SUBSTR(nuevo_filtro_aux,pos_almohadilla1+2,LENGTH(cursor_clientes_tabla.filtro));
END IF;
END LOOP;
lv_query := lv_query || nuevo_filtro_aux ;
declare
NoexisteTabla EXCEPTION;
NoexisteCampo EXCEPTION;
BEGIN
--DBMS_OUTPUT.PUT_LINE ('Inicio: '||TO_CHAR(SYSDATE,'YYYYMMDD HH24:MI:SS'));
prueba:= SUBSTR(cursor_clientes_lopd.nombre,1,1);
IF (filtro_nombre='S' AND prueba ='*' ) THEN
DBMS_OUTPUT.PUT_LINE ('No se actualiza por filtro ***');
ELSE
EXECUTE IMMEDIATE lv_query;
END IF;
EXECUTE IMMEDIATE lv_query;
--DBMS_OUTPUT.PUT_LINE ('Final: '||TO_CHAR(SYSDATE,'YYYYMMDD HH24:MI:SS'));
COMMIT;
EXCEPTION
WHEN NoexisteTabla THEN
HayError := true;
-- Generamos nuevo valor para id_error
SELECT LOPD_CLIENTES_ERRORES_SQ.NEXTVAL
INTO v_id_error
FROM dual;
err_msg := 'NO EXISTE LA TABLA ';
-- Insertamos nuevo registro en la tabla lopd_clientes_errores
INSERT INTO LOPD_CLIENTES_ERRORES
VALUES (v_id_error,--IRIA VALOR DE SECUENCIA
cursor_clientes_lopd.id_cliente,
cursor_clientes_tabla.tabla,
err_msg,
SYSDATE);
COMMIT;
WHEN NoexisteCampo THEN
HayError := true;
-- Generamos nuevo valor para id_error
SELECT LOPD_CLIENTES_ERRORES_SQ.NEXTVAL
INTO v_id_error
FROM dual;
err_msg := 'NO EXISTE EL CAMPO ' ||
campo ||
' EN LA TABLA';
-- Insertamos nuevo registro en la tabla lopd_clientes_errores
INSERT INTO LOPD_CLIENTES_ERRORES
VALUES (v_id_error,--IRIA VALOR DE SECUENCIA
cursor_clientes_lopd.id_cliente,
cursor_clientes_tabla.tabla,
err_msg,
SYSDATE);
COMMIT;
WHEN OTHERS THEN
HayError := true;
--err_msg := SUBSTR(SQLERRM, 1, 200);
ROLLBACK;
-- Generamos nuevo valor para id_error
SELECT LOPD_CLIENTES_ERRORES_SQ.NEXTVAL
INTO v_id_error
FROM dual;
--err_code := SQLCODE;
err_msg := SUBSTR(SQLERRM, 1, 200);
-- Insertamos nuevo registro en la tabla lopd_clientes_errores
INSERT INTO LOPD_CLIENTES_ERRORES
VALUES (v_id_error,--IRIA VALOR DE SECUENCIA
cursor_clientes_lopd.id_cliente,
cursor_clientes_tabla.tabla,
err_msg,
SYSDATE);
COMMIT;
END;
END LOOP;
END IF;
--También, al terminar el bucle de actualización de cada cliente,
--hay que informar el campo adecuado de fecha de cancelación en LOPD_CLIENTES
--(se coge la fecha de ejecución
IF cursor_clientes_lopd.sw_pasado<>'S' THEN
UPDATE LOPD_CLIENTES
SET f_cancelacion_1 = SYSDATE
WHERE id_cliente = cursor_clientes_lopd.id_cliente;
ELSE
UPDATE LOPD_CLIENTES
SET f_cancelacion_n = SYSDATE
WHERE id_cliente = cursor_clientes_lopd.id_cliente;
END IF;
END LOOP;
-- Una vez que ya se han tratado todos los registros de la tabla lopd_clientes
actualizar_lopd_clientes;
--fin proceso log
v_sqlerrm := 'OK';
Prc_Dwge0025('N',ww_id_proceso_batch,ww_num_paso,ww_cont_leidos,ww_cont_escritos,ww_cont_borrados,ww_cont_actualizados,v_sqlerrm);
COMMIT;
/*EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
v_sqlerrm := SUBSTR(SQLERRM,1,100);
Prc_Dwge0025('N',ww_id_proceso_batch,ww_num_paso,ww_cont_leidos,ww_cont_escritos,ww_cont_borrados,ww_cont_actualizados,v_sqlerrm);
--RAISE_APPLICATION_ERROR(-20001,SQLERRM);*/
END prc_act_datos_personales_lopd;
END Pck_Clientes_Lopd_005;
/