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 Into avec temporisation


Sujet :

PL/SQL Oracle

Vue hybride

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 63
    Par défaut Insert Into avec temporisation
    Bonjour, voici mon problème :

    J'aimerais créer une PROCEDURE ou FONCTION, qui créerais un TRIGGER, lui même créant une temporisation pour un INSERT INTO.

    Le problème réside dans le fait que l'une des données insérée est un SYSDATE (format DD/MM/YYYY HH24:MI:SS)

    J'aimerais que chaque données enregistrée ai son SYSDATE comme donnée unique (pas avoir 2 INSERT INTO avec la même date). Pour cela j'ai déjà créé un code que voici :

    Code SQL : 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
     
    CREATE TRIGGER trigger_test
    AFTER INSERT ON TMP
    FOR EACH ROW
    BEGIN
    DBMS_LOCK.SLEEP(2);
    END;
     
    INSERT INTO TMP
    SELECT 
    	    cd_esp
    	   , NULL AS cd_pop
    	   ,cd_releve
    	   ,cd_nom
    	   ,nom_cite
    	   ,SYSDATE
    	   ,'D2' AS code_valid
    	   , 0 AS donnees_maj	   
    FROM  I202 I
    WHERE cd_ref = 124325
    ;
     
    DROP TRIGGER trigger_test;

    Mon TRIGGER me fait bien une temporisation de 2 secondes entre chaque données insérées, mais ils ont tous la même date.

    Par la suite, j'aimerais en faire une procédure, pour que le TRIGGER se créé puis se supprime, j'ai testé, mais il n'aime pas les CREATE :/

    Merci par avance.

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par dark_mouette Voir le message
    ...

    Le problème réside dans le fait que l'une des données insérée est un SYSDATE (format DD/MM/YYYY HH24:MI:SS)

    J'aimerais que chaque données enregistrée ai son SYSDATE comme donnée unique (pas avoir 2 INSERT INTO avec la même date). ...
    Utilisez un timestamp.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 63
    Par défaut
    Même résultat avec le CURRENT_TIMESTAMP
    Ils ont tous la même date

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    Sysdate est évalué une fois pour le select même s'il est long :
    http://asktom.oracle.com/pls/apex/f?...86300346043715

    Tu peux incrémenter la date d'1s artificiellement dans le select en faisant :
    sysdate + rownum/24/60/60

  5. #5
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    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 461
    Par défaut
    Rassurez-nous, vous n'envisagez pas de mettre une telle bidouille en production ?
    Parce que franchement, c'est une idée de shadock !

    Il suffit de définir une clé primaire numérique et de l'alimenter par une séquence, et vous n'aurez pas de problème d'unicité.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 63
    Par défaut
    La solution sysdate + rownum/24/60/60 semble fonctionner pour une 20aine de données.

    Citation Envoyé par Pomalaix Voir le message
    Il suffit de définir une clé primaire numérique et de l'alimenter par une séquence, et vous n'aurez pas de problème d'unicité.
    Mais la table est déjà alimentée.
    Je n'ai jamais eu à faire cela !

    MAJ :
    Ah, je pense voir ce que vous voulez dire : une incrémentation numérique
    Non ce n'est pas le but.
    En faite, si je met une date provisoire dans la date, c'est pour une autre procédure. Celle ci fera une nouvelle mise à jour grâce à cette date, il la prendra et la mettra sous cette forme : AAAAMMJJHHMMSS.

    Et cette donnée sera insérée dans une autre table, et sera sa clef primaire.

    Donc si la date est identique dans la table nommé TMP, cela aura une incidence pour une autre table qui en aura besoin pour sa clef primaire.

    Je ne sais pas si j'ai été clair :/

  7. #7
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    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 461
    Par défaut
    Citation Envoyé par dark_mouette Voir le message
    Je ne sais pas si j'ai été clair :/
    Impec !
    La solution de skuatamad me paraît excellente dans ce cas.

  8. #8
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par dark_mouette Voir le message
    Même résultat avec le CURRENT_TIMESTAMP
    Ils ont tous la même date
    Oui, bien sûr qu’ils ont la même date mais ce n’est pas la même fractionne de seconde.
    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
    44
    45
    46
    47
    48
    49
     
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
    Connected as mni
     
    SQL> 
    SQL> create table test_tim (
      2    id         varchar2(30)  primary key,
      3    a_col      varchar2(100)
      4  )
      5  /
     
    Table created
    SQL> create trigger bi_test_tim
      2  before insert on test_tim
      3  for each row
      4  begin
      5    :new.id := to_char(systimestamp,'DD/MM/YYYY HH24:MI:SS.FF6');
      6  end;
      7  /
     
    Trigger created
    SQL> insert into test_tim(a_col)
      2    select object_name
      3      from all_objects
      4     where rownum < 30
      5  /
     
    29 rows inserted
    SQL> Select *
      2    From test_tim
      3   Where rownum <= 10
      4  /
     
    ID                             A_COL
    ------------------------------ --------------------------------------------------------------------------------
    14/04/2011 16:44:11.299081     CON$
    14/04/2011 16:44:11.299462     I_COL2
    14/04/2011 16:44:11.299547     I_USER#
    14/04/2011 16:44:11.299612     C_TS#
    14/04/2011 16:44:11.299688     I_OBJ#
    14/04/2011 16:44:11.299762     I_CON2
    14/04/2011 16:44:11.299825     IND$
    14/04/2011 16:44:11.299889     BOOTSTRAP$
    14/04/2011 16:44:11.299952     UET$
    14/04/2011 16:44:11.300014     COL$
     
    10 rows selected
     
    SQL>

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 63
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Oui, bien sûr qu’ils ont la même date mais ce n’est pas la même fractionne de seconde.
    Oui mais on ne garde que JJ/MM/AAAA HH:MM:SS
    Le reste on ne l'utilise pas, et d'ailleurs j'ai créé une clef de registre pour n'afficher que cela.

    Merci à skuatamad ta solution fonctionne à merveille et est très rapide (pas besoin d'avoir une attente de 2 secondes à chaque INSERT).

    Je me suis encore pris la tête a vouloir faire une procédure qui créé un trigger pour ensuite le supprimer ^^

    Merci à tous

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

Discussions similaires

  1. insert into avec une date
    Par LeXo dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 13/11/2006, 22h08
  2. [Débutant] INSERT INTO avec VALUES + SELECT
    Par Feezdev dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/06/2006, 10h10
  3. INSERT INTO avec date (asp/access)
    Par ddeee dans le forum ASP
    Réponses: 2
    Dernier message: 30/03/2006, 13h07
  4. [MySQL] Php et INSERT INTO, avec variables
    Par Djwaves dans le forum PHP & Base de données
    Réponses: 24
    Dernier message: 20/02/2006, 13h53
  5. INSERT INTO avec une valeur numéroauto
    Par priest69 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 08/11/2005, 15h39

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