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 :

Table ou VArray en paramêtre d'une procédure stockée


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Table ou VArray en paramêtre d'une procédure stockée
    Bonjour,

    Je souhaiterais pouvoir passer un tableau (table ou varray, peu importe) en paramêtre d'une procédure stockée ... mais je n'y arrive pas !
    Je n'ai aucun soucis pour les paramêtres de type VARCHAR2, NUMBER etc... mais impossible de passer un tableau !!!
    Je ne trouve pas de réponse à ce problème dans les tutos ... est-ce faisable ou pas ?
    Si non, comment contourner le problème ???

    Merci pour vos réponses !

  2. #2
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    2 solutions :
    - soit tu crées ton tableau en entête d'un package
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SQL> create or replace package pack_dvp as
      2  type rec_dvp is table of number;
      3  end;
      4  /
    Package created.
     
    SQL> create or replace procedure proc_dvp (p_table in pack_dvp.rec_dvp) is
      2  begin
      3  null;
      4  end;
      5  /
    Procedure created.
    - soit tu crées un type objet de type tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SQL> create type table_dvp is table of number;
      2  /
    Type created.
     
    SQL> create or replace procedure proc_dvp (p_table in table_dvp) is
      2  begin
      3  null;
      4  end;
      5  /
    Procedure created.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci !

    J'ai donc fait la déclaration dans un package :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TYPE TAB_VARCHAR2 IS TABLE OF VARCHAR2(20);
    Et déclaré ma procédure de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CREATE OR REPLACE PROCEDURE MaProcedure(p1 IN VARCHAR2, p2 IN VARCHAR2,  p3 IN MonPackage.TAB_VARCHAR2) IS
    ...
    -> ma procédure compile ...

    Par contre, je dois appeler cette procédure dans une autre procédure stockée et je n'y arrive pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    param1 VARCHAR2(20);
    param2 VARCHAR2(20);
    param3 MonPackage.TAB_VARCHAR2;
     
    ...
     
    EXECUTE IMMEDIATE 'CALL maProcedure(:1, :2, :3)' USING param1, param2, param3;
    L'erreur est : PLS-00457: les expressions doivent être de type SQL

    Quel est le problème ?
    [/quote][/code]

  4. #4
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Oui avec execute immediate les expressions doivent être d'un type SQL.
    Donc dans ce cas seule la deuxième solution fonctionne.

    Mais pourquoi utilises-tu execute immediate et n'appelles-tu pas ta fonction comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maProcedure(param1, param2, param3);
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par plaineR
    Mais pourquoi utilises-tu execute immediate et n'appelles-tu pas ta fonction comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maProcedure(param1, param2, param3);
    Parceque la procédure à lancer n'est pas toujours la même ...
    En fait, je stocke dans une table un ensemble de "traitements" avec un certain nombre de paramêtres (jour de lancement, procédure associée etc...)
    Ma procédure "appelante", après avoir sélectionné les enregistrements correspondants à mes critères, appelle successivement les procédures correspondantes ...

    Je débute dans le domaine ... alors j'avoue que je patauge un peu !

Discussions similaires

  1. Passage d un nom de table en paramètre d'une procédure stockée
    Par Cedric33 dans le forum Développement
    Réponses: 22
    Dernier message: 10/02/2009, 16h12
  2. Réponses: 8
    Dernier message: 09/12/2008, 10h04
  3. Réponses: 2
    Dernier message: 27/06/2006, 15h21
  4. Passer le nom de colonne en paramètre d'une procédure stocké
    Par theartist dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 04/01/2005, 15h39
  5. Un fichier .bmp comme paramètre d'une Procédure stockée
    Par FONKOU dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/10/2004, 17h56

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