devoirs?
c'est SQL de base. En général, vous rejoindriez les deux tables.
begin
for r_row in (select b.*
from tab1 a
inner join tab2 b
on b.id = a.id)
loop
null; -- do whatever
end loop;
end;
/
si vous avez un curseur existant et ne peut pas changer
par exemple où your_cursor
est juste une colonne ID
retournaient.
begin
open your_cursor;
loop
fetch your_cursor into v_id;
exit when your_cursor%notfound;
for r_row in (select * from tab2 b where b.id = v_id)
loop
null; -- do whatever here.
end loop;
end loop;
end;
/
modifier: selon commentaires:
certaines données de l'échantillon:
SQL> create table table1 (id number primary key, name varchar2(20));
Table created.
SQL> create table table2 (id number, col1 varchar2(20), col2 varchar2(20));
Table created.
SQL> insert into table1 values (1, 'test');
1 row created.
SQL> insert into table1 values (2, 'foo');
1 row created.
SQL>
SQL> insert into table2 values (1, 'John', 'Smith');
1 row created.
SQL> insert into table2 values (1, 'Peter', 'Jones');
1 row created.
SQL> insert into table2 values (1, 'Jane', 'Doe');
1 row created.
SQL> insert into table2 values (2, 'Nina', 'Austin');
1 row created.
SQL> insert into table2 values (2, 'Naman', 'Goyal');
1 row created.
SQL> commit;
Commit complete.
créer un type pour maintenir la structure de retour. noter que les types de données doivent correspondre aux types de données des tables table1
et table2
(% de type ne fonctionnera pas, alors assurez-vous qu'ils correspondent)
SQL> create type my_obj as object (
2 id number,
3 name varchar2(20),
4 col1 varchar2(20),
5 col2 varchar2(20)
6 );
7/
Type created.
SQL> create type my_tab as table of my_obj;
2/
Type created.
maintenant créer votre fonction (vous pouvez mettre ceci dans un paquet si, votre vrai code, vous l'avez comme ça).
SQL> create function function1
2 return my_tab pipelined
3 is
4 begin
5 for r_row in (select t1.id, t1.name, t2.col1, t2.col2
6 from table1 t1
7 inner join table2 t2
8 on t1.id = t2.id)
9 loop
10 pipe row(my_obj(r_row.id, r_row.name, r_row.col1, r_row.col2));
11 end loop;
12 end;
13/
Function created.
SQL>
SQL> select *
2 from table(function1);
ID NAME COL1 COL2
---------- -------------------- -------------------- --------------------
1 test John Smith
1 test Peter Jones
1 test Jane Doe
2 foo Nina Austin
2 foo Naman Goyal
vous pouvez passer des entrées si nécessaire dans cette fonction par exemple table(function1('a', 'b'));
etc ..
Merci pour votre réponse. Dans le code ci-dessous - –
Merci pour votre réponse. Le code provided- pour r_row en (select * from tab2 b où b.id = v_id) boucle null; - Faites n'importe quoi ici. boucle d'extrémité; Dans ce code, je vais obtenir des valeurs de tab2, mais je veux garder ces valeurs de tab2 pour quelques ID et retourner toutes ces valeurs de procédure stockée. Comment puis-je faire cela .. –
@NamanGoyal comment allez-vous les utiliser? nous pouvons les renvoyer comme un tableau assez facilement. cela aiderait-il?ou voulez-vous que la sortie corresponde à un ensemble de résultats (par exemple, voulez-vous sélectionner select id de your_func() 'ou' return_array = your_func() ') – DazzaL