Oracle - Eliminar una parte de una cadena

   
Vista:

Eliminar una parte de una cadena

Publicado por Lena (14 intervenciones) el 10/09/2015 19:25:44
Hola

Soy principiante de PL/SQL y debo hacer un trigger que cuando se elimine un producto, también sea eliminado de la lista de productos, pero en ese campo están varios productos separados por coma:

s_valor

259,224,1049,802

Lo que necesito es que cuando el producto 1049 se elimine de la tabla productos, se dispare un trigger que elimine SÓLO el 1049 (el trigger ya lo se hacer) pero no se cómo eliminar sólo ese valor de esta otra tabla (inventarios)...

Agradezco cualquier pista o idea
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

Eliminar una parte de una cadena

Publicado por Rafael (178 intervenciones) el 15/09/2015 08:36:49
Puedes usar la funcion replace tienes que tomar en cuenta las comas... y que son numeros...
lo que es un problema...

Veamos en un mundo ideal con algo asi estaría resuelto
1
update tabla set s_valor = replace(s_valor, '1049,');
Eliminara en ese campo todo lo que parezca '1049,'

Por que digo lo que parezca por que si tienes un numero que termine asi lo dejara a medias ejemplo
259,224,892,1049,13425,61049,123414

Despues de hacer este replace quedaria como:
259,224,892,13425,6123414

Siendo este ultimo un error.

Vaya despues de darle muchas vueltas quizas el replace no sea la opcion.

Supongo que la solucion pasa por encontrar primero todos los listados donde esta el producto con un like... (para minimizar el listado)
Luego generar el listado y al final reeditarlo.
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

Eliminar una parte de una cadena

Publicado por Lena (14 intervenciones) el 22/09/2015 22:52:48
Gracias Rafael por tu respuesta... estaba pensando en hacerlo con un translate porque el detalle es que debe ser desde dentro del trigger:

Debe eliminar el numero de empleado que me se haya cambiado de estatus al 9...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE OR REPLACE TRIGGER TG_BAJA_PERSONAL
   AFTER UPDATE OF n_id_estatus
   ON  PERSONAL
   FOR EACH ROW WHEN (new.n_id_estatus <> 9)
DECLARE
 v_idPer number;
BEGIN
   SELECT n_id_personal INTO v_idPer FROM PERSONAL
   WHERE :NEW.n_id_estatus = 9;
 
   UPDATE aplicaciones
   SET s_valor = REPLACE (s_valor, 'v_idPer')
   WHERE s_valor like '%v_idPer%';
 
   commit;
END;
/
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

Eliminar una parte de una cadena

Publicado por Lena (14 intervenciones) el 23/09/2015 20:55:59
Lo resolví asi:

1
2
3
4
UPDATE ijanez.tb_cfg_aplicaciones
    SET s_valor = DECODE (tb_cfg_aplicaciones.s_valor,',v_idPer,','v_idPer,',(
    REGEXP_REPLACE(tb_cfg_aplicaciones.s_valor, '^(v_idPer),|,(v_idPer)')))
    WHERE regexp_like(s_valor, '^(v_idPer),|,(v_idPer)+,|,(v_idPer)$');

Pero ahora tengo el problema de la tabla mutante y no se como dividirla
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