oracle没有date()函数,sysdate函数的值是包括时分秒的,要实现插入当前时间默认值还真麻烦.
只好自己写储存过程,而字段默认值里面又不能调用储存过程,还得写个触发器!而储存过程里面取出来的sysdate前几位的只却变成17-11月-07的格式了,不是自己想要的,2007-11-17的格式,又得单独取年月日再组合起来,这样一来返回值就不能是日期类型而要字符类型了.
一个字,烦!不过还是把他实现了.下面把代码给大家分享一下,如果有更好的方法麻烦告知.
1.储存过程
CREATE OR REPLACE FUNCTION "GET_DATE" RETURN VARCHAR2
IS
yyyy varchar2(36);
mm varchar2(36);
dd varchar2(36);
tempdate varchar2(36);
BEGIN
tempdate := '';
select to_char(to_date(sysdate),'YYYY') into yyyy from dual;
select to_char(to_date(sysdate),'MM') into mm from dual;
select to_char(to_date(sysdate),'DD') into dd from dual;
tempdate := substr(yyyy,1,4)|| '-'||
substr(mm,1,2)|| '-'||
substr(dd,1,2)
;
return tempdate;
END;
2.触发器
CREATE OR REPLACE TRIGGER STATWEEK_tg
--STATWEEK fdate 的触发器
BEFORE INSERT ON STATWEEK FOR EACH ROW
BEGIN
SELECT get_date INTO : FROM DUAL;
END;
注:这里的STATWEEK为对应的数据表 fdate为自动增长的字段,get_date为对应的储存过程名.
3.数据表
-- Create tablecreate table STATWEEK(星期一 VARCHAR2(20) default 0,星期二 VARCHAR2(20) default 0,星期三 VARCHAR2(20) default 0,星期四 VARCHAR2(20) default 0,星期五 VARCHAR2(20) default 0,星期六 VARCHAR2(20) default 0,星期日 VARCHAR2(20) default 0,TWEEK VARCHAR2(10),ADMIN VARCHAR2(50),FDATE VARCHAR2(20))