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

 Oracle Discussion :

PL/SQL Déclaration Curseur


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Par défaut PL/SQL Déclaration Curseur
    Bonjour,

    Je me tourne vers vous parce que je suis entrain de m'arracher les cheveux...
    Je veux créer une procédure en PL utilisant un curseur, mais pas moyen de la compiler correctement. Voici le code de base :
    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
    CREATE OR REPLACE PROCEDURE BO.ALIM_PLANAP_ECH IS
    DECLARE
        v_corg VARCHAR2(2 BYTE);
        v_compte VARCHAR2(11 BYTE);
        v_bail NUMBER(2);
        v_plan NUMBER(2);
        v_lddeb DATE;
        v_ldfin DATE;
        v_duree NUMBER(4);
        v_nb NUMBER(9,2);
        CURSOR tmp_det_plans IS
            SELECT p.CORG,p.CCOMPTE,p.NOBAIL,p.NOPLAN,last_day(p.DDEB) AS LDDEB,last_day(p.DFIN) AS LDFIN,p.NB,months_between(last_day(p.DFIN),last_day(p.DDEB)) AS DUREE
            FROM PLANRAT@DB_EELOGI p;
        BEGIN
            EXECUTE IMMEDIATE('TRUNCATE TABLE BO.PLANAP_ECH');
            OPEN temp_det_plans;
            FETCH temp_det_plans INTO v_corg, v_compte, v_bail, v_plan, v_lddeb, v_ldfin, v_duree, v_nb;
            FOR i IN 0..v_duree LOOP
                INSERT INTO BO.PLANAP_ECH
                SELECT
                    v_corg,
                    v_compte,
                    v_bail,
                    decode(length(v_bail),2,v_corg||v_compte||'0'||v_bail,v_corg||v_compte||v_bail),
                    v_plan,
                    to_number(to_char(add_months(v_lddeb,i),'yyyy')),
                    to_number(to_char(add_months(v_lddeb,i),'mm')),
                    add_months(v_lddeb,i),
                    v_nb,
                    v_corg||v_compte
                 FROM DUAL;
            END LOOP;
        END;
    A la compilation, j'ai l'erreur :
    ERROR line 3, col 12, ending_line 3, ending_col 19, Found 'VARCHAR2', Expecting: ( . @ -or- % -or- .. := DEFAULT NOT NULL -or- ;
    Je ne comprends pas pourquoi...

    Si je retire mon instruction "DECLARE", ça passe au niveau des variables. Par contre j'ai l'erreur :
    PLS-00201: identifier 'TEMP_DET_PLANS' must be declared
    Celle là je la comprends mieux...

    Mais si, du coup, je place mon DECLARE après mes variables, avant mon "CURSOR", j'ai l'erreur suivante :
    ERROR line 11, col 12, ending_line 11, ending_col 24, Found 'tmp_det_plans', Expecting: ( . @ -or- % -or- .. := DEFAULT NOT NULL -or- ;
    Alors, je ne pige plus rien...

    C'est sûrement évident mais comme je débute en PL j'ai un peu de mal...

    EDIT : Tant que j'y suis, si quelqu'un peut me dire comment boucler mon FETCH pour qu'il aille jusqu'à EOF...
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Pas de DECLARE dans une procédure.
    Pour les problèmes de syntaxe, ce serait bien que tu te débrouille tout seul

  3. #3
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Par défaut
    J'ai repiqué la syntaxe à partir d'un onglet "Scripts" sous TOAD où il n'y a pas de 'S' à 'BYTE'.

    J'ai essayé malgré tout mais ça ne change rien à mon erreur.
    J'avais d'ailleurs essayé avec %ROWTYPE mais même erreur.
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

  4. #4
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Par défaut
    Pas de DECLARE dans une procédure.
    Cela veut-il dire qu'il faut que je déclare obligatoirement mon curseur dans un package ???
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    c'est DECLARE le problème

  6. #6
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Par défaut
    c'est DECLARE le problème
    OK, mais si je le vire j'ai l'erreur :
    PLS-00201: identifier 'TEMP_DET_PLANS' must be declared
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    regarde la syntaxe avec un FOR, ça simplifiera le code. Il y a un tuto très bien fait sur ce site

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

Discussions similaires

  1. [PL/SQL] Déclaration de curseur
    Par pepin21 dans le forum SQL
    Réponses: 2
    Dernier message: 25/09/2006, 15h32
  2. [Oracle 8i][PL/SQL] Exceptions & Curseur
    Par Bahan dans le forum Oracle
    Réponses: 3
    Dernier message: 31/08/2006, 16h34
  3. [PL-SQL] contenu curseur
    Par pitre dans le forum Oracle
    Réponses: 9
    Dernier message: 17/08/2006, 15h25
  4. Réponses: 6
    Dernier message: 12/02/2006, 08h31
  5. Réponses: 5
    Dernier message: 23/02/2005, 09h43

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