est ici un paquet avec deux fonctions canalisées:fonction Pipelined appeler une autre fonction pipelinée
create or replace type tq84_line as table of varchar2(25);
/
create or replace package tq84_pipelined as
function more_rows return tq84_line pipelined;
function go return tq84_line pipelined;
end tq84_pipelined;
/
Ant le corps de package correspondant:
create or replace package body tq84_pipelined as
function more_rows return tq84_line pipelined is
begin
pipe row('ist');
pipe row('Eugen,');
return;
end more_rows;
function go return tq84_line pipelined is
begin
pipe row('Mein');
pipe row('Name');
/* start */
for next in (
select column_value line from table(more_rows)
)
loop
pipe row(next.line);
end loop;
/* end */
pipe row('ich');
pipe row('weiss');
pipe row('von');
pipe row('nichts.');
end go;
end tq84_pipelined;
/
L'important est que aller sorte de appels more_rows
avec le for next in ...
entre /* start */
et /* end */
Je peux utiliser le package comme suit:
select * from table(tq84_pipelined.go);
Tout cela est bien beau, mais j'espère que je pourrais remplacer les lignes entre /* start */
et /* end */
avec un simple appel de more_rows
.
Cependant, ce n'est évidemment pas possible, car il génère un PLS-00221: 'MORE_ROWS' n'est pas une procédure ou est indéfini.
Donc, ma question: est-ce qu'il n'y a vraiment aucun moyen de raccourcir la boucle?
EDIT
De toute évidence, des réponses à ce jour, ma question n'a pas été claire.
L'emballage, comme indiqué, fonctionne.
Mais je suis embêté avec les 6 (c'est-à-dire: SIX) lignes entre les marqueurs /* start */
et /* end */
. Je voudrais les remplacer par une seule ligne. Mais je n'ai trouvé aucun moyen de le faire.
Merci pour votre réponse. Mais cela n'aide pas mon 'problème' car avec cette construction je n'ai pas seulement le 'pour ... boucle ...la construction de la boucle d'extrémité, mais aussi une collecte de masse supplémentaire. Je veux dire, ce n'est pas un problème, car je peux vivre avec, mais je pensais que ce serait visuellement plus attrayant avec un simple appel d'une ligne à plus de lignes sans plus de boucles et quoi d'autre. –