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 :

insert dans un for i .. 50


Sujet :

PL/SQL Oracle

  1. #1
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut insert dans un for i .. 50
    Bonjour a tous,

    je voudrais executer un insert 50 fois. Je teste ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     BEGIN
     execute immediate 'truncate table TMP_ARTICULOS_WORKING';
     
     FOR i IN 1..50 LOOP
     INSERT INTO TMP_ARTICULOS_WORKING 
    	SELECT P.ID FROM PTABLE;
       END LOOP;
     
    COMMIT;
    END;
    /
    Ce code ne donne pas d'erreur, mais y'a 0 rows dans la table a la fin...je vois pas.
    Le truncate se fait qu'une seule fois n'est ce pas?

    D'avance merci si quelqu'un voit ou est mon erreur.

  2. #2
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    TMP_ARTICULOS_WORKING est une table permanente ou oune Global Temporary Table ?
    Cordialement,
    Franck.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

  3. #3
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Global temporary
    c'est pour cela que les données ne restent pas ?

  4. #4
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    ok,
    merci Pacho
    j'ai remplacé la global par une table normal, et la c'est ok j'ai met rows...J'avais pas vu ce detail !

    Genial

    merci

  5. #5
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Quand on crée une table temporaire, il y a 2 options : "ON COMMIT PRESERVE ROWS", et "ON COMMIT DELETE ROWS". L'option par défaut est la dernière, et son effet est que les données disparaissent dès qu'on fait un COMMIT !

    Si cela ne convient pas, c'est l'autre option qu'il faut choisir à la création de la table.
    Dans ce cas, les données disparaîtront aussi de manière irrémédiable, mais à la fin de la session (quand on se déconnecte).
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  6. #6
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Bonsoir,
    ha alors c'est curieux car voici la ddl de la table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE GLOBAL TEMPORARY TABLE MNGBD.TMP_ARTICULOS_WORKING
    (
    bla,
    bla)
    ON COMMIT PRESERVE ROWS
    NOCACHE;
    C'est le NOCACHE qui differe

  7. #7
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    NOCACHE est l'option par défaut de création de toutes les tables, il n'y a rien de particulier à dire à ce sujet.

    Par contre, je ne parviens pas à reproduire votre problème.
    C'est à se demander si, tout simplement, ce ne serait pas la table PTABLE qui était vide au début...
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  8. #8
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Bonsoir,

    la select donne 3890 rows... Donc c'est pas ça, y'a des données et si je garde la même requête et que je change la table du debut par une table "normal" pas global temporary, le petit bout de script fonctionne. Bug?

    Toutes les commandes ont ete testées sur 11gR2 sous windows.

  9. #9
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Une GTT avec on commit preserve rows garde les lignes visibles dans la même session.
    Pouvez-vous confirmer que c'est dans la même session que vous ne voyez pas de lignes ?
    Cordialement,
    Franck.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

  10. #10
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Bonjour Pachot
    le select count(1) from table je le faisait effectivement depuis une autre session.
    je vais essayer depuis la même avec la tabla global pour voir.

    merci !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/02/2009, 10h06
  2. [MySQL] insert into dans un for
    Par pimpmyride dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/12/2005, 17h55
  3. [LG]Tri par insertion dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 4
    Dernier message: 18/12/2003, 22h34
  4. Insertion dans un fichier xml à partir d'un xsl
    Par alexandre54 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 21/03/2003, 09h45
  5. Insertion dans un fichier XML
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 4
    Dernier message: 27/02/2003, 17h16

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