在Oracle中,「日期常量沒有完全指定」。是什麼意思?任何例子?根據文檔,不能在檢查約束和列默認值中指定它。未完全指定的日期常量
回答
這是一行the documentation on CREATE TABLE。我認爲這意味着默認日期必須正確格式化。
因此,假設我們需要一個默認日期到當年第一天的規則。這是有效的:
create table t1 (d1 date default to_date('01-JAN', 'DD-MON'));
,而本聲明
create table t1 (d1 date default to_date('01-JAN'));
...擲出ORA-01840: input value not long enough for date format
。
但是在任何情況下都不是這樣嗎?無效的日期表達式在任何地方都無法工作。爲什麼文檔只在幾個特定的地方提到它? – 2012-08-02 18:20:46
得到的答案從這裏https://forums.oracle.com/forums/message.jspa?messageID=10494087#10494087
未完全指定意味着日期格式,可能導致模棱兩可或不同的值,
例如,當這取決於其他因素,諸如依賴於RR格式對SYSDATE的世紀數據,
所以'02 -JAN-12' 可能是'02 -JAN-1912' 如果SYSDATE年份是1900 ,並可能在2012年,如果sysdates年是2000
我認爲這個文檔是錯誤的。您可以使用的在約束或默認情況下使用未完全指定的日期常量。即使是「完全指定」的日期常數在某些情況下仍可能失敗。我不確定文檔意味着什麼,但我認爲這裏真正的問題是採用日期格式的經典Oracle問題。
的DEFAULT
子句不存儲一個值,它存儲將要它每次使用時計算爲一個值的表達式。
如果你不喜歡一些愚蠢:
alter session set nls_date_format = 'DD';
create table date_test(a number, b date default '01');
它將工作,一會兒:
insert into date_test(a) values (1);
select b from date_test;
B
--
01
但是,如果有人使用了不同的日期格式,它只會崩潰對他們來說:
alter session set nls_date_format = 'DD-MON-YYYY';
insert into date_test(a) values (1);
*
ERROR at line 1:
ORA-01840: input value not long enough for date format
請注意,完全指定的,明確的表達式仍可能導致問題。
alter session set nls_date_format = 'DD-MON-YYYY';
create table date_test2(a number, b date default to_date('01-JAN-2000', 'DD-MON-YYYY'));
alter session set nls_language = 'FRENCH';
insert into date_test(a) values(1);
*
ERROR at line 1:
ORA-01840: valeur entrΘe pas assez longue pour le format de la date
01-JAN-2000有什麼問題?不是每個人都知道「JAN」是什麼。
SQL> select to_char(date '2000-01-01', 'MON') from dual;
TO_CH
-----
JANV.
這個故事
如果你想使用文字的日期的真正的道德,始終使用ANSI date literal:DATE '2000-01-01'
- 1. 完全禁用指定範圍內的日期
- 2. 指定日期變量
- 3. 給定日期的指定日期
- 4. 加入到尚未指定日期的日期維度
- 5. 查詢日期與指定日期的偏移量的記錄
- 6. 日期時間未指定類
- 7. 獲取指定日期的星期日
- 8. 棘手的SQL - 選擇日期和...完全缺失的日期
- 9. EventLogEntry.TimeGenerated返回完全錯誤的日期
- 10. 指定活動的日期
- 11. C#在指定日期添加日期
- 12. 大於指定日期(日期,月份,年份)的日期
- 13. MPChart:X軸無法顯示日期完全
- 14. Java Spring REST完全API請求日期
- 15. EXISTS未按預期完全篩選
- 16. 未定義常量
- 17. 計算指定日期的星期
- 18. 指定日期的獲取星期數
- 19. 完全指定包的快捷方式?
- 20. 如何在Coq中定義未指定的常量
- 21. IRB返回NameError:未初始化的常量日期
- 22. 查找第一個星期一的日期指定的日期
- 23. 將複選框中的值指定給未完成的變量
- 24. 在salesforce中指定日期。
- 25. 將日期指定給DateField
- 26. MSON指定日期,時間
- 27. 通過指定日期列
- 28. 日期無效月指定
- 29. 如何指定日期
- 30. 指定日期範圍
你能否提供在您閱讀本文檔的鏈接? – 2012-08-02 05:27:13