私はあなたが望む出力の種類を知らないが、多分このような推測のビット:私はp_
と私のパラメータを前に付けている
create or replace procedure p_ts_collisions_search
(p_col_mrn obiee_ts_collision_fact_vw.collision_master_record_number%type
, p_township obiee_ts_collision_fact_vw.township%type
, p_county obiee_ts_collision_fact_vw.county%type)
as
rc sys_refcursor;
begin
open rc for
select collision_master_record_number
, city
, road_name
from obiee_ts_collision_fact_vw
where collision_master_record_number = p_col_mrn
and township = p_township
and county = p_county;
dbms_sql.return_result(rc);
end;
注意と区別するためにand township = township
はあまり達成していないため、データベースの列。 (別の方法として、プロシージャ名にラベルを付けることもできます(例:p_ts_collisions_search.township
)。)
ダミーデータ:
create view obiee_ts_collision_fact_vw
as
select 1 as collision_master_record_number
, 'London' as city
, 'Bond Street' as road_name
, 'West End' as township
, 'Lalaland' as county
from dual;
SQL * Plusでのデモ:クライアントは暗黙の結果を処理できるようにする必要があるよう
SQL> exec p_ts_collisions_search(1, 'West End', 'Lalaland');
PL/SQL procedure successfully completed.
ResultSet #1
COLLISION_MASTER_RECORD_NUMBER CITY ROAD_NAME
------------------------------ ------ -----------
1 London Bond Street
しかし、それは、どこでも動作しません。
SQL> call p_ts_collisions_search(1, 'West End', 'Lalaland');
call p_ts_collisions_search(1, 'West End', 'Lalaland')
*
ERROR at line 1:
ORA-29478: Implicit result cannot be returned through this statement.
ORA-06512: at "SYS.DBMS_SQL", line 2785
ORA-06512: at "SYS.DBMS_SQL", line 2779
ORA-06512: at "WILLIAM.P_TS_COLLISIONS_SEARCH", line 17
また、結果セットをout
パラメータで明示的に返すこともできます。
create or replace procedure p_ts_collisions_search
(p_col_mrn obiee_ts_collision_fact_vw.collision_master_record_number%type
, p_township obiee_ts_collision_fact_vw.township%type
, p_county obiee_ts_collision_fact_vw.county%type
, p_results out sys_refcursor)
as
begin
open p_results for
select collision_master_record_number
, city
, road_name
from obiee_ts_collision_fact_vw
where collision_master_record_number = p_col_mrn
and township = p_township
and county = p_county;
end;
デモ:
SQL> var results refcursor
SQL> set autoprint on
SQL> exec p_ts_collisions_search(1, 'West End', 'Lalaland', :results);
PL/SQL procedure successfully completed.
COLLISION_MASTER_RECORD_NUMBER CITY ROAD_NAME
------------------------------ ------ -----------
1 London Bond Street
この質問は、何の努力や研究を示していません。ここから始めましょう。 https://www.google.com/search?q=how+to+create+a+stored+procedure+in+oracle+with+parameters&ie=utf-8&oe=utf-8 –
クエリを実行してみましょう手順; 3列の結果が得られます。あなたのプロシージャでは、これらの3つの値を1つのスカラ変数の中に入れようとしているので、クエリが複数の行を与える場合、スカラー変数は結果をホストするのに十分ではないことに注意してください。 – Aleksej
結果をプロンプトに返すクエリが必要な場合は、次のようにしてください:http://stackoverflow.com/a/40360471/230471 –