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 :

Comment faire un truncate/ insert conditionné


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Par défaut Comment faire un truncate/ insert conditionné
    salut à tous,

    J’ai une table de fait que je charge en 2 étapes :
    - 1ere etape : un truncate ssur la table de fait.
    - 2eme etape : insert dans la table avec les données provenant d’une table temporaire(du stage). Le pobleme qui se pose est que la table temporaire n’est pas toujours chargée(pas de données fournies ou livrées).

    Ma question est la suivante :
    - y a t-il une possibilité à l’aide du sql de verifier si la table temporaire contient des données, si oui je fais le truncate et insert les nouvelle données dans la table de fait. Dans le cas contraire pas de truncate de la tabel de fait pour conserver par exemple les anciennes données.

    Mon idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select count(*) from temp_table
    if count(*) < 1 then exit
    else 
    truncate table f_table;
    insert into f_table(x,yz) select x,yz from temp_table
    end
    est-ce possible avec du sql?

    Si quelqu’un a une idée, je suis preneuse.

    Merci d'avance
    Fiona

  2. #2
    Membre émérite Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Par défaut
    Bonjour,

    tu peux faire une procédure stockée du genre :

    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
    declare
     
    v_verif integer;
     
    begin
     
    SELECT count(*) 
    into v_verif
    FROM temp_table;
     
    IF v_verif < 0 then 
    execute immediate 'TRUNCATE TABLE f_table';
     
    INSERT INTO f_table(x,yz) 
    SELECT x,yz FROM temp_table;
     
    end if;
     
    end;
    /

  3. #3
    Membre confirmé Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Par défaut
    Salut Z3phur,

    si je comprend bien ce n'est possible qu'avec du plsql?

    Fiona

    Citation Envoyé par Z3phur Voir le message
    Bonjour,

    tu peux faire une procédure stockée du genre :

    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
    declare
     
    v_verif iinteger;
     
    begin
     
    SELECT count(*) 
    into v_verif
    FROM temp_table;
     
    IF v_verif < 0 then 
    execute immediate 'TRUNCATE TABLE f_table';
     
    INSERT INTO f_table(x,yz) 
    SELECT x,yz FROM temp_table;
     
    end if;
     
    end;
    /

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    pourquoi tu ne fais pas une vue matérialisée ?

  5. #5
    Membre émérite Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Par défaut
    Pour moi c'est le plus simple

  6. #6
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    Orafrance, comment tu résouds ce cas là avec une VM ? Il y a une option qui empêche son refresh s'il n'y a pas de données dans la table source ?

  7. #7
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    J'en suis pas sûr mais bon, quoiqu'il en soit, vu le process c'est tout à fait indiqué. A lui de conditionner le refresh en fonction du contenu de la table temporaire éventuellement

  8. #8
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    dans un script sqlplus, tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    whenever sqlerror exit 1
    select decode(count(*),0/0) from temp_table;
    truncate...
    insert...
    Le 0/0 fera une erreur si count(*)=0 et le script sortira avec erreur 1
    Sinon, le script continue

    Cordialement,
    Franck.

Discussions similaires

  1. Comment faire ma jointure insert ?
    Par keokaz dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/09/2011, 12h25
  2. [2005] Comment faire un truncate de toutes les tables d'un schéma ?
    Par clementratel dans le forum SSIS
    Réponses: 12
    Dernier message: 24/03/2011, 10h00
  3. Comment faire une double INSERTION ?
    Par c-bolo dans le forum Persistance des données
    Réponses: 1
    Dernier message: 04/12/2009, 15h52
  4. Insert Into .... On Duplicate. Comment faire ?
    Par deloo dans le forum Requêtes
    Réponses: 5
    Dernier message: 17/02/2005, 16h29
  5. Comment faire une insertion dans un fichier texte ?
    Par Isa31 dans le forum Langage
    Réponses: 10
    Dernier message: 28/12/2004, 09h06

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