所以我有一个SQL脚本(用SQL Developer编写),我用它来创建一些特定于州的数据。我必须为美国的每个州运行此脚本。现在我的脚本中有几个地方,我有一个条款限制输出到给定状态(例如,“where [table.column] ='AK'”)。因此,如果我想为不同的状态运行脚本,我必须手动替换给定状态代码的每个实例(例如,从'AK'到'AL')。
有没有办法将我的SQL脚本变成一个函数,状态代码作为函数的单个参数?如果我可以输入“function([state code])”而不是滚动整个脚本并调整它50次,那将是非常好的!
答案 0 :(得分: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