Bonjour à tou(te)s,

Je débute en PL/SQL et je veux écrire une fonction qui récupère automatiquement dans une chaîne la concaténation des colonnes d'une table fournie en paramètre.
Exemple : soit la table A ayant 2 colonnes X et Y alors le résultat de l'appel de cette fonction à laquelle on fournit le paramètre 'A' est : (X, Y)

Voici l'erreur que j'obtiens quand j'essaye de la déclarer sous sqlplus :
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
  1  CREATE OR REPLACE FUNCTION listColumns (PCname_table VARCHAR2, PCowner VARCHAR2) RETURN VARCHAR
  2    LClist_columns VARCHAR2(1000);
  3    LCcolumn_fetched VARCHAR2(50);
  4    CURSOR LCuTable IS
  5    SELECT COLUMN_NAME
  6    FROM DBA_TAB_COLUMNS
  7    WHERE UPPER(OWNER) = PCowner
  8    AND TABLE_NAME = PCname_table
  9    ORDER BY COLUMN_ID;
 10  BEGIN
 11    LClist_columns := '';
 12    OPEN LCuTable;
 13      LOOP
 14        FETCH LCuTable INTO LCcolumn_fetched;
 15        EXIT WHEN LCuTable%NOTFOUND;
 16        LClist_columns := LClist_columns || LCcolumn_fetched || ', ';
 17      END LOOP;
 18      LClist_columns := '(' || SUBSTR( LClist_columns, 1, LENGTH(LClist_columns) ) || ')';
 19    CLOSE LCuTable;
 20    RETURN LClist_columns;
 21* END;
SQL> /
 
Attention : Fonction créée avec erreurs de compilation.
 
SQL> show error
Erreurs pour FUNCTION LISTCOLUMNS :
 
LINE/COL ERROR
-------- -----------------------------------------------------------------
5/3      PL/SQL: SQL Statement ignored
5/10     PLS-00320: the declaration of the type of this expression is
         incomplete or malformed
 
6/8      PLS-00201: identifier 'SYS.DBA_TAB_COLUMNS' must be declared
14/7     PL/SQL: SQL Statement ignored
Pour information si j'utilise un "bloc anonyme" (sorry si j'emploie un mot à la place d'un autre, je suis débutant ) alors l'exécution se déroule sans souci et me retourne la chaine que je demande.

Merci du moindre coup de main.