Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/01/2008, 12h56   #1
Nouveau Membre du Club
 
Inscription : novembre 2006
Messages : 113
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 113
Points : 32
Points : 32
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
fatati est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2008, 13h49   #2
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
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 866
Points : 3 448
Points : 3 448
2 solutions :

- soit tu crées un type basé :
Code :
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 :
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é
__________________
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.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2008, 16h47   #3
Nouveau Membre du Club
 
Inscription : novembre 2006
Messages : 113
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 113
Points : 32
Points : 32
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 :
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
fatati est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2008, 17h09   #4
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 319
Points : 5 837
Points : 5 837
Et pourquoi fait tu un ?
Pour être certain que la collection ne contient rien ?
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2008, 17h12   #5
Nouveau Membre du Club
 
Inscription : novembre 2006
Messages : 113
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 113
Points : 32
Points : 32
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
fatati est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2008, 17h23   #6
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 319
Points : 5 837
Points : 5 837
Un exemple vite trouvé.
Code :
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;
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h58.


 
 
 
 
Partenaires

Hébergement Web