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

Eliminar registro en oracle

Estas en el tema de Eliminar registro en oracle en el foro de Oracle en Foros del Web. Saludos a todos y nuevamente dando lata por aquí..... Miren el problema es el siguiente.. quiero eliminar un registro de una tabla, pero para hacerlo ...
  #1 (permalink)  
Antiguo 09/02/2011, 12:12
Avatar de oswOsito  
Fecha de Ingreso: agosto-2010
Ubicación: Quito
Mensajes: 32
Antigüedad: 14 años, 2 meses
Puntos: 0
Busqueda Eliminar registro en oracle

Saludos a todos y nuevamente dando lata por aquí.....

Miren el problema es el siguiente.. quiero eliminar un registro de una tabla, pero para hacerlo dependo de las foreign keys...

Por ejemplo, cuando hago un SELECT digo:

SELECT TABLA1.NOMBRE
FROM TABLA1,TABLA2
WHERE TABLA1.codTabla1='001'
AND TABLA1.codTabla2=TABLA2.codTabla2;

Ahora quiero armar un DELETE similar a ese.... algo asi:

DELETE FROM TABLA1,TABLA2
WHERE TABLA1.codTabla1='001'
AND TABLA1.codTabla2=TABLA2.codTabla2;

No se si eso está bien.

De antemano muchas gracias a todos por su ayuda


-----------------------------------------------------------------------------------------------
Cuando uno piensa que sabe todas las respuestas, viene la vida y cambia todas las preguntas
  #2 (permalink)  
Antiguo 09/02/2011, 12:43
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Eliminar registro en oracle

Mira este foro
http://www.experts-exchange.com/Data..._22478900.html

la foreign key debe tener la opción ON DELETE CASCADE para que solo baste con borrar el registro de la tabla padre.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 09/02/2011, 13:22
Avatar de oswOsito  
Fecha de Ingreso: agosto-2010
Ubicación: Quito
Mensajes: 32
Antigüedad: 14 años, 2 meses
Puntos: 0
Busqueda Respuesta: Eliminar registro en oracle

Gracias huesos por tu pronta respuesta. Mira me explico mejor....

La tabla padre se supone que tiene datos con los que formo campos en un formulario:

Por ejemplo:

Tabla1 contiene:

- Cráneo
- Tronco
- Extremidades

y en la tabla 2 guardo lo que el usuario selecció.

Tabla2 contiene:

-Cráneo
-Extremidades

Lo que deseo es eliminar en la Tabla2 el registro Cráneo por ejemplo, Obviamente debo comparar que el código heredado en la tabla2 exista en la tabla 1 (tabla padre).....

No se si hacer en el WHERE algo como un select anidado o algo asi....!!!!!!!!

Ah olvidaba decir que de la TABLA1 no puedo eliminar ningún registro, puesto que la uso para mostrar las opciones a todos los usuarios.... Asi que solo debo eliminar los datos de la TABLA2

Última edición por oswOsito; 09/02/2011 a las 13:30 Razón: Faltó algo más.
  #4 (permalink)  
Antiguo 09/02/2011, 13:34
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Eliminar registro en oracle

entiendo...
entonces creo que esta te vale

Código SQL:
Ver original
  1. DELETE FROM (SELECT *FROM tabla1 INNER JOIN tabla2 ON tabla1.id=tabla2.id WHERE tabla1.id='001')

esto borra los datos de la tabla 2 unicamente. Lo acabo de probar.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 09/02/2011, 13:46
Avatar de oswOsito  
Fecha de Ingreso: agosto-2010
Ubicación: Quito
Mensajes: 32
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Eliminar registro en oracle

Gracias huesos voy a probarla, aunque indagando encontre otra forma... quizas en cuestion de tiempo sea mas efectiva ya que no hago el select anidado:

DELETE t1, t2 FROM t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id;

O:

DELETE FROM t1, t2 USING t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id;

......"Estos comandos usan las tres tablas al buscar registros a borrar, pero borrar los registros coincidentes sólo para las tablas t1 y t2. ".....

Aqui esta todo el link de donde lo encontré y voy a probar tu solucion y la que encontré: ;) gracias huesoooos ;)

http://dev.mysql.com/doc/refman/5.0/es/delete.html
  #6 (permalink)  
Antiguo 09/02/2011, 14:31
Avatar de oswOsito  
Fecha de Ingreso: agosto-2010
Ubicación: Quito
Mensajes: 32
Antigüedad: 14 años, 2 meses
Puntos: 0
Busqueda Respuesta: Eliminar registro en oracle

Querido amigo huesos, probe la solucion que encontré y pues no funcionó para ORACLE... probé la tuya y funcionó OKI:
Cita:
Iniciado por huesos52 Ver Mensaje

Código SQL:
Ver original
  1. DELETE FROM (SELECT *FROM tabla1 INNER JOIN tabla2 ON tabla1.id=tabla2.id WHERE tabla1.id='001')


Cree una sentencia nueva, como esta:

Código SQL:
Ver original
  1. DELETE FROM tabla2
  2. WHERE tabla2.codigoTabla2='001'
  3. AND tabla2.codigoTabla1 IN
  4. (SELECT tabla1.codigoTabla1 FROM Tabla1 WHERE Tabla1.codigoTabla1='000000020');

La pregunta es, hay alguna diferencia en eficiencia???? o son iguales mi sentencia con la tuya??????
  #7 (permalink)  
Antiguo 09/02/2011, 14:43
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Eliminar registro en oracle

Las sentencias con IN por lo regular son ineficientes. Ya que debe hacer un plan de ejecución mas complejo y darle un orden logico a la ejecución. En este caso ejecuta primero la sentencia dentro del IN para comparar posteriormente con la consulta externa.
Si la mia y la tuya obtienen el mismo resultado, te digo que es mas eficiente la mia. Si la cantidad de datos no es muy grande, la eficiencia no se notará mucho independiente de cual uses.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 09/02/2011, 14:46
Avatar de oswOsito  
Fecha de Ingreso: agosto-2010
Ubicación: Quito
Mensajes: 32
Antigüedad: 14 años, 2 meses
Puntos: 0
Busqueda Respuesta: Eliminar registro en oracle

OKI amigo... gracias...... ;)

Lo tendré en cuenta.. aunque no son muchos registros.... maximo 4 son los registros, pero me quedaré con tu solución ;) gracias.....

Etiquetas: eliminar, registro
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 08:57.