在函数中如何调用存储

1.创建实体表及初始化数据

create table PRESIDENTS(
ID NUMBER(10) not null,
NAME VARCHAR(32) not null,
BIRTHDATE DATE not null,
PARTY char(1) not null,
primary key (ID)
)

insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (1, 'George W. Bush', to_date('07/06/1946','MM/DD/YYYY'),'R');
insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (2, 'Bill Clinton', to_date('08/19/1946','MM/DD/YYYY'),'D');
insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (3, 'George H. W. Bush', to_date('06/12/1924','MM/DD/YYYY'),'R');
insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (4, 'Ronald W. Reagan', to_date('02/06/1911','MM/DD/YYYY'),'R');
insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (5, 'Jimmy Carter', to_date('10/01/1924','MM/DD/YYYY'),'D');
insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (6, 'Gerald R. Ford', to_date('07/14/1913','MM/DD/YYYY'),'R');
insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (7, 'Richard M. Nixon', to_date('01/09/1913','MM/DD/YYYY'),'R');
insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (8, 'Lyndon B. Johnson', to_date('08/27/1908','MM/DD/YYYY'),'D');
insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (9, 'John F. Kennedy', to_date('05/29/1917','MM/DD/YYYY'),'D');
insert into PRESIDENTS (ID, NAME, BIRTHDATE, PARTY) values (10, 'Dwight D. Eisenhower', to_date('10/14/1890','MM/DD/YYYY'),'R');
2.创建临时表以控制在函数与存储之间的数据

CREATE GLOBAL TEMPORARY TABLE TEMP_PRESIDENTS(
 ID NUMBER(10) not null,
 NAME VARCHAR(32) not null,
 BIRTHDATE DATE not null,
 PARTY char(1) not null
) ON COMMIT PRESERVE ROWS;

3.创建存储

CREATE PROCEDURE LOAD_TEMP_PRESIDENTS (
 partyParam CHAR
)
as
begin
 EXECUTE IMMEDIATE 'TRUNCATE TABLE TEMP_PRESIDENTS';
 COMMIT;
 
 INSERT INTO TEMP_PRESIDENTS
 SELECT ID, NAME, BIRTHDATE, PARTY FROM PRESIDENTS WHERE PARTY = partyParam;
 COMMIT;
end;
/

4.创建一个需要从函数返回的数据类型

CREATE OR REPLACE TYPE PRESIDENT_TYPE AS OBJECT (
 ID NUMBER(10),
 NAME VARCHAR2(32),
 BIRTHDATE DATE,
 PARTY CHAR(1)
);

5.创建一个以PRESIDENT_TYPE为类型的表类型

CREATE OR REPLACE TYPE PRESIDENT_TYPE_TABLE AS TABLE OF PRESIDENT_TYPE;

6.创建函数

CREATE OR REPLACE FUNCTION PRESIDENTS_FUNC (
 partyParam CHAR
)
return PRESIDENT_TYPE_TABLE pipelined
is
  PRAGMA AUTONOMOUS_TRANSACTION;

  TYPE ref0 is REF CURSOR;
  myCursor ref0;
  out_rec PRESIDENT_TYPE := PRESIDENT_TYPE(0, null, null, null);
 
BEGIN
 LOAD_TEMP_PRESIDENTS(partyParam);

 open myCursor for
  select
  id,
  name,
  birthdate,
  party
  from TEMP_PRESIDENTS;
 
 LOOP FETCH myCursor into
  out_rec.ID,
  out_rec.NAME,
  out_rec.BIRTHDATE,
  out_rec.PARTY;
 
 EXIT WHEN myCursor%NOTFOUND;
 PIPE ROW(out_rec);
 END LOOP;
 CLOSE myCursor;
 
 RETURN;
END;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值