共有三个表
表 dw 单位表
dwid NUMBER(10,0) //单位id
dwname VARCHAR2(10) // 单位名称
表 person 个人表
CREATE TABLE "QHF ". "PERSON "
( "PERSONID " NUMBER(10,0) NOT NULL ENABLE, // 个人id
"NAME " VARCHAR2(10) NOT NULL ENABLE, // 个人名称
"DWID " NUMBER(10,0) NOT NULL ENABLE // 现在个人所有单位
)
表 DWCHANGE //记录一个人的单位变动表
CREATE TABLE "DWCHANGE "
( "PERSONID " NUMBER(10,0) NOT NULL ENABLE, //个人id
"BEFOREDWID " NUMBER(10,0) NOT NULL ENABLE, //变动前单位id
"AFTERDWID " NUMBER(10,0) NOT NULL ENABLE, //变动后单位id
"CHANGEDATE " DATE NOT NULL ENABLE //变动日期
)
我要建一个函数
create or replace function getdwid(grid in number,rq in date) return number is
Result number;
begin
通过传入参数 grid 为personid
rq 为日期
这里编程 返回 这人在这个时间 他所在的单位 id
return(Result);
end getdwid;
------解决方案--------------------
第一作为应届毕业生或者无业人员,beforedwid可能是空,所以不可以设计成not null(非空)
第二
create or replace function getdwid(grid in number,rq in date) return number is
Result number;
begin
result := 0;
select nvl(afterdwid,-1) into Result
from dwchange
where changedate <= rq
and rownum = 1
order by changedate desc;
--(-1代表无效返回)
return(Result);
end getdwid;
------解决方案--------------------
如果参数rq的日期格式是精确到天的(例如:YYYY-MM-DD),那条件应该修改为
select nvl(afterdwid,-1) into Result
from dwchange
where to_date(changedate) <= rq
and rownum = 1
order by changedate desc;