都市とその経度および緯度を含む表があります。ある都市からこの表の他のすべての都市までのすべての距離を計算し、それらの距離を返す関数をPL/SQLに記述する必要があります。私はすでに2都市間の距離を計算する関数を作っています。私はカーソルで作業する必要があることを知っています。任意のヒント?ここでPL/SQLで1つの都市からすべての都市までの距離を計算する関数
`CREATE TABLE Rheinland_Staedte
(Stadtname VARCHAR2(25),
Noerdlicher_Grad NUMBER,
Noerdliche_Minute NUMBER,
oestlicher_Grad NUMBER,
oestliche_Minute NUMBER,
CONSTRAINT rhein_St UNIQUE (Stadtname,Noerdlicher_Grad,Noerdliche_Minute,oestlicher_Grad,oestliche_Minute)
);
INSERT INTO Rheinland_Staedte
VALUES ('Aachen',50,47,6,5);
INSERT INTO Rheinland_Staedte
VALUES ('Bonn',50,44,7,6);
INSERT INTO Rheinland_Staedte
VALUES ('Düsseldorf',51,14,6,47);
INSERT INTO Rheinland_Staedte
VALUES ('Duisburg',51,25,6,4);
INSERT INTO Rheinland_Staedte
VALUES ('Essen',51,27,7,1);
INSERT INTO Rheinland_Staedte
VALUES ('Köln',50,56,6,57);
INSERT INTO Rheinland_Staedte
VALUES ('Krefeld',51,20,6,34);
INSERT INTO Rheinland_Staedte
VALUES ('Leverkusen',51,2,6,59);
INSERT INTO Rheinland_Staedte
VALUES ('Mönchengladbach',51,11,6,27);
INSERT INTO Rheinland_Staedte
VALUES ('Mülheim an der Ruhr',51,26,6,53);
INSERT INTO Rheinland_Staedte
VALUES ('Oberhausen',51,28,6,52);
INSERT INTO Rheinland_Staedte
VALUES ('Remscheid',51,11,7,12);
INSERT INTO Rheinland_Staedte
VALUES ('Solingen',51,10,7,5);
INSERT INTO Rheinland_Staedte
VALUES ('Wuppertal',51,16,7,13);
create or replace PACKAGE GEOGRAPHICAL_PACKAGE IS
FUNCTION DISTANCE(stadt1 VARCHAR2
,stadt2 VARCHAR2) RETURN NUMBER ;
END GEOGRAPHICAL_PACKAGE;
/
create or replace PACKAGE BODY GEOGRAPHICAL_PACKAGE IS
FUNCTION DISTANCE(stadt1 VARCHAR2
,stadt2 VARCHAR2) RETURN NUMBER IS
v_norgr Rheinland_Staedte.Noerdlicher_Grad%TYPE;
v_nordmin Rheinland_Staedte.Noerdliche_Minute%TYPE;
v_ostgr Rheinland_Staedte.oestlicher_Grad%TYPE;
v_ostmin Rheinland_Staedte.oestliche_Minute%TYPE;
v_norgr1 Rheinland_Staedte.Noerdlicher_Grad%TYPE;
v_nordmin1 Rheinland_Staedte.Noerdliche_Minute%TYPE;
v_ostgr1 Rheinland_Staedte.oestlicher_Grad%TYPE;
v_ostmin1 Rheinland_Staedte.oestliche_Minute%TYPE;
latitude_min NUMBER;
longitude_min NUMBER;
latitude_min1 NUMBER;
longitude_min1 NUMBER;
distance NUMBER;
BEGIN
SELECT Noerdlicher_Grad,Noerdliche_Minute,oestlicher_Grad,oestliche_Minute INTO v_norgr,v_nordmin,v_ostgr,v_ostmin FROM Rheinland_Staedte WHERE STADTNAME=stadt1;
SELECT Noerdlicher_Grad,Noerdliche_Minute,oestlicher_Grad,oestliche_Minute INTO v_norgr1,v_nordmin1,v_ostgr1,v_ostmin1 FROM Rheinland_Staedte WHERE STADTNAME=stadt2;
latitude_min:=v_norgr+v_nordmin/60;
longitude_min:=v_ostgr+v_ostmin/60;
latitude_min1:=v_norgr1+v_nordmin1/60;
longitude_min1:=v_ostgr1+v_ostmin1/60;
distance:= SQRT((latitude_min - latitude_min1)*(latitude_min - latitude_min1) + (longitude_min -longitude_min1)*(longitude_min -longitude_min1));
return distance*60;
END;
END GEOGRAPHICAL_PACKAGE;
/
は、それはあなたが出力を取得したいが、あなたはあなたの関数では、このようなカーソルを返すことができますどのようにdepeneds何両市
あなたの質問を編集し、あなたのテーブルの構造と呼び出しを含めてくださいあなたの関数の署名。ありがとう。 –
なぜあなたはカーソルが必要だと知っていますか?これは[XY問題](http://xyproblem.info/)のように思われます。答えがカーソルであると仮定するのではなく、実際に解決しようとしている問題は何ですか? – MT0
私は緯度と経度を度と分で表した都市名を持っています。私は1つの都市のパラメータでfunktionを書く必要があります。テーブルから他のすべての都市までの距離を返します。それはカーソルの仕事ではありませんか? – Veni