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 :

Tester ma procédure pl/sql sous sqlplus


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut Tester ma procédure pl/sql sous sqlplus
    Bonjour,
    J'ai une procedure PL/SQL que j'exécute à partir du C ou à partir de cx_Oracle (python). La procédure marche correctement.
    Je veux l'exécuter sous sqlplus. Mon problème est que je ne sais pas comment invoquer la procédure à cause des valeurs retournées par la procédure et les afficher, d'autant plus que c'est une liste de noms qui est retournée.
    La voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    TYPE TabTypPointName IS TABLE OF geo_pt.point_name%TYPE INDEX BY BINARY_INTEGER;
    PROCEDURE AirwayPoints(this_airway_name IN VARCHAR2, TabGeopt OUT TabTypPointName, NbPoints OUT NUMBER) AS
    	indice BINARY_INTEGER := 0;
    	pos BINARY_INTEGER := 0;
    	TbAwysect TabTypAwysect;
    	TbGeopt TabTypPointName;
    	RecordAwysect awy_sect%ROWTYPE;
    	Nb NUMBER;
    BEGIN
    ...
    END AirwayPoints;
    Merci de m'indiquer l'appel à faire.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Points : 807
    Points
    807
    Par défaut
    Merci de m'indiquer l'appel à faire.
    Très certainement.

    Ouvrir SQL*Plus, se retrouver connecter.
    Ajouter ensuite un bloc declare, puis la déclaration des variables out. Ensuite un petit bloc begin, l'appel de la procedure, et vous pouvez utiliser des print_line pour voir les contenus, s'en suivra un END avec ;, et à la suite du retour à la ligne un /.

    Je ne saurais trop recommander de ne pas oublier le set serveroutput on.

  3. #3
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    Cela revient à faire une procédure PL/SQL pour appeler ma procédure PL/SQL, du coup je l'incorpore dans mon package : elle servira plusieurs fois.
    Voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    PROCEDURE CallAirwayPoints(this_airway_name IN VARCHAR2, this_airspace_env_name IN VARCHAR2) AS
    	indice BINARY_INTEGER := 0;
    	TbGeopt TabTypPointName;
    	Nb NUMBER;
    BEGIN
    	AirwayPoints(this_airway_name,this_airspace_env_name, TbGeopt, Nb);
    	DBMS_OUTPUT.PUT_LINE('>>>>>'||Nb);
    	FOR indice IN 1..Nb LOOP
    		DBMS_OUTPUT.PUT_LINE(indice||'  '||TbGeopt(indice));
    	END LOOP;
    END CallAirwayPoints;
    Et je l'appelle par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     SQL> call PATH.CallAirwayPoints('UZ709','MAASNEW');
    >>>>>5
    1  LANUL
    2  KUVEK
    3  RUPIN
    4  BARTU
    5  CIV
     
    Call completed.
     
    SQL>
    Et c'est parfait.
    Merci

  4. #4
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2006
    Messages : 142
    Points : 130
    Points
    130
    Par défaut
    Bonjour,
    ce n'est même pas la peine de faire une proc sctockée. Un bloc PL*SQL dans un script suffit :

    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
    DECLARE
      this_airway_name VARCHAR2 ;
      this_airspace_env_name VARCHAR2 ;
      indice BINARY_INTEGER := 0;
      TbGeopt TabTypPointName;
      Nb NUMBER;
     
    BEGIN
    	AirwayPoints(this_airway_name,this_airspace_env_name, TbGeopt, Nb);
    	DBMS_OUTPUT.PUT_LINE('>>>>>'||Nb);
    	FOR indice IN 1..Nb LOOP
    		DBMS_OUTPUT.PUT_LINE(indice||'  '||TbGeopt(indice));
    	END LOOP;
    END; 
    /
    La différence entre la théorie et la pratique, c'est qu'en théorie il n'y a pas de différence entre la théorie et la pratique. En pratique, si.

  5. #5
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    Merci à tous

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/04/2011, 11h19
  2. Réponses: 9
    Dernier message: 19/03/2008, 19h52
  3. Procédures stockées SQL Server, récupération sous Delphi
    Par rophi dans le forum Bases de données
    Réponses: 10
    Dernier message: 03/12/2007, 14h48
  4. Réponses: 7
    Dernier message: 20/08/2007, 13h49
  5. Réponses: 4
    Dernier message: 08/02/2007, 09h27

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