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 :

Aide débutant sur PL/SQL


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 20
    Points : 19
    Points
    19
    Par défaut Aide débutant sur PL/SQL
    Bonjour, je suis totalement débutant en PL/SQL (depuis hier donc),
    Et je ne comprends pas où j'ai une erreur dans mon code.

    SQL developper me renvoie sans cesse
    Symbole ";" rencontré à la place d'un des symboles suivants : ) , * & = - + < / > at in is mod remainder not rem .....
    La ligne 21 correspond à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET pdateheuredebut := pdateheuredebut + interval '1' minute;
    Je ne vois pas où je pèche, mais il est clair que le problème vient de moi, ça c'est sur.... !!!

    Merci de votre aide.

    Voici mon code :
    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
    DECLARE
     
    CURSOR MAREQ IS
    SELECT * FROM temp_obi_of_jour ;
     
    begin 
     
    	for lig_reg in mareq loop
     
     
    		declare 
    		pdateheuredebut timestamp := dateheuredebut;
    		pdateheurefin timestamp := dateheurefin;
    		while pdateheuredebut-pdateheurefin>=0
     
    			begin
    				insert into temp_obi_of_jour_minute (CODECDC,CODEOF,DATECDC,DATEHEUREMINUTE,NUMLIGNEOF,CODEMAGASIN) values(lig_reg.CODECDC,lig_reg.CODEOF,lig_reg.DATECDC,pdateheuredebut,lig_reg.NUMLIGNEOF,lig_reg.CODEMAGASIN);
     
    			end;
     
          SET pdateheuredebut := pdateheuredebut + interval '1' minute;
     
    		end;
     
    	end loop;
     
    end ;

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 778
    Points
    30 778
    Par défaut
    J'ai du mal à faire correspondre tous les end avec le begin correspondant quand je lis ton code...
    Il me semble aussi que while introduit une boucle loop .. end loop;.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Modérateur
    Avatar de Kreepz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2011
    Messages : 681
    Points : 1 458
    Points
    1 458
    Billets dans le blog
    1
    Par défaut
    A quoi correspond ton de la ligne 23?
    Pensez à regarder nos cours et tutoriels PHP ainsi que notre FAQ PHP avant de poser votre question!
    Un message vous a aidé, n'oubliez pas le

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Mon end correspond à la fin du begin.
    J'ai cru comprendre que la structure devait être celle ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DECLARE
    .....
     
    BEGIN
     
               LOOP
               END LOOP
     
     
    END
    Ce que j'essaye de faire c'est de lire un fichier (d'ou le curseur) qui comporte 2 timestamp (un début, un fin), et je souhaite créé un enregistrement par minute entre les 2 timestamp

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Points : 30
    Points
    30
    Par défaut
    ton code est rempli d'erreur.

    voici les corrections :

    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
    DECLARE
     
    CURSOR MAREQ IS
    SELECT * FROM temp_obi_of_jour ;
     
    begin 
     
    	FOR lig_reg IN mareq loop
     
     
    		declare 
    		pdateheuredebut timestamp := dateheuredebut;
    		pdateheurefin timestamp := dateheurefin;
    		
     
    			begin
                              while pdateheuredebut-pdateheurefin>=0 loop
    
    				INSERT INTO temp_obi_of_jour_minute (CODECDC,CODEOF,DATECDC,DATEHEUREMINUTE,NUMLIGNEOF,CODEMAGASIN) VALUES(lig_reg.CODECDC,lig_reg.CODEOF,lig_reg.DATECDC,pdateheuredebut,lig_reg.NUMLIGNEOF,lig_reg.CODEMAGASIN);
                                 
                                   pdateheuredebut := pdateheuredebut + interval '1' minute;
                              end loop;
    			end;
     
    	end loop;
    
    end;
    j'ai déplacé certaine instruction qui n'était pas au bonne endroit.
    j'ai mis en rouge des instructions que tu as oublié de mettre pour faire la boucle WHILE.

    Pour information la zone entre le declare et begin permet de déclarer les variables.
    l'instruction while n'a donc rien à faire dedans.

    On n'utilise pas d'instruction SET pour affecter une valeur à une variable mais :=


    je pense qu'il est urgent que tu consulte des tutoriels sur le pl/sql afin d'avoir les bases.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Effectivement, il faut que j'approfondisse un peu plus.

    Voici mon code après correction qui fonctionne correctement.

    Merci de votre aide.

    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
    DECLARE
     
    CURSOR MAREQ IS
    SELECT * FROM temp_obi_of_jour ;
     
    		pdateheuredebut timestamp;
    		pdateheurefin timestamp;
     
    begin 
     
      for lig_reg in mareq loop
     
    		pdateheuredebut := lig_reg.dateheuredebut;
    		pdateheurefin := lig_reg.dateheurefin;
     
        while pdateheuredebut<=pdateheurefin
        loop
     
    				insert into temp_obi_of_jour_minute (CODECDC,CODEOF,DATECDC,DATEHEUREMINUTE,NUMLIGNEOF,CODEMAGASIN) values(lig_reg.CODECDC,lig_reg.CODEOF,lig_reg.DATECDC,pdateheuredebut,lig_reg.NUMLIGNEOF,lig_reg.CODEMAGASIN);
     
       pdateheuredebut := pdateheuredebut + interval '1' minute;
        end loop;
     
    	end loop;
     
     
    Commit ;
    end ;

Discussions similaires

  1. Débutant: Aide sur MS SQL Server
    Par mboubidi dans le forum Administration
    Réponses: 4
    Dernier message: 31/07/2008, 17h36
  2. [MS Query] neophyte demande aide sur jointures SQL
    Par thorgal972 dans le forum Langage SQL
    Réponses: 19
    Dernier message: 27/11/2006, 18h13
  3. [Oracle 9.2] Aide sur script SQL
    Par fmoriet dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/02/2006, 09h25
  4. aide sur requête sql
    Par Vodkha dans le forum Langage SQL
    Réponses: 9
    Dernier message: 30/08/2005, 18h53
  5. Aide sur Requête SQL
    Par devdev dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/05/2005, 13h33

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