oracle没有date()函数,sysdate函数的值是包括时分秒的,要实现插入当前时间默认值还真麻烦.

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 :NEW.fdate FROM DUAL;

END;

注:这里的STATWEEK为对应的数据表 fdate为自动增长的字段,get_date为对应的储存过程名.

3.数据表

-- Create table

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

)

logo.gif

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