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 :

ORA-00900 pour un "open cursor for"


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut ORA-00900 pour un "open cursor for"
    hello les gens,
    J'ai une table A qui n'est crée que sous certaines conditions et qui n'existe pas au moment de la compilation d'une procédure stockée.
    J'ai quand même besoin de définir un curseur qui parcourt cette table j'ai donc essayé d'utiliser de l'sql dynamique mais sans succés.
    voici mon code:

    Je souhaiterais une solution autre que de crée une table "permanente" ou "normale" qui ait la même structure et sur laquelle je déverserai le contenu de ma table A quand elle est crée pour ensuite la parcourir avec mon curseur.

    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
    DECLARE
       TYPE r_cursor IS REF CURSOR;
     
       v_retour_trace   NUMBER;
       c_accnt          r_cursor;
     
       TYPE rec_accnt IS RECORD (
          affilie   VARCHAR2 (999),
          ld        VARCHAR2 (999),
          dat       TIMESTAMP ( 6 ),
          heure     TIMESTAMP ( 6 ),
          nfname    VARCHAR2 (999),
          jc        VARCHAR2 (999),
          obs       VARCHAR2 (999),
          sens      VARCHAR2 (999)
       );
     
       ar               rec_accnt;
    BEGIN   
       EXECUTE IMMEDIATE    'OPEN c_accnt FOR '
                         || 'SELECT a.bp,a.bp, systimestamp, systimestamp, a.FILE_NAME, RECOVERY_DAY, a.REQUESTER, a.DIRECT '
                         || 'FROM tbl_tmp_accnt_cft a;';
     
       LOOP
          FETCH c_accnt
           INTO ar;
     
          EXIT WHEN c_accnt%NOTFOUND;
     
          BEGIN
             INSERT INTO tbl_accnt_cft
                         (seq, affilie, ld, dat,
                          heure, nfname, jc, obs, sens
                         )
                  VALUES (seq_accnt_cft.NEXTVAL, ar.affilie, ar.ld, ar.dat,
                          ar.heure, ar.nfname, ar.jc, ar.obs, ar.sens
                         );'
          EXCEPTION
             WHEN OTHERS
             THEN
                NULL;
     
          END;
       END LOOP;
     
       CLOSE c_accnt;
    END;
    Je me prends un "ORA-00900: Instruction SQL non valide" à cause de mon "EXECUTE IMMEDIATE"
    Merci pour toute vos contributions.

  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
    A la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    EXECUTE IMMEDIATE    'OPEN c_accnt FOR '
                         || 'SELECT a.bp,a.bp
    faire plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OPEN c_accnt FOR 'SELECT a.bp,a.bp ...

  3. #3
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut
    Que dire ? bref concis net précis rapide! t'es un as merci.

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

Discussions similaires

  1. OPEN CURSOR FOR avec type clob
    Par voyageur dans le forum SQL
    Réponses: 22
    Dernier message: 22/09/2015, 14h07
  2. PLS-00201 sur un OPEN cursor FOR
    Par tibal dans le forum PL/SQL
    Réponses: 4
    Dernier message: 24/11/2008, 21h38
  3. OPEN CURSOR - ORA-00942
    Par flouille dans le forum SQL
    Réponses: 5
    Dernier message: 29/04/2008, 16h04
  4. Réponses: 5
    Dernier message: 04/12/2007, 10h49
  5. pb PL/SQL ORA-01410 cursor for update & current of
    Par carlitoB dans le forum PL/SQL
    Réponses: 2
    Dernier message: 14/04/2006, 14h59

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