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

SQL Oracle Discussion :

Suppression en cascade dynamique


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 21
    Par défaut Suppression en cascade dynamique
    Bonsoir à tous,

    J'ai quelques soucis avec un DELETE dans plusieurs tables. Est-ce que quelqu'un pourrait m'orienter car je pense que je suis dans l'erreur.

    Je vous explique mon problème. Je voudrais faire un delete dans plusieurs tables (partout le même where). Voici comment je fais aujourd'hui:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    procedure deleteSomething(inIdSomething IN NUMBER) IS
      sqlStmt VARCHAR2(2000);
     
      CURSOR tables_cur IS
        SELECT 'TABLENAME1'     AS TN FROM DUAL UNION ALL
        SELECT 'TABLENAME2'     AS TN FROM DUAL UNION ALL
        SELECT 'TABLENAME3'     AS TN FROM DUAL UNION ALL
        SELECT 'TABLENAME4'     AS TN FROM DUAL ;
     
     BEGIN
     
              FOR aTabe_rec in tables_cur LOOP
                 sql_stmt := 'DELETE FROM '||aTabe_rec.TN || ' WHERE IDSOMETHING = ' || inIdSomething ||'';
                 dbms_output.put_line(sql_stmt);
                 EXECUTE IMMEDIATE sql_stmt;
             END LOOP;
     
             -- delete from the main table;
     END;
    Je pense que je suis dans l'erreur... Est-ce qu'il n'y aurait pas moyen d'initialiser un tableau comme on peut le faire en C avec l'ensemble des noms de table ?

    Ou quelqu'un a-t-il une autre idée pour faire ces suppressions dans le bon ordre (dépendances pris en compte automatiquement?)

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Oui, vous pouvez utiliser un tableau PL/SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Declare
      Type t1 is table of Varchar2(30) index by binary_integer ;
      tab  t1;
    Begin
      tab(1) := 'table1' ;
      tab(2) := 'table2' ;
      ...
      For i In tab.first .. tab.last Loop
        cmd := 'DELETE FROM ' || tab(i) || ' WHERE ...' ;
        execute immediate cmd ;
      End loop;
    End;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 21
    Par défaut
    Merci pour votre réponse. Est-ce qu'il n'existe pas un moyen plus condensé ?
    Quand je parlais du C, je pensais plus à une syntaxe comme celle-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char** stringArrays= {"TABLE1,"TABLE2", "TABLE3"......};
    Merci d'avance.

  4. #4
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Declare
      Type t1 IS TABLE of Varchar2(30) ;
      tab  t1;
    Begin
      tab := t1('table1','table2','table3' ) ;
    End;

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 21
    Par défaut
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. suppression en cascade dans formulaire et sous-formulaire
    Par tooneygirl dans le forum Access
    Réponses: 7
    Dernier message: 20/06/2005, 14h17
  2. Requetes de suppression en cascade
    Par log2n dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 20/05/2005, 10h07
  3. Suppression en cascade
    Par log2n dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/05/2005, 20h33
  4. [debutant]suppression en cascade
    Par christophebmx dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 03/05/2005, 09h51
  5. [Javascript] Suppression de lien dynamique
    Par Invité4 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/01/2005, 10h36

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