ref_cursor を for ループ内の変数に割り当て、関数の最後に返そうとしています。ローカル カーソルが複数の結果を取得した場合のループ。
コードのどこでエラーが発生したかを確認しました。ループ内の現在のポイントの ref_cursor を取得し、それを変数に割り当ててから関数に返すことができるループを作成する方法がわかりません。誰かがそれを行う方法を理解するのを手伝ってもらえますか? 以下は、Google検索に関する読み取りに基づくロジックのi回目の試みです。
エラーは「PLS-00382: 式が間違った型です」であり、このエラーに基づいて正しい変数型を割り当てていないことは明らかですが、エラーのある以下のコードは、私がやりたいことと私が何をしたいのかを示しています達成するのに助けが必要です。
FUNCTION GET_PARCEL(p_lat in number, p_long in number) return sys_refcursor
IS
v_distance number(10) := 100000000;
v_shortest_dist number(10) := v_distance;
v_centroid SDO_GEOMETRY;
v_rc_ref_cursor sys_refcursor;
v_ref_geom SDO_GEOMETRY := mdsys.SDO_GEOMETRY(2001, 8311, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(120.3214, -10.7088));
cursor query_cursor is select * from PARCEL_TABLE where code = 20134;
BEGIN
for query_row in query_cursor loop
v_centroid := SDO_GEOM.SDO_CENTROID(query_row.geometry, 0.05);
IF (v_centroid is not null) then
v_distance := SDO_GEOM.SDO_DISTANCE(v_centroid, v_ref_geom, 0.05);
IF v_distance < v_shortest_dist THEN
v_shortest_dist := v_distance;
v_rc_ref_cursor := query_row; -- Error on this line
END IF;
ELSE
DBMS_OUTPUT.PUT_LINE('Centroid is not initialised for some reason.');
END IF;
end loop;
return v_rc_ref_cursor;
END;