2017-05-04 134 views
0

所以我有一個SQL腳本(用SQL Developer編寫)用來創建一些特定於狀態的數據。我必須爲美國的每個州運行這個腳本。現在我的腳本中有幾個地方有一個將輸出限制到給定狀態的子句(例如,「where [table.column] ='AK'」)。所以,如果我想爲不同狀態運行腳本,我必須手動替換給定狀態代碼的每個實例(例如,從'AK'到'AL')。如何將SQL腳本轉換爲函數?

有沒有辦法將我的SQL腳本變成一個函數,狀態碼作爲函數的單個參數?如果我只需鍵入「function([state code])」而不是滾動整個腳本並調整它50次就會非常好!

+1

請給我們您的SQL。謝謝。 – anonyXmous

+0

對不起,我不能,因爲它可能有CBI。不過,我想我可能會得到答案。 SQL Developer允許你編寫程序,正確嗎?如果我能弄清楚如何編寫程序,那麼我想我已經解決了我的問題 –

回答

0

希望這有助於:

創建示例表/數據:

create table us_census 
(state varchar2(10), 
county_population number, 
county varchar2(10) 
); 

insert into us_census VALUES ('AK',100,'county1'); 
insert into us_census VALUES ('AK',150,'county2'); 
insert into us_census VALUES ('AL',200,'county3'); 
insert into us_census VALUES ('AL',100,'county4'); 

採樣功能:

CREATE FUNCTION get_population_per_state(p_state IN varchar2) 
    RETURN NUMBER 
    IS population NUMBER; 
    BEGIN 
     SELECT sum(county_population) 
     INTO population 
     FROM us_census 
     WHERE state = p_state --for example: 'AK' 
     GROUP BY state; 
     RETURN(population); 
    END; 
/

樣品執行:

declare v_population number; 
BEGIN 
for r in (select distinct state from us_census) 
loop 
    select get_population_per_state(r.state) into v_population from dual; 
    DBMS_OUTPUT.PUT_LINE('State: ' || r.state || ' Population :' ||v_population); 
end loop; 
END; 

示例結果:

State: AK Population :250 
State: AL Population :300 
+0

這是非常有幫助的,謝謝!約瑟夫: –

+0

不用客氣 – anonyXmous