Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/05/2008, 22h20   #1
Invité de passage
 
Inscription : mai 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 21
Points : 1
Points : 1
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 :
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.
central.jaco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2008, 09h01   #2
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 534
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 534
Points : 6 471
Points : 6 471
Oui, vous pouvez utiliser un tableau PL/SQL

Code :
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;
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2008, 14h01   #3
Invité de passage
 
Inscription : mai 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 21
Points : 1
Points : 1
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 :
1
2
 
char** stringArrays= {"TABLE1,"TABLE2", "TABLE3"......};
Merci d'avance.
central.jaco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2008, 16h59   #4
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 534
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 534
Points : 6 471
Points : 6 471
Code :
1
2
3
4
5
6
7
Declare
  Type t1 IS TABLE of Varchar2(30) ;
  tab  t1;
Begin
  tab := t1('table1','table2','table3' ) ;
End;
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2008, 18h25   #5
Invité de passage
 
Inscription : mai 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 21
Points : 1
Points : 1
Merci
central.jaco est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h26.


 
 
 
 
Partenaires

Hébergement Web