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