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 :

Comment sortir un résultat d'une procédure stockée


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
    Février 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 30
    Par défaut Comment sortir un résultat d'une procédure stockée
    Bonjour

    J'ai créé une procédure stockée sur mon Oracle, mais je n'arrive pas à sortir un bon résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /*Procédure stockée*/
    create or replace
    procedure aa is
      A1 NUMBER;
      B1 NUMBER;
     
      BEGIN 
       SELECT COUNT (*) into A1 from COMMANDE ;
       select count (*) into B1 from auths; 
       END aa;
    J'ai essayé plusieurs méthodes pour obtenir le résultat, ça ne marche pas toujours.
    1. call aa(); Le résultat est : Succès de l'élément aa.
    2. select * from aa(); Le résultat est :
      ORA-00933: SQL command not properly ended
      00933. 00000 - "SQL command not properly ended"
      *Cause:
      *Action:
      Erreur à la ligne 1, colonne 16

    Merci d'avance.

    Cordialement
    Ying

  2. #2
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Plein de solutions à ce problème mais une question avant toute chose : quelle sortie désirez vous obtenir ?

    • Une ligne avec le résultat de vos requêtes concaténé ?
    • Deux lignes (une par résultat de requête) ?
    • Autre chose ?

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Bonjour

    Je soupçonne l'auteur du fil d'être un habitué de Sql Server qui se retrouve un peu désarçonné par les PS façon Oracle.

    La différence est en effet d'importance.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 30
    Par défaut
    Citation Envoyé par ojo77 Voir le message
    Plein de solutions à ce problème mais une question avant toute chose : quelle sortie désirez vous obtenir ?

    • Une ligne avec le résultat de vos requêtes concaténé ?
    • Deux lignes (une par résultat de requête) ?
    • Autre chose ?

    Bonjour

    Je vais sortir tous les résultats de cette procédure. Par exemple, j'ai 2 variables A1, B1, comment je peux faire? Merci d'avance

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous pouvez définir vos paramètres comme étant IN, OUT ou IN OUT.
    Dans votre cas, OUT à l'air de suffire.

    Il faut alors affecter les paramètres sortant à des variables à l'extérieur de la procédure, toujours en PL/SQL.

  6. #6
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Une solution :

    Déclaration de variable de sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    variable A1 number;
    variable B1 number;
    Exécution d'un code PL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    BEGIN 
      SELECT COUNT(*) INTO :A1 FROM dba_segments ;
      SELECT count(*) INTO :B1 FROM dba_objects; 
    END aa;
    /
    Affichage des variables de sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    print :A1
     
            A1
    ----------
          8192
     
    print :B1
     
            B1
    ----------
         62456
    Une autre solution :

    Déclaration de variable de sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    variable C1 number;
    variable D1 number;
    Création d'une procédure PL/SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create or replace procedure AA ( P_A1 out number, P_B1 out number ) as
    BEGIN 
      SELECT COUNT(*) INTO P_A1 FROM dba_segments ;
      SELECT count(*) INTO P_B1 FROM dba_objects; 
    END aa;
    /
    Exécution de la procédure et affichage des résultats
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    exec AA(:C1,:D1)
     
    print :C1
     
            C1
    ----------
          8192
     
    print :D1
     
            D1
    ----------
         62456

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 30
    Par défaut
    Citation Envoyé par ojo77 Voir le message
    Une solution :

    Déclaration de variable de sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    variable A1 number;
    variable B1 number;
    Exécution d'un code PL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    BEGIN 
      SELECT COUNT(*) INTO :A1 FROM dba_segments ;
      SELECT count(*) INTO :B1 FROM dba_objects; 
    END aa;
    /
    Affichage des variables de sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    print :A1
     
     
     
            A1
    ----------
          8192
     
    print :B1
     
            B1
    ----------
         62456
    Une autre solution :

    Déclaration de variable de sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    variable C1 number;
    variable D1 number;
    Création d'une procédure PL/SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create or replace procedure AA ( P_A1 out number, P_B1 out number ) as
    BEGIN 
      SELECT COUNT(*) INTO P_A1 FROM dba_segments ;
      SELECT count(*) INTO P_B1 FROM dba_objects; 
    END aa;
    /
    Exécution de la procédure et affichage des résultats
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    exec AA(:C1,:D1)
     
    print :C1
     
            C1
    ----------
          8192
     
    print :D1
     
            D1
    ----------
         62456




    Bonjour

    En fait j'arrive pas déclarer les variables haut

    Déclaration de variable de sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    variable C1 number;
    variable D1 number;
    Je fais comme ça?
    create or replace
    procedure AA ( P_A1 out number, P_B1 out number ) AS

    declare
    variable C1 NUMBER;
    Variable C2 Number;

    BEGIN
    SELECT COUNT(*) INTO P_A1 FROM commande ;
    SELECT count(*) INTO P_B1 FROM auths;
    END aa;

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 30
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Vous pouvez définir vos paramètres comme étant IN, OUT ou IN OUT.
    Dans votre cas, OUT à l'air de suffire.

    Il faut alors affecter les paramètres sortant à des variables à l'extérieur de la procédure, toujours en PL/SQL.
    Bonjour

    Même si j'ajoute OUT , ça n'a pas marché
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE PROCEDURE NUMBERCDE
    ( N out integer) 
    AS 
    BEGIN
       SELECT COUNT(*) into N from Commande;
    END NUMBERCDE;

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Si vous ne faites que la moitié du travail, ça ne fonctionne pas.
    Citation Envoyé par Waldar Voir le message
    Il faut alors affecter les paramètres sortant à des variables à l'extérieur de la procédure, toujours en PL/SQL.
    ojo77 > votre réponse est assez complète mais elle mélange SQL*Plus et PL/SQL, à mon avis ce n'est pas une bonne idée, autant tout mettre en PL/SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    declare
        n1  number;
        n2  number;
    begin
        AA (n1, n2);
     
        dbms_output.put_line('N1 : ' || to_char(n1));
        dbms_output.put_line('N2 : ' || to_char(n2));
    end;
    /

Discussions similaires

  1. Comment récupérer le résultat d'une procédure stockée (OUT parameter) ?
    Par java2008 dans le forum Interfaces de programmation
    Réponses: 1
    Dernier message: 08/04/2008, 13h00
  2. Problème de récup de résultats d'une procédure stockée
    Par an_merle dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 12/01/2006, 10h08
  3. [C#/SQL] Comment gérer les exceptions d'une Procédure stockée ?
    Par thomas_strass dans le forum Accès aux données
    Réponses: 10
    Dernier message: 06/07/2005, 10h40
  4. [SQL Server]Recupération du résultat d'une procédure stockée
    Par navis84 dans le forum Bases de données
    Réponses: 8
    Dernier message: 04/04/2005, 20h53
  5. [C#] Récupérer le résultat d'une procédure stockée
    Par fabrice1596 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/10/2004, 13h45

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