Ver Mensaje Individual
  #11 (permalink)  
Antiguo 31/10/2017, 05:50
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: como usar replace de mysq en oracle

Cita:
Iniciado por stevens82 Ver Mensaje
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 original
  1. MERGE INTO TABLA T1
  2.    USING (SELECT ROLE, permiso, valor FROM tabla
  3.    WHERE ROLE = 1 AND permiso = 2 AND valor = 1) S
  4.    ON (D.ROLE = S.ROLE AND D.permiso = S.permiso AND D.valor = S.valor)
  5.    WHEN MATCHED THEN UPDATE SET D.ROLE = valorRol, D.permiso = valorPermiso, D.valor = valorValor
  6.      DELETE WHERE (S.salary > 8000)
  7.    WHEN NOT MATCHED THEN INSERT (D.rol, D.permiso, D.valor)
  8.      VALUES (valorRol, valorPermiso, valorValor);
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)