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

SQL Oracle Discussion :

Soucis procédure stockée


Sujet :

SQL Oracle

Vue hybride

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 35
    Par défaut Soucis procédure stockée
    Bonjour,

    Je suis en train de migrer une application, de DB2 7.2 vers Oracle (8 ou 9 je ne sais plus).
    Cette ancienne application comprend plein de procédures stockées et j'ai énormément de mal avec cela, car je n'ai jamais eu auparavant à y toucher.

    Voila la procédure initiale DB2 :

    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
    CREATE PROCEDURE MA_PROCEDURE()
        LANGUAGE SQL
        RESULT SETS 1
        READS SQL DATA
     
    P1: BEGIN
            DECLARE cursor1 CURSOR WITH RETURN FOR
            SELECT * 
            FROM    MATABLE
            ORDER BY ID
            WITH UR;
     
            -- Curseur maintenu ouvert pour l'application client
            OPEN cursor1;       
    END P1
    En version Oracle cela donnerait, si j'ai bien compris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    create or replace PROCEDURE MA_PROCEDURE
     IS
       CURSOR cursor1 IS
           SELECT * 
            FROM    MATABLE
            ORDER BY ID
    BEGIN
       -- Curseur maintenu ouvert pour l'application client
       open cursor1 ;
    END  MA_PROCEDURE;
    Sauf que quand j'execute ma procédure, je n'ai rien qui s'affiche à l'écran :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL> execute MA_PROCEDURE;
    Procédure PL/SQL terminée avec succès.

    NB : quand je l'execute sous DB2, j'ai bien des résultats, et ma table n'est pas vide ...

    J'espere que vous aurez tous de bonnes idées ... enfin, une qui fonctionne me serait énormément utile

    Merci par avance,
    K.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Avec Oracle, il faut créer un ref cursor que votre procédure ou fonction doit retourner à l'appelant pour que ce dernier puisse travailler dessus.
    Exemple: http://www.developpez.net/forums/sho...cursor+exemple

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 35
    Par défaut
    Dans tous les exemples, je vois que le ref cursor est utilisé dans un package.
    Mais comment faire si je ne "veux" pas en utiliser ? Car cette procédure est utilisée dans une appli C# et je ne sais pas si elle sait utiliser les packages (est ce exécuté de la meme facon, ou pas ? )...

    J'ai donc essayé de remplacer
    CURSOR cursor1 IS
    par
    TYPE cursor1 IS REF CURSOR;

    (avec et sans ; à la fin de ma ligne)

    et voila l'erreur obtenue :

    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
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    5/4      PLS-00103: Symbole "SELECT" rencontré à la place d'un des
             symboles suivants :
             begin function package pragma procedure subtype type use
             <an identifier> <a double-quoted delimited-identifier> form
             current cursor
             Symbole "begin" a été substitué à "SELECT" pour continuer.
     
    11/22    PLS-00103: Symbole "end-of-file" rencontré à la place d'un des
             symboles suivants :
             begin case declare end exception exit for goto if loop mod
             null pragma raise return select update while with
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
             <an identifier> <a double-quoted delimited-identifier>
             <a bind variable> << close current delete fetch lock insert
             open rollback savepoint set sql execute commit forall merge
             <a single-quoted SQL string> pipe

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    En fait vous confondez le CREATE TYPE qui créé un type SQL avec la déclaration d'un type PL/SQL: ce sont 2 choses différentes. Vous pouvez aussi déclarer un type PL/SQL dans un bloc PL/SQL anonyme ou une procédure indépendante: il suffit de le déclarer dans la DECLARE SECTION:
    http://download-uk.oracle.com/docs/c...htm#sthref1409

    Du point de vue du client, il n'y a pas vraiment de différence essentielle entre l'appel d'une procédure indépendante et l'appel d'une procédure d'un package: pour appeler une procédure ou une fonction appartenant à un package il suffit de préfixer le nom de la procédure par le nom du package:

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 35
    Par défaut
    Ok, j'ai trouvé comment mettre un curseur ..
    Merci !

    K.

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

Discussions similaires

  1. soucis avec procédure stockée
    Par erox44 dans le forum VBA Access
    Réponses: 0
    Dernier message: 21/05/2008, 16h55
  2. [MySql] Soucis avec procédure stockée
    Par glopglopyoup dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 07/11/2007, 16h47
  3. [MySql] Soucis avec procédure stockée
    Par glopglopyoup dans le forum Langage SQL
    Réponses: 0
    Dernier message: 01/11/2007, 15h16
  4. [SQL2005] soucis procédures stockées
    Par f_bobo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/09/2006, 11h13
  5. Soucis compilation procédures stockées
    Par kyrsa dans le forum DB2
    Réponses: 3
    Dernier message: 18/07/2006, 11h30

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