大家好,我有以下功能:
function Entfernung(v_stadt Rheinlandstädte%rowtype)
Return Abstandstabelle is
tabelle ABSTANDSTABELLE;
cursor c_städte IS
Select *
From Rheinlandstädte
;
v_andereStadt Rheinlandstädte%rowtype;
v_entfernung float;
begin
Open c_städte;
LOOP
fetch c_städte into v_andereStadt;
v_entfernung := Abstand(v_stadt, v_andereStadt);
tabelle(v_andereStadt.stadtname) := v_entfernung;
exit when c_städte%NOTFOUND;
END Loop;
close c_städte;
return tabelle;
end Entfernung;
如何在oracle中调用此函数。参数是rowtype,我不能使用DUAL的SELECT函数;
答案 0 :(得分:0)
一个简单的例子:
SQL> create table tab_par(a number, b number)
2 /
Table created.
SQL> create or replace type tab_numbers as table of number
2 /
Type created.
SQL> create or replace function fun_par (r IN tab_par%rowtype) return tab_numbers is
2 retVal tab_numbers := new tab_numbers();
3 begin
4 retVal.extend(2);
5 retVal(1) := r.a;
6 retVal(2) := r.b;
7 return retVal;
8 end;
9 /
Function created.
SQL> insert into tab_par values ( 10, 5);
1 row created.
SQL> declare
2 r tab_par%rowtype;
3 n tab_numbers;
4 begin
5 select *
6 into r
7 from tab_par
8 where rownum = 1;
9 -- call your function
10 n := fun_par(r);
11 dbms_output.put_line('n = ' || n(1));
12 dbms_output.put_line('n = ' || n(2));
13 end;
14 /
n = 10
n = 5
PL/SQL procedure successfully completed.
SQL>
答案 1 :(得分:0)
这里是我如何调用这个函数,这个函数在包中:
DECLARE
v_stadtname_a VARCHAR(20):='Düsseldorf';
v_stadtA Rheinlandstädte%rowtype;
tabelle GEOGRAPHICAL_PACKAGE.ABSTANDSTABELLE;
v_stadt Rheinlandstädte%rowtype;
CURSOR c_sta IS
SELECT * FROM Rheinlandstädte;
BEGIN
SELECT * INTO v_stadtA
FROM rheinlandstädte
WHERE stadtname=v_stadtname_a;
OPEN c_sta;
LOOP
FETCH c_sta INTO v_stadt;
EXIT WHEN c_sta%NOTFOUND;
tabelle := GEOGRAPHICAL_PACKAGE.Entfernung(v_stadtA);
dbms_output.put_line('Abstand zwischen '||v_stadtA.stadtname||' und '||
v_stadt.stadtname||' beträgt: '||tabelle(v_stadt.stadtname)||' km.');
END LOOP;
CLOSE c_sta;
END;