Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

[SOLUCIONADO] como usar replace de mysq en oracle

Estas en el tema de como usar replace de mysq en oracle en el foro de Oracle en Foros del Web. Hola escrbo aca porque, necesito saber com poder pasar la funcion replace a oracle mi codigo es este: Cita: Codigo de programacion no permitido en ...
  #1 (permalink)  
Antiguo 25/10/2017, 02:26
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 13 años, 1 mes
Puntos: 4
como usar replace de mysq en oracle

Hola escrbo aca porque, necesito saber com poder pasar la funcion replace a oracle mi codigo es este:

Cita:
Codigo de programacion no permitido en foros de BBDD. Leer las normas del subforo, por favor.
encontré algo asi pero no se como usarlo es la primera vez q uso oracle.

Código SQL:
Ver original
  1. UPDATE TABLE-NAME SET COLUMN-NAME = REPLACE(TABLE-NAME.COLUMN-NAME, 'STRING-TO-REPLACE', 'REPLACEMENT-STRING');

Última edición por gnzsoloyo; 25/10/2017 a las 06:09
  #2 (permalink)  
Antiguo 25/10/2017, 06:17
Avatar de 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

Recuerda que MySQL es un motor de BBDD que le pertenece a Oracle, pero NO ES Oracle. Cada uno de ellos conserva sus propias sintaxis y no comparten muchas cosas.

Respecto a las funciones propias de Oracle, eso lo puedes consultar en el manual de referencia (Oracle Help Center: REPLACE)

En esencia es exactamente como la has puesto, pero ten en cuenta que en MySQL REPLACE también es una sentencia DML semejante a UPDATE, por lo que como te decía, ambos dBMS no son EXACTAMENTE iguales.

Otra nota es que tengas mucho cuidado con el uso del signo "-" en los nombres de los objetos. Te van a disparar errores.

Muevo el post al foro de Oracle.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 27/10/2017, 23:51
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 13 años, 1 mes
Puntos: 4
Respuesta: como usar replace de mysq en oracle

uhmmm y pues como podia entonces reemplazar

Código MySQL:
Ver original
  1. REPLACE INTO permisos_role SET role = $roleID, permiso = $permisoID, valor = $valor

usando esas variales pasadolas como parametros $roleID, $permisoID y $valor
  #4 (permalink)  
Antiguo 29/10/2017, 12:36
Avatar de 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

No me queda claro el problema que planteas.

En primer lugar, Oracle no tiene la sentencia REPLACE, que es propia de MySQL y por tanto esta última sintaxis que nos muestras NO funcionará en este DBMS. LO que mas se parece es MERGE, pero no es exactamente lo mismo.

En segundo lugar, aclara bien esto: ¿Lo que necesitas es reemplazar una parte o toda la cadena que contiene una columna dada de una tabla, con el valor de otra cadena pasadacomo parametro?

Algo así como:

Código SQL:
Ver original
  1. UPDATE tablaDatos
  2. SET campo_datos = REPLACE(campo_datos, 'valorencampo', 'valorreemplazo')
  3. WHERE [condiciones de filtrado]
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 30/10/2017, 03:06
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 13 años, 1 mes
Puntos: 4
Respuesta: como usar replace de mysq en oracle

Hola gnzsoloyo, bueno es para actualizar una lista de accesos, como bien dies esta en mysql, esta tabla no tiene un Id auto incrementable ni un PK, y se actualiza mediante radio buton y lo que queiro es algo similar peor con oracle ya que no conosco mucho de este gestor a las justas ando con lo basico de mysql
  #6 (permalink)  
Antiguo 30/10/2017, 05:46
Avatar de 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

Entendamos entonces un par de cosas:
1) En Oracle es perfectamente posible crear un ID que se incremente, y usarlo sobre una tabla, pero es parte de la estructura de la tabla como los auto_increment. Se denominan SEQUENCES, y son objetos que se crean para fines como esos en la base. Simplemente que para usarlo hay que incluirlo dentro del INSERT.
2) Cuando dices "actualizar", sigue sin ser claro si te refieres: a) Insertar un nuevo registro con datos a una tabla; b) Actualizar un valor de un campo en un registro dato (para lo cual deben tener cómo identificar ESE registro) o c) Remplazazr parcialmente el contenido de un campo (lo que nos has dicho hasta ahora).

Yendo al punto 1, lo puedes ver en el manual de referencia de Oracle (siempre usa los manuales, es importantísimo):
CREATE SEQUENCE

Simplemente cras una sequence que te sirva, y luego la usas exclusivamente para esa tabla. Y digo que EXCLUSIVAMENTE, porque al ser un objeto NO dependiente de las tablas, cualquier uso de la misma en forma accidental afectará el valor siguiente.
Código SQL:
Ver original
  1. CREATE SEQUENCE mytable_seq
  2.  START WITH     1
  3.  INCREMENT BY   1
  4.  NOCACHE
  5.  NOCYCLE;

