甲骨文SYSDATE問題,我寫了一個觸發器中,我有一個線:爲datetime列ORA 12899
SELECT *
INTO :NEW.EVENTDATE
FROM (SELECT SYSDATE
FROM DUAL);
出於某種原因,這並不工作(EVENTDATE列有時間標記(0)型)。
當我嘗試插入某些內容時,出現錯誤消息,指出該列的值太長。我雖然SYSDATE和時間戳(0)會合並和理解對方。
什麼?
甲骨文SYSDATE問題,我寫了一個觸發器中,我有一個線:爲datetime列ORA 12899
SELECT *
INTO :NEW.EVENTDATE
FROM (SELECT SYSDATE
FROM DUAL);
出於某種原因,這並不工作(EVENTDATE列有時間標記(0)型)。
當我嘗試插入某些內容時,出現錯誤消息,指出該列的值太長。我雖然SYSDATE和時間戳(0)會合並和理解對方。
什麼?
你應該只是做在PL/SQL
:new.EventDate := SYSTIMESTAMP;
,但如果你想使用SQL
SELECT systimestamp
INTO :new.EventDate
FROM dual;
與上面相同的錯誤 – Nickolodeon 2011-02-02 21:51:33
我不知道爲什麼,這是行不通的。你能發佈你得到的實際錯誤(包括代碼和一切)嗎?
我也不知道你爲什麼會不只是分配變量:
:NEW.EVENTDATE := systimestamp;
由於它產生相同的錯誤,實際寬度11對於寬度爲7的列太大! – Nickolodeon 2011-02-02 21:50:16
您運行的什麼版本?
在Oracle 11R2以下罰款作品:
drop table tq84_eventdate;
create table tq84_eventdate (
data varchar2(10),
eventdate timestamp(0)
);
create trigger tq84_eventdate_trg
before insert on tq84_eventdate
for each row
begin
SELECT * INTO :NEW.EVENTDATE FROM (SELECT SYSDATE FROM DUAL);
end tq84_eventdate_trg;
/
insert into tq84_eventdate (data) values ('test');
select * from tq84_eventdate;
但是,如果我做了
insert into tq84_eventdate (data) values ('value too large!');
我得到你提到的ORA-12899。因此,錯誤可能與您發佈的select語句無關,而與您實際嘗試插入的數據無關。
此外,在一個相關的說明,您可以直接在觸發分配SYSDATE,那就是沒有一個select語句的間接:
create trigger tq84_eventdate_trg
before insert on tq84_eventdate
for each row
begin
:new.eventdate := sysdate;
end tq84_eventdate_trg;
/
我正在使用10g。我似乎無法找到修改該列的Width屬性的方法。它是7,這就是它(我需要11,根據例外 – Nickolodeon 2011-02-02 21:47:00
嘗試進行明確的轉換,如
select cast(sysdate as timestamp(0)) from dual
作爲一個想法,會議的日曆設置有沒有異乎尋常的可能會強制轉換。如果是這樣,請嘗試在轉換中指定適當的日曆。
select to_char(sysdate,'DD-fmMonth-YYYY','nls_calendar=''Arabic Hijrah''') from dual;
我能夠叮my我的老闆,將一列的類型轉換爲另一列。即時間戳到DATE。
奇怪的是,整個這個分支沒有人指出我可以用DATE字段替換Timestamp字段。
你可以發佈你的表的實際DDL?您得到的錯誤強烈意味着EventDate被聲明爲VARCHAR2,而不是TIMESTAMP。 – 2011-02-02 22:06:20
或者說問題不在觸發器中,而是在實際的INSERT語句中。 – 2011-02-02 22:21:16