{Oracle} una consulta DELETE

angelique1 Mensajes publicados 81 Fecha de registro   Estado Miembro Última intervención   -  
devMan Mensajes publicados 75 Estado Miembro -
Hola

tengo una consulta que no funciona, no entiendo por qué:

yo estoy eliminando todos los corredores que forman parte del equipo Festina

DELETE
FROM COUREUR
WHERE CodeEquipe IN (
SELECT CodeEquipe
FROM EQUIPE
WHERE NomEquipe = 'Festina'
);

sabiendo que codeEquipe es una clave primaria en la tabla Equipe y es una clave foránea en la tabla coureur

en el error me dicen violación de restricción de integridad; hijos existentes
por favor es urgente ayúdame

Configuración: Windows Vista Safari 532.0

12 respuestas

  1. fiu
     
    Hola

    La estructura de un delete con join no existe! la sintaxis que has utilizado es totalmente válida.

    tu problema es que existen filas que dependen de ciertos corredores Festina. Si eliminas a esos corredores, las filas que dependen de ellos ya no dependerán de nada... y eso, no es bueno.
    es similar a si quisieras eliminar al equipo Festina: primero eliminarías a los corredores que dependen de él.

    entonces debes primero eliminar las filas que dependen de los corredores a eliminar... Supongo que están en tablas de las que no nos has hablado
    una vez realizada esa eliminación, podrás eliminar a tus corredores Festina.

    inténtalo entonces
    select fils.constraint_name, fils.table_name, col.column_name from all_constraints pere, all_constraints fils, all_cons_columns col where pere.constraint_name = fils.r_constraint_name and fils.constraint_name = col.constraint_name and pere.table_name='COUREUR' and pere.constraint_type='P'
    eso debería listarte la(s) tabla(s) y columna(s) que referencian a tus corredores y que bloquean la eliminación.
    4
    1. angelique1 Mensajes publicados 81 Fecha de registro   Estado Miembro Última intervención   10
       
      hola no sé si me entendiste bien, tengo ganas de eliminar registros, por ejemplo esta consulta quiere decir eliminar todos los corredores que forman parte del equipo Festina, como en la tabla solo tenemos el código del equipo y no el nombre del equipo, así que fue necesario hacer un join y respecto a lo que me diste, Bain? obtuve esto CONSTRAINT_NAME TABLE_NAME COLUMN_NAME FR_NUMCOUREUR PARTICIPANT NUMEROCOUREUR gracias, intenta ayudarme, en serio eres muy amable
      0
      1. fiu > angelique1 Mensajes publicados 81 Fecha de registro   Estado Miembro Última intervención  
         
        sí, te he entendido bien :)
        y si la base se niega a eliminar a los corredores Festina, es simplemente porque quedan de esos corredores que están presentes (o mejor dicho referenciados) en la asociación PARTICIPANT (a la que nunca le has contado).
        Me permito devolverte para leer una vez más el capítulo "Integridad referencial". Una vez que lo asimiles, todo te parecerá mucho más claro.
        0
  2. fiu
     
    hola
    simplemente tienes líneas en una tabla X o Y que se refieren a alguno de los corredores que quieres eliminar.
    0
  3. angelique1 Mensajes publicados 81 Fecha de registro   Estado Miembro Última intervención   10
     
    bain tengo una tabla EQUIPE(codeEquipe,nomEquipe,......) donde codeEquipe es una clave primaria

    y la tabla COUREUR(numeroCoureur,...,codeEquipe)
    así es la estructura de las tablas

    por favor dame la estructura de un delete con join
    0
  4. holow1 Mensajes publicados 739 Estado Miembro 71
     
    Hola,

    para el primer problema es normal que aparezca violación de restricción de integridad

    para el segundo problema solo debes aplicar la restricción de clave foránea
    0
  5. espoirfazou Mensajes publicados 3 Estado Miembro
     
    hola
    intenta con esta consulta
    delete *
    from courreur
    where courreur.codequipe=equipe.codeequipe
    and equipe.nomequipe='festina'

    buena suerte
    0
  6. chuka Mensajes publicados 980 Estado Miembro 379
     
    Varias soluciones:
    O eliminas la restricción en las tablas donde tienes tu clave foránea...
    O modificas tu restricción para que las filas de las tablas que tienen tu clave foránea también se eliminen...
    https://www.techonthenet.com/oracle/foreign_keys/foreign_delete.php
    ¡A manipular con precaución!!
    @+
    --
    Por malentendido, ¡puede funcionar!!
    0
  7. devMan Mensajes publicados 75 Estado Miembro 15
     
    Salud,
    En situaciones similares en MySQL
    usamos la eliminación en cascada....

    ahí me parece que también debes definir delete/update en cascada en la clave foránea..
    no estoy seguro !!!!
    0
  8. fiu
     
    Seamos serios un poco.
    ¿Un usuario estándar tiene la posibilidad de activar o desactivar restricciones?
    ¿Tiene la posibilidad de modificar restricciones?
    ¿Por qué implementar restricciones si luego se van a eliminar?

    --
    - Mi Clio está averiada, ayúdame
    - ¡Pues! ¿por qué no compraste un Peugeot?
    0
  9. devMan Mensajes publicados 75 Estado Miembro 15
     
    dije pas qu"il va supprimer les contraintes ... c pas ça
    je veux dire qu'il doit ajouter les propriétés ON DELETE CASCADE et ON UPDATE CASCADE a la clef étrangère ..
    et quand il supprime un primary key il va supprimer automatiquement ses clef étrangère...
    Effacement du 'père' => Effacement des 'fils' (en cascade)
    s'il est les droit bien sur ....
    0
  10. fiu
     
    Hola
    Primero: no sabemos si Angelique1 tiene derecho a modificar las restricciones en las tablas utilizadas
    Segundo: el cascade es un mal hábito: el día que eliminemos accidentalmente un cliente, se eliminan automáticamente sus presupuestos, sus pedidos, sus envíos, sus facturas y sus pagos... la buena jugada.

    la solución aquí sigue siendo hacer limpieza en participantes y luego volver a ejecutar la consulta inicial.

    --
    Ia orana i te matahiti api
    0
    1. angelique1 Mensajes publicados 81 Fecha de registro   Estado Miembro Última intervención   10
       
      Buenas noches. Cuando creé el usuario le di todos los privilegios
      y en lo que respecta a la tabla participant, la clave primaria de la tabla corredor migra a participant
      y cuál es la estructura de (on delete cascade). Cuando yo creé mis tablas declaré mis restricciones normalmente sin hacer el delete on cascade, así que por favor ¿cómo podría añadirlo?
      0
  11. chuka Mensajes publicados 980 Estado Miembro 379
     
    Hola,
    tienes la respuesta al post N°8
    @+
    --
    Por malentendido, ¡eso puede funcionar!
    0
    1. angelique1 Mensajes publicados 81 Fecha de registro   Estado Miembro Última intervención   10
       
      comment se poste 8 svp
      0
  12. devMan Mensajes publicados 75 Estado Miembro 15
     
    eso quiere decir respuesta n°8 de la discusión
    0