如何将 SQL 脚本变成一个函数?
How to turn SQL script into a function?
所以我有一个 SQL 脚本(用 SQL Developer 编写),我用它来创建一些特定于状态的数据。对于美国的每个州,我都必须 运行 这个脚本。现在我的脚本中有几个地方有一个子句将输出限制为给定状态(例如,"where [table.column] = 'AK' ")。因此,如果我想 运行 不同状态的脚本,我必须手动替换给定状态代码的每个实例(例如,从 'AK' 到 'AL')。
有没有办法将我的 SQL 脚本变成函数,并将状态代码作为函数的单个参数?如果我可以只输入 "function([state code])" 而不是滚动整个脚本并调整它 50 次,那就太好了!
希望这对您有所帮助:
创建示例 table/data:
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
所以我有一个 SQL 脚本(用 SQL Developer 编写),我用它来创建一些特定于状态的数据。对于美国的每个州,我都必须 运行 这个脚本。现在我的脚本中有几个地方有一个子句将输出限制为给定状态(例如,"where [table.column] = 'AK' ")。因此,如果我想 运行 不同状态的脚本,我必须手动替换给定状态代码的每个实例(例如,从 'AK' 到 'AL')。
有没有办法将我的 SQL 脚本变成函数,并将状态代码作为函数的单个参数?如果我可以只输入 "function([state code])" 而不是滚动整个脚本并调整它 50 次,那就太好了!
希望这对您有所帮助:
创建示例 table/data:
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