2017-04-06 23 views
0

"gps_coord"というプロシージャがあります。 2つのパラメータが必要で、レコードを返す必要があります。しかし、私はそれがどうやってできるのか分かりません。事前のおかげで;)プロシージャのPL/SQL戻りレコード

CREATE OR REPLACE PROCEDURE gps_coord(v_x IN FLOAT, 
             v_y IN FLOAT, v_result out result_type) 
IS 
TYPE result_type IS RECORD(
    v_km VARCHAR2(50), 
    v_objID VARCHAR2(50) 
); 

v_out result_type; 
BEGIN 


select P.KM , P.OBJECTID INTO v_out from SDE.POINTS p where  sde.st_intersects(P.SHAPE,sde.st_buffer(sde.st_transform(sde.st_point(v_y,v_x,4326),32639) ,5000))=1; 
dbms_output.put_line('km: ' || v_out.v_km || 'objid: ' || v_out.v_objID); 
END; 
+0

レコードタイプは、スキーマ・レベルで宣言されなければならないパラメータとしてレコードタイプを使用するように、あなたのケースでスタンドアロンの手順を持って、 –

+0

@ammoQが正しい...手続きの外で宣言しなければなりません。 – Seyran

+0

[this](http://stackoverflow.com/questions/13225532/is-it-possible-to-use-return-in-stored-procedure)の質問と回答を見てください。 –

答えて

1

はこれを試してみてください。それが役に立てば幸い。

--Object type creation 
CREATE OR REPLACE TYPE result_type 
IS 
    OBJECT 
    (
    v_km VARCHAR2(50), 
    v_objID VARCHAR2(50)); 

--Table type 
CREATE OR REPLACE type result_tab 
IS 
    TABLE OF result_type; 

    --Procedure creation and out the collection 
CREATE OR REPLACE 
PROCEDURE gps_coord(
    v_x IN FLOAT, 
    v_y IN FLOAT, 
    v_result OUT result_tab) 
AS 
    v_out result_tab; 
BEGIN 
    SELECT result_type(P.KM , P.OBJECTID) BULK COLLECT 
    INTO v_out 
    FROM SDE.POINTS p 
    WHERE sde.st_intersects(P.SHAPE,sde.st_buffer(sde.st_transform(sde.st_point(v_y,v_x,4326),32639) ,5000))=1; 
    FOR i IN v_out.FIRST..v_out.LAST 
    LOOP 
    dbms_output.put_line(v_out(i).v_km||' '||v_out(i).v_objID); 
    END LOOP; 
END; 
+0

ありがとうございました@AvrajitRoy;)質問できますか?私は別の問題を抱えています。プロシージャをテストするとエラーが表示されます: "値v_xのバリアント変換エラー"。手伝って頂けますか ?事前に感謝します –

+0

プロシージャに渡す入力は何ですか? –

+0

v_x = 40.889786およびv_y = 45.994247 –

1
CREATE OR REPLACE TYPE result_type IS OBJECT 
(
    v_km NVARCHAR2(50), 
    v_objID NVARCHAR2(50) 
) 


CREATE OR REPLACE PROCEDURE gps_coord(v_x IN NVARCHAR2, v_y IN NVARCHAR2, v_result out result_type) 
IS 
    BEGIN 
    select P.KM , P.OBJECTID INTO v_result.v_km , v_result.v_objID from SDE.POINTS p where sde.st_intersects(P.SHAPE,sde.st_buffer(sde.st_transform(sde.st_point(v_y,v_x,4326),32639) ,5000))=1; 
    end; 
関連する問題