2014-12-20 23 views
0

我想在表格中插入時間數據。那麼,我應該使用什麼類型的數據類型,以及如何在表格中插入一個時間?我在create table語句中使用'timestamp',但是當我在表格中插入時間時,它顯示一個錯誤(錯誤代碼:ORA-01861)。請幫幫我。我使用ORACLE 11g。在表中創建帶有時間數據類型和插入時間數據的表格

DDL語句:

CREATE TABLE "SOM"."FLIGHTS" 
    ( "FLNO" NUMBER(3,0) NOT NULL ENABLE, 
    "FROM" VARCHAR2(20 BYTE), 
    "TO" VARCHAR2(20 BYTE), 
    "DISTANCE" NUMBER(5,3), 
    "DEPARTS" TIMESTAMP (3), 
    "ARRIVES" TIMESTAMP (3), 
    "PRICE" NUMBER(5,2), 
    CONSTRAINT "FLIGHTS_PK" PRIMARY KEY ("FLNO") ); 

插入語句:

insert into flights 
values (1, 'Bbsr', 'Calcutta', 600, timestamp '05:30', timestamp '06:50', 8000); 

回答

2

的消息ORA-01861是literal does not match format string。此錯誤意味着我們將字符串轉換爲另一種數據類型,但字符串格式不正確。

您的insert語句使用ANSI SQL風格timestamp()函數將兩個字符串強制轉換爲TIMESTAMP數據類型。該功能採用規定的格式:YYYY-MM-DD HH24.MI.SS,YYYY-MM-DD HH24.MI.SS.FFYYYY-MM-DD HH24.MI.SS.FF TZ

您正在獲取ORA-01861,因爲您的字符串不符合以下格式之一:timestamp '05:30'

在這種情況下,解決方案是更改列數據類型:您不需要時間戳,這是特定日期的特定時間。你想要的只是航班的起飛和着陸時間,這可以更好地表示爲number(4,2)varchar2(5)這是一個檢查約束。


兩個其他的意見。

您的insert語句的數值對於指定的數字列來說太大了,這很容易修復。

您的表定義使用oracle保留字作爲列名TO和FROM。 create語句的成功僅僅是因爲你用雙引號包裝了所有的東西,所以Oracle不會驗證名稱。使用像這樣的保留字是難以置信的錯誤練習。每次我們提到,我們需要寫列時刻......

select flno, "FROM", "TO" from flights; 

...否則,我們會得到ORA-00936(SQLFiddle demo)。那些不得不使用你的桌子並且維護你的代碼的窮人會永遠詛咒你。不要成爲那個人。

相關問題