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 :

Plusieurs instructions DDL oracle


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 415
    Points : 41
    Points
    41
    Par défaut Plusieurs instructions DDL oracle
    Bonjour à tous et a toutes,

    Est-ce que les instruction TRUNCATE ou DELETE + INSERT sur la même table fonctionne? dans mon cas ça n'a pas marché, y a-t-il des solutions ?
    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
    SELECT COUNT(*) INTO NB FROM DBA_OBJECTS
     WHERE OBJECT_TYPE='TABLE' 
       AND OWNER='user' 
       AND OBJECT_NAME = 'MATABLE_'||Q||'_'||YEAR||'';
     
         IF NB<>0 THEN
     
           EXECUTE IMMEDIATE ('TRUNCATE TABLE MATABLE_'||Q||'_'||YEAR);
           COMMIT;  
     
           EXECUTE IMMEDIATE ('INSERT INTO MATABLE_'||Q||'_'||YEAR||' AS SELECT * FROM TABLE_GLOBALE ');
           COMMIT; 
     
         ELSE   
     
           EXECUTE IMMEDIATE ('CREATE TABLE MATABLE_'||Q||'_'||YEAR||' AS SELECT * FROM TABLE_GLOBALE ');
           COMMIT;
     
         END IF;
    Dans mon cas lorsque NB = 0 l'instruction EXECUTE IMMEDIATE ('CREATE TABLE ... est exécutée normale sans souci, mais dans le cas ou NB <> 0 seulement la première instruction sera exécutée !!

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 415
    Points : 41
    Points
    41
    Par défaut résolu by ME
    merci, j'ai résolu le problème moi même,

    il fallait mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE IMMEDIATE ('INSERT INTO MATABLE_'||Q||'_'||YEAR||' SELECT * FROM ... ');
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE IMMEDIATE ('INSERT INTO MATABLE_'||Q||'_'||YEAR||'  AS SELECT * FROM ... ');

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    De manière plus générale, quand vous construisez du SQL à la volée, mettez-le dans une chaîne de caractères et affichez-là au moins le temps du développement.
    Ça permet de tester les plans d'exécutions, ou même de lancer la requête.

    Petit rappel aussi, les commandes DDL (truncate, alter, create, drop, et cetera) effectuent un commit implicite avant et après leur exécution. Pas besoin de le préciser donc.
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    declare
        ...
     
        v$_matable      varchar2( 30);
        v$_sql          varchar2(500);
     
    begin
        dbms_output.enable;
     
        ...
     
        v$_matable = 'MATABLE_' || Q || '_' || YEAR;
     
        select count(*)
          into v$_nb
          from dba_objects
         where object_type = 'TABLE' 
           and owner       = 'user' 
           and object_name = v$_matable;
     
        if v$_nb <> 0
        then
     
            v$_sql := 'truncate table ' || v$_matable;
            dbms_output.put_line(v$_sql);
            -- execute immediate v$_sql;
     
            v$_sql := 'insert into ' || v$_matable || ' select * from table_globale');
            dbms_output.put_line(v$_sql);
            -- execute immediate v$_sql;
            -- commit;
     
        else
     
            v$_sql := 'create table ' || v$_matable || ' as select * from table_globale';
            dbms_output.put_line(v$_sql);
            -- execute immediate v$_sql;
     
        end if;
     
        ...
    end;
    /

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 415
    Points : 41
    Points
    41
    Par défaut
    Merci infiniment Waldar

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

Discussions similaires

  1. Plusieurs instructions dans un if
    Par x0rster dans le forum Caml
    Réponses: 8
    Dernier message: 14/02/2008, 17h14
  2. Execution plusieurs instructions DDL
    Par zoheir13 dans le forum Connexion aux bases de données
    Réponses: 7
    Dernier message: 07/05/2007, 13h55
  3. requete avec plusieurs instructions
    Par Ama dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 31/08/2006, 08h11
  4. plusieurs instructions dans un onClick
    Par illegalsene dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/01/2006, 11h10
  5. Install de plusieurs versions d'Oracle
    Par macben dans le forum Installation
    Réponses: 1
    Dernier message: 14/09/2005, 17h20

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