
Cursor con CASE y UPDATE
Publicado por Erickpa (1 intervención) el 26/12/2016 18:57:44
Hola estimados, soy de Costa Rica y estoy iniciando la carrera de Sistemas.
Quisiera su aporte para poder actualizar los datos más sensibles de clientes (correo,cuenta,teléfono,email,nombre,apellidos) dentro de una base de datos Oracle.
He creado un cursor que busca los campos que necesito y cuando encuentra actualiza el registro, en este caso la prueba la estoy creando con algunos ID de clientes para no actualizar todos los registros, como verán haciendo uno a uno funciona y la variable le suma un +1 cuando encuentra el nombre.
Dentro de la BD existen clientes naturales,residentes,pasaportes y Jurídicos, quisiera intentar con un CASE que cuando el ID del cliente sea "CJU" le coloque por ejemplo "RESULTADO" pero que se sume un 1 cada vez igual que con el cliente con el tipo ID "CNA" o natural. Cuando sea el ID de tipo "CRE" le coloque "OTROS".
Posterior quisiera ir cambiando en el CASE los apellidos, email, teléfonos, etc.
Muchas gracias...
/*El cursor es: */
Declare
v_acum number;
cursor c_actualiza is
select a.cod_cia,
a.cod_docum,
a.tip_docum,
a.nom_tercero,
a.nom2_tercero,
a.ape1_tercero,
a.ape2_tercero,
a.tlf_movil,
b.tlf_numero,
b.email,
b.tlf_numero_com,
b.email_com,
b.cta_cte,
b.txt_email,
b.cod_tarjeta,
b.num_tarjeta,
b.fec_vcto_tarjeta
from a1001399 a, a1001331 b
where a.cod_cia = 1
and a.nom_tercero != 'null'
and a.tip_docum = b.tip_docum
and a.cod_docum = b.cod_docum
and a.cod_docum in ('111810464',
'111610631',
'800870150',
'110550726',
'111830715',
'111060800',
'111120585',
'110030332',
'111460930',
'111660408',
'110320878',
'110700388',
'111380644',
'111040472',
'4000001021',
'3101373595',
'3005045162',
'3101502007',
'3101397485',
'3101294479',
'0034300757',
'01002312815',
'011203096',
'012180004480193988',
'011203096',
'07469542');
begin
v_acum := 0;
for reg in c_actualiza loop
v_acum := v_acum + 1;
begin
UPDATE a1001399 i
SET i.nom_tercero = 'PRUEBASCR' || ' - ' || v_acum
where i.cod_cia = reg.cod_cia
and i.tip_docum = reg.tip_docum
and i.cod_docum = reg.cod_docum;
END;
commit;
dbms_output.put_line(reg.nom_tercero);
end loop;
end;
--------------------------------------------------------------------------------------

Quisiera su aporte para poder actualizar los datos más sensibles de clientes (correo,cuenta,teléfono,email,nombre,apellidos) dentro de una base de datos Oracle.
He creado un cursor que busca los campos que necesito y cuando encuentra actualiza el registro, en este caso la prueba la estoy creando con algunos ID de clientes para no actualizar todos los registros, como verán haciendo uno a uno funciona y la variable le suma un +1 cuando encuentra el nombre.
Dentro de la BD existen clientes naturales,residentes,pasaportes y Jurídicos, quisiera intentar con un CASE que cuando el ID del cliente sea "CJU" le coloque por ejemplo "RESULTADO" pero que se sume un 1 cada vez igual que con el cliente con el tipo ID "CNA" o natural. Cuando sea el ID de tipo "CRE" le coloque "OTROS".
Posterior quisiera ir cambiando en el CASE los apellidos, email, teléfonos, etc.
Muchas gracias...
/*El cursor es: */
Declare
v_acum number;
cursor c_actualiza is
select a.cod_cia,
a.cod_docum,
a.tip_docum,
a.nom_tercero,
a.nom2_tercero,
a.ape1_tercero,
a.ape2_tercero,
a.tlf_movil,
b.tlf_numero,
b.email,
b.tlf_numero_com,
b.email_com,
b.cta_cte,
b.txt_email,
b.cod_tarjeta,
b.num_tarjeta,
b.fec_vcto_tarjeta
from a1001399 a, a1001331 b
where a.cod_cia = 1
and a.nom_tercero != 'null'
and a.tip_docum = b.tip_docum
and a.cod_docum = b.cod_docum
and a.cod_docum in ('111810464',
'111610631',
'800870150',
'110550726',
'111830715',
'111060800',
'111120585',
'110030332',
'111460930',
'111660408',
'110320878',
'110700388',
'111380644',
'111040472',
'4000001021',
'3101373595',
'3005045162',
'3101502007',
'3101397485',
'3101294479',
'0034300757',
'01002312815',
'011203096',
'012180004480193988',
'011203096',
'07469542');
begin
v_acum := 0;
for reg in c_actualiza loop
v_acum := v_acum + 1;
begin
UPDATE a1001399 i
SET i.nom_tercero = 'PRUEBASCR' || ' - ' || v_acum
where i.cod_cia = reg.cod_cia
and i.tip_docum = reg.tip_docum
and i.cod_docum = reg.cod_docum;
END;
commit;
dbms_output.put_line(reg.nom_tercero);
end loop;
end;
--------------------------------------------------------------------------------------
Valora esta pregunta


0