首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

此函数如何建

2012-03-19 
此函数怎么建共有三个表表dw单位表dwidNUMBER(10,0)//单位iddwnameVARCHAR2(10)//单位名称表person个人表C

此函数怎么建
共有三个表

表   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;

热点排行