Luego en un INSERT la puedes usar directamente:
Código SQL:
Ver original
  1. INSERT INTO mytable(id, campo1, campo2)
  2. VALUES(mytable_seq.NEXTVAL, 'valor1', 'valor2');;

Para el segundo caso, ¿podrías ejemplificarnos lo que intentas hacer con datos que sean reales, así se entiende mejor la idea de lo que intentas?

Por su lado, te recomiendo que tengas en cuenta que una tabla de accesos requiere siempre historicidad, algo que sirva para auditar, y NUNCA se recomienda soreescribir un mismo registro. Pierdes trazabilidad de acciones.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 30/10/2017, 05:46
Avatar de 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

Entendamos entonces un par de cosas:
1) En Oracle es perfectamente posible crear un ID que se incremente, y usarlo sobre una tabla, pero NO es parte de la estructura de la tabla como los auto_increment. Se denominan SEQUENCES, y son objetos que se crean para fines como esos en la base. Simplemente que para usarlo hay que incluirlo dentro del INSERT.
2) Cuando dices "actualizar", sigue sin ser claro si te refieres: a) Insertar un nuevo registro con datos a una tabla; b) Actualizar un valor de un campo en un registro dato (para lo cual deben tener cómo identificar ESE registro) o c) Remplazar parcialmente el contenido de un campo (lo que nos has dicho hasta ahora).

Yendo al punto 1, lo puedes ver en el manual de referencia de Oracle (siempre usa los manuales, es importantísimo):
CREATE SEQUENCE

Simplemente cras una sequence que te sirva, y luego la usas exclusivamente para esa tabla. Y digo que EXCLUSIVAMENTE, porque al ser un objeto NO dependiente de las tablas, cualquier uso de la misma en forma accidental afectará el valor siguiente.
Código SQL:
Ver original
  1. CREATE SEQUENCE mytable_seq
  2.  START WITH     1
  3.  INCREMENT BY   1
  4.  NOCACHE
  5.  NOCYCLE;

Luego en un INSERT la puedes usar directamente:
Código SQL:
Ver original
  1. INSERT INTO mytable(id, campo1, campo2)
  2. VALUES(mytable_seq.NEXTVAL, 'valor1', 'valor2');

Para el segundo caso, ¿podrías ejemplificarnos lo que intentas hacer con datos que sean reales, así se entiende mejor la idea de lo que intentas?

Por su lado, te recomiendo que tengas en cuenta que una tabla de accesos requiere siempre historicidad, algo que sirva para auditar, y NUNCA se recomienda sobrescribir un mismo registro. Pierdes trazabilidad de acciones.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 30/10/2017 a las 05:52
  #8 (permalink)  
Antiguo 30/10/2017, 20:29
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 13 años, 1 mes
Puntos: 4
Respuesta: como usar replace de mysq en oracle

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.
  #9 (permalink)  
Antiguo 30/10/2017, 21:57
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: como usar replace de mysq en oracle

Estoy tratando de imaginarme lo que se quiere,
pero no doy del todo.

A ver si entendí:
Hay una aplicación en la que yo selecciono por medio
de un radiobutton alguna de las opciones que dibujaste de la tabla, cierto?

Al hacer eso, si entendí correctamente, ¿se elimina?

Y entiendo que luego de alguna manera la vuelven a crear.

¿Hasta ahí voy bien?

Si todo es correcto hasta aquí, ¿que se quiere hacer con el replace?
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #10 (permalink)  
Antiguo 30/10/2017, 22:57
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 13 años, 1 mes
Puntos: 4
Respuesta: como usar replace de mysq en oracle

hola si simplemente reemplazar permisos si un tipo de rol a escocgifo si esta habilitado inhablitado o ignorado, pero esto ya lo resolvi, hace poco usando merge
  #11 (permalink)  
Antiguo 31/10/2017, 05:50
Avatar de 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)
  #12 (permalink)  
Antiguo 31/10/2017, 23:02
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 13 años, 1 mes
Puntos: 4
Respuesta: como usar replace de mysq en oracle

esto me funciono para lo que deseaba

Código SQL:
Ver original
  1. MERGE INTO permisos_role USING dual ON (ROLE=:ROLE AND permiso = :permiso )
  2.        WHEN MATCHED THEN UPDATE SET valor=:valor
  3.        WHEN NOT MATCHED THEN INSERT (ROLE,permiso,valor)
  4.        VALUES ( :ROLE,:permiso, :valor )
  #13 (permalink)  
Antiguo 01/11/2017, 06:32
Avatar de 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





Nota: Ten cuidado con el uso de palabras reservadas en los DBMS, tales como ROLE, USER y muchas otras. Pueden dispararte errores de ejecución indetectables a simple vista por defectos de sintaxis.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: date, mysql, replace, usar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:47.