oracle插入表当前时间,ORACLE自动插入当前时间

时间:2025-02-06 11:28:26

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))