Oracle型別轉換規則:
- 對于insert和update操作,oracle將值轉換為受影響的的列的型別,
- 對于select操作,oracle會將列的值的型別轉換為目標變數的型別,
看如下實驗:
1、創建一張表,欄位id的型別為number,id欄位創建索引,插入一條測驗資料
create table test(id number);
create index idx_test_id on test(id);
insert into test values(1);

2、我們做如下查詢,id的值設定為字符型的'1'

3、查看執行計劃:

是不是很意外,Oracle沒有進行型別轉換,使用了索引掃描,把'1'認為是數值型的1,
其實任何的數值型都可以轉換為字符型,因此在一個數值型的欄位上,添加to_char函式是多余的,
老外總結了一張圖,說明了哪些型別間可以直接轉換,哪些需要在列上添加函式來轉換,非常的好:

-----------------------------------------------------------------------------------------------------------------------------
增加一個nvarchar2(10)欄位name
alter table TEST add NAME VARCHAR2(10);

插入測驗資料
insert into test values(1,'1');

查詢
explain plan for select * from test where name='1';
select * from table(dbms_xplan.display);

查詢
explain plan for select * from test where name=1;
select * from table(dbms_xplan.display);

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/128496.html
標籤:AI
上一篇:Mysql事務隔離級別與鎖機制
