何時該用CHAR
CHAR與VARCHAR
關於char和varchar
char類型與char型或字符常量的比較
varchar
create table tt(A
INSERT INTO TT VALUES(
insert into tt values(
COMMIT ;
select * from tt where a
A
A A
A A
select * from tt where a
A
A A
A A
select * from TT WHERE A
A
A A
select * from TT WHERE A
A
A A
select * from tt where a
A
A A
但是當和decode函數配合使用時
使用A
select decode(a
DECODE(A
BBBB
BBBB
雖然A
因此比較時認為字段A
進一步驗證
select decode(a
DECODE(A
BBBB
BBBB
還是返回兩條
使用A
select decode(a
DECODE(A
AAAA
BBBB
此時是正常的VARCHAR
當使用case表達式處理A
使用字段A
select case a
CASEA
AAA
AAA
在使用case語句中使用A
進一步驗證
select case a
CASEA
AAA
AAA
此時將常量改為
使用A
select case a
CASEA
AAA
BBB
此時是正常的VARCHAR
總結
在使用decode函數對char字段做比較時
對於char數據
下面是一個簡單例子
create table t
create table t
begin
for i in
insert into t
insert into t
end loop ;
commit;
end ;
select name from t
NAME
如果按照char型的比較規則
select anem from t
NAME
無返回值
===============================評論
對於decode和case對於char類型的差別
函數中輸入參數和返回值一般都定義為varchar
多謝指點
下面是decode的函數的參數定義
SQL> desc sys
Parameter Type Mode Default?
(RESULT) NUMBER
EXPR NUMBER IN
PAT NUMBER IN
RES NUMBER IN
(RESULT) VARCHAR
EXPR NUMBER IN
PAT NUMBER IN
RES VARCHAR
(RESULT) DATE
EXPR NUMBER IN
PAT NUMBER IN
RES DATE IN
(RESULT) NUMBER
EXPR VARCHAR
PAT VARCHAR
RES NUMBER IN
(RESULT) VARCHAR
EXPR VARCHAR
PAT VARCHAR
RES VARCHAR
(RESULT) DATE
EXPR VARCHAR
PAT VARCHAR
RES DATE IN
(RESULT) NUMBER
EXPR DATE IN
PAT DATE IN
RES NUMBER IN
(RESULT) VARCHAR
EXPR DATE IN
PAT DATE IN
RES VARCHAR
(RESULT) DATE
EXPR DATE IN
PAT DATE IN
RES DATE IN
(RESULT) SYS
EXPR SYS
PAT SYS
RES SYS
(RESULT) SYS
EXPR SYS
PAT SYS
RES SYS
From:http://tw.wingwit.com/Article/program/Oracle/201311/19034.html