Yahoo Answers is shutting down on May 4th, 2021 (Eastern Time) and beginning April 20th, 2021 (Eastern Time) the Yahoo Answers website will be in read-only mode. There will be no changes to other Yahoo properties or services, or your Yahoo account. You can find more information about the Yahoo Answers shutdown and how to download your data on this help page.

¿Por qué mi procedimiento almacenado en PL/SQL elimina los datos en lugar de actualizarlos?

Estoy haciendo un procedimiento almacenado que elimine los números de un empleado dado de baja de una tabla que contiene un campo "S_valor", un ejemplo sería:

1,2,54,289,86,30,476,268,285,259,224,71.... --el 30 y el 801 ya fueron dados de baja

Pero al ejecutarlo, en lugar de eliminar el 801 o el 30, me elimina todo el campo!

Anexo el código, la parte de los cursores

BEGIN

OPEN cur_TraeIdEmpleadoBaja;

LOOP

FETCH cur_TraeIdEmpleadoBaja INTO v_baja;

EXIT WHEN cur_TraeIdEmpleadoBaja%notfound;

dbms_output.put_line ( Id personal baja || v_baja.n_id_personal);

BEGIN

OPEN cur_aplicaciones;

LOOP

UPDATE esquema.aplicaciones

SET s_valor = REGEXP_REPLACE (v_registro.s_valor,( ^( || v_baja.n_id_personal || ),|,( || v_baja.n_id_personal || )$|^( || v_baja.n_id_personal || )$ ), )

WHERE REGEXP_LIKE(v_registro.s_valor, ( ^( || v_baja.n_id_personal || ),|,( || v_baja.n_id_personal || )$|^( || v_baja.n_id_personal || )$ ));

UPDATE esquema.aplicaciones

SET s_valor = REGEXP_REPLACE (esquema.aplicaciones.s_valor, ,( || v_registro.s_valor || ), , , )

WHERE REGEXP_LIKE(esquema.aplicaciones.s_valor... ,( || v_registro.s_valor || ), );

FETCH cur_aplicaciones INTO v_registro;

EXIT WHEN cur_aplicaciones%notfound;

END LOOP; --aplicaciones

END cur_aplicaciones;

CLOSE cur_aplicaciones;

COMMIT;

END LOOP; --trae id empleado baja

CLOSE cur_TraeIdEmpleadoBaja;

END cur_TraeIdEmpleadoBaja;

2 Answers

Rating
  • 6 years ago
    Favorite Answer

    Sin la parte del declare y con esos carácteres extraños por en medio la cosa no queda demasiado clara, de todos modos creo que el problema puede estar en los parámetros del REGEXP_REPLACE, mira te paso un ejemplo sencillo utilizando tus datos para que veas si te puede servir de algo:

    declare

    s_valor varchar2(100);

    n_id_personal varchar2(10);

    cadena varchar2(100);

    begin

    s_valor := '1,2,54,289,86,30,476,268,285,259,224,71';

    n_id_personal := '30';

    select REGEXP_REPLACE (s_valor,'(' || n_id_personal || '),|,(' || n_id_personal || ')|(' || n_id_personal || ') ' ) into cadena

    from dual;

    dbms_output.put_line (cadena);

    end;

    En principio esto debería eliminar el '30' de la cadena de empleados

    Un saludo

  • 5 years ago

    Hola, ¿Cómo estás?, espero y deseo que bien, antes que nada, un cordial saludo, bueno te escribo este peqeño mensaje en comentario para decirte que haber que día podemos platicar, necesito hablar contigo sobre algunas cosas de una muy suma importancia, realmente quiero que me ayudes en unas cosas de buena utilidad, te dejo mi Facebook para que me contactes, espero que no rechaces hablar conmigo, solo para unos temas generales, mi facebook es (www.facebook.com/aldo500asicria) sin los paréntesis, me despido de Ti deseandote bonita tarde, hasta luego y saludos.

    ATENTAMENTE: Aldo.

Still have questions? Get your answers by asking now.