Bonjour à tous

J'ai créé une fonction qui me retourne le nom d'in client en varchar2. Le code de cette fonction est :

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
CREATE OR REPLACE function f_raison  (wcodpar varchar2, wtyppar integer)
return varchar2 is
wraison              varchar2(50);
 
BEGIN
--06-2004 : GE Creation d une fontion pour recuperer la raison d un tier en fonction
--du wcodpar et wtyppar passes en parametre
-- Script $FONCTION/tiers2000.sql
 
select raison
    into wraison
    from tiers2000
    where codpar=wcodpar
    and typpar=wtyppar;
 
return (wraison);
 
EXCEPTION
        when NO_DATA_FOUND then
        raise_application_error(-20500,' (F_RAISON) : Code Tiers ou Typpar Invalide');
 
END f_raison;
/
J'utilise cette fonction dans la création d'une vue, voici le code

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
CREATE OR REPLACE VIEW TAB_STAT_MARCHE
(FAM, LFAM, RGP_FAM, LRGP_FAM, CODPAR, 
 RAISON, CAN, CAN_1, PAYS, LIBPAYS, 
 CODVRP, NOMVRP, ART, BNB, BCT, 
 QTC, PNF, MTT, CA_REM, REM2, 
 JPP, FAME, LIBFAME, COND, RGP, 
 RGP2)
AS 
select
t.cfam1||t.cfam2
,f_parama2('FCL',t.cfam1||t.cfam2,t.pays)
,p.rgp2
,f_parama('FCL2',p.rgp2)
,h.codpar
,f_raison(h.codpar,1)
,pc.can
,pc.can_1
,t.pays
,f_parama('PAYS',t.pays)
,t.codvrp
,f_nomvrp(t.codvrp)
,f.art
,f.bnb
,f.bct
,f.qtc
,f.pnf
,nvl(qtc,0) * nvl(pnf,0)
,((nvl(f.qtc,0)*nvl(f.pnf,0))
-(decode(nvl(f.tsr,'x'),'P',0,nvl(f.qtc,0)*nvl(f.pnf,0)
*nvl(h.remfac,0)/100)))
,f.rem2
,a.jpp
,a.fame
,f_parama('FAME',a.fame)
,a.cond
,lc.rgp
,lc.rgp2
from param2000 p, libcond lc, pclca2000 pc, artnew a, client t, historic h, facture f
where f.cde = h.cde
and f.liv = h.liv
and t.codpar=h.codpar
and t.typpar=1
and p.rub='FCL'
and p.cod=t.cfam1||t.cfam2 and p.cod2=t.pays
and a.art=f.art
and pc.codpar=t.codpar
and pc.typpar=t.typpar
and lc.cond=a.cond
/
Lorsque je regarde ensuite les champs de cette vue, le champ qui utilise la fonction f_raison a pour définition varchar2(4000) !
Voir ci dessous :

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
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 FAM                                                VARCHAR2(3)
 LFAM                                               VARCHAR2(4000)
 RGP_FAM                                            VARCHAR2(5)
 LRGP_FAM                                           VARCHAR2(4000)
 CODPAR                                    NOT NULL VARCHAR2(6)
 RAISON                                             VARCHAR2(4000)
 CAN                                                NUMBER
 CAN_1                                              NUMBER
 PAYS                                               VARCHAR2(3)
 LIBPAYS                                            VARCHAR2(4000)
 CODVRP                                             VARCHAR2(5)
 NOMVRP                                             VARCHAR2(4000)
 ART                                                NUMBER(5)
 BNB                                                VARCHAR2(40)
 BCT                                                VARCHAR2(20)
 QTC                                                NUMBER
 PNF                                                NUMBER
 MTT                                                NUMBER
 CA_REM                                             NUMBER
 REM2                                               VARCHAR2(3)
 JPP                                                VARCHAR2(2)
 FAME                                               VARCHAR2(3)
 LIBFAME                                            VARCHAR2(4000)
 COND                                      NOT NULL NUMBER(3)
 RGP                                                VARCHAR2(2)
 RGP2                                               VARCHAR2(2)

Comme vous pouvez le voir le souci est le même avec les autres fonction utilisé dans la vue.

Pour des problème de traitement, nous recopions la vue dans une table en faisant un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
create table tab2 as select * from tab_stat_marche
Est ce que j'ai constaté est un problème ? est ce qu'il est possible de donner un taille à une variable de retour ?

J'espère avoir été clair