Oracle程序包

程序包由两部分构成:规范(specification)和主体(body)。

 创建表

create table PEOPLE
(
  ID     NUMBER primary key not null,
  NAME   NVARCHAR2(20) not null,
  STATUS NVARCHAR2(3)
)

insert into people  (id,name,status) values(1,'福康','CLX');
insert into people  (id,name,status) values(2,'陆晓','act');
insert into people  (id,name,status) values(3,'王山','CLX');
insert into people  (id,name,status) values(4,'刘迪','CLX');
insert into people  (id,name,status) values(5,'张玉','CLX');
insert into people  (id,name,status) values(6,'金山','CLX');
insert into people  (id,name,status) values(7,'顺溜','CLX');
insert into people  (id,name,status) values(8,'辞海','CLX');
insert into people  (id,name,status) values(9,'陆珣','CLX');
insert into people  (id,name,status) values(10,'晓笑','CLX');

规范:

create or replace package pkg_people as
  peopleString varchar2(200);
  peopleStatus nvarchar2(3) := 'CLX';
  function get_people_string return varchar2;
  procedure update_people(in_id in number);
  procedure insert_people(in_id     number,
                          in_name   in nvarchar2,
                          in_status in nvarchar2);
  procedure delete_people(in_id in number);
end pkg_people;

 主体:

create or replace package body pkg_people as

  --函数get_student_string
  function get_people_string return varchar2 is
  begin
    declare
      cursor cu_people is
        select name from people order by id;
      people_name varchar2(20);
      rowString   varchar2(500);
    
    begin
      open cu_people;
      fetch cu_people
        into people_name;
    
      while cu_people%found loop
        rowString := rowString || people_name || ',';
        fetch cu_people
          into people_name;
      end loop;
    
      return substr(rowString, 1, length(rowString) - 1);
    end;
  end get_people_string;

  --存储过程update_people
  procedure update_people(in_id in number) as
  begin
    update people set status = peopleStatus where id = in_id;
    commit;
  end update_people;

end pkg_people;

 执行程序中函数/存储过程

--调用程序包中的函数get_people_string
select pkg_people.get_people_string() from dual ;
--调用程序包中的存储过程update_people()
begin
  pkg_people.update_people(2);
end;
原文地址:https://www.cnblogs.com/wllzbky/p/3453051.html