Bonjour,

Voila je cherche a faire une chose un peu particulière, je veux faire une vur sur une fonction utilisant des parametres, mais passer ces parametres dans la WHERE clause lors d'une requete sur ma vue.

Je suis obligé de passer par la WHERE clause car en fait j'utilise un outil qui traduit automatiquement mes requêtes en SQL, et cet outil n'est normalement fait que pour faire des requêtes simple sur des tables ou des vues.

Voici un exmple de code que j'utilise pour créer une fonction:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
create or replace type virtual_table_type AS OBJECT (item_id number(6), internal_text varchar(32));
create or replace type virtual_table_type_set as table of virtual_table_type;
create or replace function virtual_table( p_num_rows in number ) return virtual_table_type_set PIPELINED IS
    begin
        for i in 1 .. p_num_rows
        loop
            pipe row( virtual_table_type(i, 'TEST' || TO_CHAR(i)) );
        end loop;
       return; -- note return with no value!
   end;
qui donne le resultat suivant quand on l'appel

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
select * from TABLE( virtual_table(5) );
 
 ITEM_ID INTERNAL_TEXT
 ------- -------------
       1 TEST1
       2 TEST2
       3 TEST3
       4 TEST4
       5 TEST5
J'aimerais donc créer une vue sur cette fonction afin d'obtenir le même résultat, l'appel à la vue se ferait comme ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT * FROM view_virtual_table WHERE p_num_rows = 5
On obtiendrais alors le même résultat que précédement.

Je ne sais pas si c'est possiblt ou non ou alors si je dois créer d'autres object dans ma base pour y arriver, peut en passant pas des table temporaire ou autres.

Merci d'avance pour votre aide:

Pierre