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.
Trending News
¿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
- 6 years agoFavorite 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.