一種猜測,因爲我不知道你想要什麼樣的輸出,但也許這的位:
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;
注意,我前綴我的參數與p_
從區分它們數據庫列,因爲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個值放在一個標量變量中,所以......另外,請注意,如果你的查詢將給出多於一行,標量變量將不足以承載結果 – Aleksej
如果你只想要一個返回結果到提示的查詢,請嘗試如下所示:http://stackoverflow.com/a/40360471/230471 –