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 :

Passage d'une variable de type table à une procédure


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 85
    Points : 62
    Points
    62
    Par défaut Passage d'une variable de type table à une procédure
    Bonjour,

    Mon but est très simple. Je cherche à passer un paramètre de type TABLE à une procédure. Et cette table est de type RECORD. Cela est défini dans un package. En voici un extrait,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TYPE range_type IS RECORD (start_sal emp.sal%TYPE,
                               end_sal emp.sal%TYPE);
     
    TYPE range_array_type IS TABLE OF range_type;
    Ainsi, j'ai une procédure, bien entendu dans le même package, avec la définition suivante: PKG_SALAIRE.INSERT_RANGE(vi_ranges IN range_array_type). Je veux utiliser utiliser cette procédure pour insérer des valeurs. Donc je procède comme suit avec SQL Developper:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DECLARE
     
    vi_ranges PKG_SALAIRE.range_array_type;
     
    BEGIN
     
    vi_ranges := PKG_SALAIRE.range_array_type ( pkg_salaire.range_type(5500,6000), 
                                                pkg_salaire.range_type(6001,6500),
                                                pkg_salaire.range_type(6501,7000));
    PKG_SALAIRE.INSERT_RANGE (
    vi_ranges => vi_ranges);
     
    END;
    J'ai une erreur PLS-00222 : No function with name 'range_type' exists in this scope. Et lorsque j'enlève pkg_salaire.range_type, j'ai l'erreur PLS-00306 : wrong number or type of arguments in call to range_array_type !

    J'avoue que je m'y connais peu en manipulation de collection !

    Merci de votre réponse

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Je ne pense pas que votre TYPE soit valide, la syntaxe IS RECORD ne me dit rien, et je n'y trouve pas non plus référence dans la documentation Oracle.

    Avec OBJECT ça devrait mieux fonctionner :
    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
    CREATE OR REPLACE TYPE range_type IS OBJECT
    (    start_sal number,
         end_sal   number
    );
    -- Type created
     
    CREATE OR REPLACE TYPE range_array_type IS TABLE OF range_type;
    -- Type created
     
    select range_array_type ( range_type(5500,6000), 
                              range_type(6001,6500),
                              range_type(6501,7000)) as res
      from dual;
     
    RES
    (DATASET)
     
    -- Dans le DATASET :
    START_SAL	END_SAL
    5500		6000
    6001		6500
    6501		7000

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 85
    Points : 62
    Points
    62
    Par défaut
    J'ai apporté le changement dans la spécification du package et tenté de compiler. J'ai obtenu l'erreur PLS-00540: object not supported in this context. Et étonnament ça compile avec IS RECORD ! Mais si je peux me permettre IS RECORD me semble assez largement utilisé et se retrouve également dans la doc ORACLE :http://download.oracle.com/docs/cd/B...ollections.htm

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Effectivement, mea culpa !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 85
    Points : 62
    Points
    62
    Par défaut
    Alors je souhaite tester la procédure stockée. Comment dois-je faire ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/12/2010, 08h55
  2. ré-initialiser un identity sur une variable de type table
    Par laurent-devel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 31/03/2008, 19h39
  3. Réponses: 5
    Dernier message: 22/01/2008, 09h54
  4. [Free Pascal] [2.2] Impossible d'assigner une variable de type T à une variable de type T
    Par Hibou57 dans le forum Free Pascal
    Réponses: 3
    Dernier message: 12/10/2007, 12h31
  5. Réponses: 2
    Dernier message: 10/04/2007, 12h39

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