IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Supprimer une ligne via un curseur explicite


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Par défaut Supprimer une ligne via un curseur explicite
    Yop yop.

    J'ai un soucis. J'ai écrit une procédure qui doit supprimer certaines lignes d'une table. Pour cela j'utilise un curseur avec FOR UPDATE toussa toussa, dans le corps de ma procédure j'ai une boucle avec un fetch toussa toussa, et vient le DELETE <le_nom_de_ma_table>
    WHERE CURRENT OF.

    Pour que ça fonctionne je suppose qu'il faut mettre le commit avant la fin de la boucle, et du coup bah ça ne marche pas.
    Y a-t-il une autre solution que de recopier la table et de supprimer dans la copie puis de remplacer la première par la copie ?

    (si vous voulez du code, n'hésitez pas )

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    C'est un approche peu performant. La bonne solution consiste à faire un simple delete avec les conditions qui vont bien.
    La clause current off fonctionne si vous ne fait pas de commit dans la boucle (et faire commit dans la boucle n'est qu'une autre erreur dans la plupart des casses)
    Si vous insistez de faire commit dans la boucle vous pouvez vous en sortir en utilisant le RowID de la table (en fait current off est traduit derrière la scène par rowid).
    Mais tout ça ne sert à rien quand un simple delete suffit.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Par défaut
    C'était mon idée première, mais à priori ça ne m'efface pas grand chose. A moins que je n'ai oublié quelque chose quelque part.

    Un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM <ma_table>
    WHERE  CURRENT OF <mon_curseur>;
    suffirait ?

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Non. Vous devez écrire tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Delete ma_table
    Where condition
    ...
    pas de curseur, pas de current of.

    Exemple: je veux supprimer les emploies du département 10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    delete emp
      where depno = 10

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Par défaut
    Ah bah tout simplement

    Merci

Discussions similaires

  1. Supprimer une ligne via macro à partir d'une colonne donnée
    Par muzele dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/06/2012, 10h47
  2. [MySQL] supprimer une ligne d'une base de données via un checkbox
    Par sniper_marra dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 15/08/2008, 11h51
  3. [C#] Comment supprimer une ligne dans DataGrid ?
    Par BAUDIER dans le forum ASP.NET
    Réponses: 2
    Dernier message: 20/07/2004, 16h03
  4. supprimer une ligne avec cle etrangere
    Par BaBas dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/07/2003, 11h24
  5. Supprimer une ligne dans un fichier
    Par sbeu dans le forum Langage
    Réponses: 3
    Dernier message: 13/05/2003, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo