oracle隱式類型轉換

來源:互聯網
上載者:User

標籤:double   img   類型   1.2   int   http   upd   oracle   小數   

我們的系統的的選擇框的選項是儲存在一個資料庫表中的,其中大致包含了選擇框的id以及選擇選項的資料,大致如下表。其中fieldid的類型為int,optionVal為int,optionName為varchar

fieldid optionVal optionName
1 0 北京
1 1 南京
1 2 天津
1 3 杭州
2 0 拉麵
2 1 米飯

今天在做需求的時候,沒有注意相應欄位的類型,直接通過java代碼就拼接了sql,大致如下。

StringBuilder sqlBuilder = new StringBuilder();sqlBuilder.append("UPDATE tablename SET")    .append(optionFieldid)    .append(" = ‘")    .append(optionValue);    .append("‘");

optionValue字串為‘‘時他儲存在資料庫裡面的值就變成了0,原以為應該把這個欄位變成‘‘,這時我才注意到這個欄位的類型為int,發生了隱式類型轉換。這裡總結一下相關資料庫的隱式類型轉換,同時在接下來的開發過程中需要多加註意資料庫的類型,避免產生意想不到的結果。

oracle


oracle遵循如下的資料類型轉換規則:

  • 對於insertupdate操作,oracle將值轉換為受影響的的列的類型。
  • 對於SELECT FROM操作,oracle會將列的值的類型轉換為目標變數的類型。
  • 當運算元字類型的值的時候,oracle通常會調整精度,以適應最大的容量。在者中情況下,數字類型的操作的結果可能與上表有差異。
  • 當字串類型和數實值型別做比較時,oracle會將字串類型轉換為數實值型別。

    select sysdate from dual where 1.2 = ‘1.2‘; //正確select sysdate from dual where 1.2 = ‘1.2a‘;//ORA-01722: 無效數字
  • 使用字串或者NUMBER類型和浮點數類型進行比較是不精確的。因為字串和NUMBER類型使用的是decimal精度,而浮點數使用的是binary精度。
  • 當把CLOB類型的資料轉換為向VARCHAR2這樣的類型,或者將BLOB轉換為RAW資料,如果被轉換的資料比目標類型大,那麼將會報錯。
  • 在將timestamp類型轉換為date類型的時候,小數秒部分會被階段。
  • BINARY_FLOAT轉換為BINARY_DOUBLE是精確的。
  • BINARY_DOUBLE轉換到BINARY_FLOAT類型時,如果BINARY_ DOUBLE使用了超過BINARY_FLOAT支援的精度,那麼轉換是不精確的。
  • 當字串值和date值比較時,會將字串值轉換為date類型。對於這種情況我們不應該依賴隱式轉換,應該使用TO_DATE進行顯示轉換,隱式轉換遵循的轉換格式如下:

    select * from nls_session_parameters  WHERE parameter=‘NLS_DATE_FORMAT‘; //DD-MON-RR

    所以在中文環境下使用如下,使用其他的格式則會報錯ORA-01861: 文字與格式字串不匹配

    select 1 + 1 from dual where to_date(‘2018-1-15 12:23:23‘,‘yyyy-mm-dd hh24:mi:ss‘) > ‘15-1月 -18‘;
  • 當你使用sql或者函數,傳的參數不是參數接受的類型,那麼會把傳的這個參數轉換為函數接受的類型。
  • 當字串和一個非字串類型進行比較或者算數運算時,會將字串轉換為列一個資料的類型。當算數運算的兩邊是CHAR/VARCHAR2NCHAR/NVARCHAR2,oracle將他們轉換為NUMBER

    select ‘123‘ + ‘123.2‘ from dual; //246.2

oracle隱式類型轉換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.