如何将 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