如何将SQL脚本转换为函数?

时间:2017-05-04 18:18:27

标签: oracle-sqldeveloper

所以我有一个SQL脚本(用SQL Developer编写),我用它来创建一些特定于州的数据。我必须为美国的每个州运行此脚本。现在我的脚本中有几个地方,我有一个条款限制输出到给定状态(例如,“where [table.column] ='AK'”)。因此,如果我想为不同的状态运行脚本,我必须手动替换给定状态代码的每个实例(例如,从'AK'到'AL')。

有没有办法将我的SQL脚本变成一个函数,状态代码作为函数的单个参数?如果我可以输入“function([state code])”而不是滚动整个脚本并调整它50次,那将是非常好的!

1 个答案:

答案 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