Cita:
Iniciado por stevens82 hola nuevamnete, esta tabla no tiene un autoincremntable ni lo debe tener por razones de codificacion lo que sideb hacer es eliinar dicho registro y colocarlo nuevamente, osea si los tres valores son seleccionados obligatoriamente y esa coicidencia es la que se cambia, ningun registro tiene el miso juego de valores iguales, un jemplo
role - permiso - valor
1 - 2 - 1
1 - 1 - 1
2 - 2 - 1
3 - 1- 1
2 - 3 -1
ninguna secuencia se repite, entonces lo que hace es seleccinar dicha secuencia y elimanrla y poner la nueva espero haberme dejado entender, es por eos que necesito reemplzar con replace u algo parecido peor en oracle.
... suponiendo que has declarado algún tipo de clave UNIQUE, usa MERGE.
de todos modos no evadas el tema. Algunas preguntas sólo se pueden responder si pones ejemplos REALES de los valores que consultas, porque con este ejemplo que estás dando, el UPDATE o el REPLACE carecen de sentido.
En otras palabras, a menos que haya alguna diferencia en alguno de los tres campos (role, permiso, valor) o en algún otro que no nos dices, no tiene lógica alguna reemplazar un registro que ya EXISTE por otro exactamente IGUAL.
Trata de comprender que necesitamos ver el cuadro exacto para poder darte una respuesta que te sirva, ya que el SQL es un lenguaje muy preciso en su uso. Poner ejemplos simulados rara vez sirve.
Por lo demás, como ya te dije, en Oracle tienes dos caminos: 1) Usa el MERGE, como te sugerí. 2) Usa un stored procedure para contener toda la lógica que necesitas.
Con MERGE mas o menos así sería (
verificar en el manual, por favor, esto es un ejemplo escrito a mano):
Código SQL:
Ver originalMERGE INTO TABLA T1
USING (SELECT ROLE, permiso, valor FROM tabla
WHERE ROLE = 1 AND permiso = 2 AND valor = 1) S
ON (D.ROLE = S.ROLE AND D.permiso = S.permiso AND D.valor = S.valor)
WHEN MATCHED THEN UPDATE SET D.ROLE = valorRol, D.permiso = valorPermiso, D.valor = valorValor
DELETE WHERE (S.salary > 8000)
WHEN NOT MATCHED THEN INSERT (D.rol, D.permiso, D.valor)
VALUES (valorRol, valorPermiso, valorValor);