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 :

Passer un parametre de type tableau à une procédure


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 113
    Par défaut Passer un parametre de type tableau à une procédure
    Bonjour,

    SVP j'ai un problème bloquant...
    je veux créer un procédure qui fait un certain traitement et qui va me retourner un la fin un tableau qui contient des chaines de caractéres sachant que le nombre de ces chaines de caractéres est inconnu.
    J'ai essayé de crée la procédure en lui passant comme paramétre 'Table of varchar 2 ', Table' tout court et ça marche pas pouvea vous m'aider...j'ai besoin de votre aide


    Merci infiniment

  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
    Par défaut
    2 solutions :

    - soit tu crées un type basé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SQL> create type typ1 is table of number;
      2  /
    Type created.
     
    SQL> create or replace procedure p1 (p1 in typ1) is
      2  begin
      3     ...
      4  end;
      5  /
    Procedure created.

    - soit tu déclares un type dans un entête de 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 pack1 is
      2  type typ is table of  number;
      3  end;
      4  /
    Package created.
     
    SQL> create or replace procedure p2 (p1 in pack1.typ) is
      2  begin
      3  ...
      4  end;
      5  /
    Procedure created.

    - soit tu crées un type basé

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 113
    Par défaut
    Merci infiniment pour l'aide,

    mais j'ai tjrs une petite question, j'ai opté pour la première solution...
    mais la procédure ne marche pas :
    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
    23
    24
    25
    26
    27
    28
    29
     
    PROCEDURE PR_ECRAN  (typ_ecran in    varchar2,
                                    pas         in number,
                                    CODSTA    out   COD ,
                                    NbLign    out  number)
    as
    begin
    declare
     
    	i                       number(2);
     
     
     
    begin
     
                    CODSTA.delete;
     
                    i:=1;
                    while condition
                    loop
     
    					CODSTA(i):=v_tst_tmp;
    					i:=i+1;
     
                    end loop;
                    NbLign:=CODSTA.count;
    end;
     
    end;
    j'ai l'erreur suivante comme reponce:

    Error -6531: ORA-06531: Reference to uninitialized collection


    SVP avez vous un idéee ça bloque une fois ça pointe sur CODSTA.delete;
    Merci d'avance

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Et pourquoi fait tu un ?
    Pour être certain que la collection ne contient rien ?

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 113
    Par défaut
    t'as raison
    mais si j'enleve le meme pb se pose pendant l'affectation

    CODSTA(i):=v_tst_tmp;

    a vrai dire au debut j'ai pas mis le delete mais à force de chercher un solution je l'ai mis

    ...
    Merci d'avance

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Un exemple vite trouvé.
    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
     
    create or replace type str2tblType as table of varchar2(10)
    /
    create or replace function str2tbl
    ( p_str in varchar2)
    return str2tblType
    as
      l_str  Varchar2(10) := p_str;
      l_data str2tblType := str2tblType();
    begin
      For i in 1..length(p_str)
      Loop
        l_data.extend;
        l_data(l_data.count) := SubStr(l_str,1,1); 
        l_str := SubStr(p_str,i+1);
      End Loop;
      --
      return l_data;      
    end;

Discussions similaires

  1. Réponses: 11
    Dernier message: 27/06/2007, 15h06
  2. passer deux parametres dans navigateurl d'une datalist
    Par imanesl dans le forum ASP.NET
    Réponses: 2
    Dernier message: 24/04/2007, 10h40
  3. Passer en parametre le nom d'une base
    Par nanmi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 23/02/2007, 13h09
  4. Passer un tableau à une procédure stockée
    Par biroule dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/09/2004, 18h21

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