欄位的資料型別隱式轉換有關係

star_guan2008發表於2008-03-13
欄位的資料型別隱式轉換有關係

SQL> create table t1(
  2    id   number,
  3    key_name  varchar2(10));

表已建立。

SQL> insert into t1 values(1, '111');

已建立 1 行。

SQL> insert into t1 values(2, 'sdaf11');

已建立 1 行。

SQL> commit;

提交完成。

SQL> select * from t1;

        ID KEY_NAME
---------- ----------
         1 111
         2 sdaf11
        
測試SQL1:
SQL> select * from t1 where key_name=111;
ERROR:
ORA-01722: 無效數字

測試SQL2:
SQL> select * from t1 where id=1 and key_name=111;
ERROR:
ORA-01722: 無效數字

未選定行

測試SQL3:
SQL> select * from t1 where key_name=111 and id=1;

        ID KEY_NAME
---------- ----------
         1 111

我這裡用的資料庫版本是9207,優化器是RBO,所以查詢語句用的條件是從下往上的順序的解析,這也說明測試SQL2和測試SQL3執行結果的差異。
你測試的幾個sql也說明這個問題。即使後來你加了索引,貌似解決了該問題,實際上是由於條件篩選使用了索引,同時選擇出來的結果可以進行隱式的資料轉 換,所以才有結果。假如SECTION_ID = 180119對應的key_name='222dddf',此時還是會報錯。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10742223/viewspace-206123/,如需轉載,請註明出處,否則將追究法律責任。

相關文章