輸入NVARCHRA2型別字串
今天看到論壇的一個帖子,是關於NVARCHAR2字串的。解答之後,順便問了問同事,發現居然大家都不知道這個語法。所以這裡簡單描述一下。
其實語法非常檢查,要指定一個國家字符集的字串NCHAR或NVARCHAR2,只需要在字串前面加上一個N就可以了。
舉個例子:
SQL> CREATE TABLE T_NVARCHAR2 (ID NUMBER, NAME NVARCHAR2(30));
表已建立。
SQL> INSERT INTO T_NVARCHAR2 VALUES (1, N'ABC');
已建立 1 行。
SQL> DROP TABLE T_NVARCHAR2 PURGE;
表已刪除。
SQL> CREATE TABLE T_NVARCHAR2 (ID NUMBER, NAME NVARCHAR2(30));
表已建立。
SQL> INSERT INTO T_NVARCHAR2 VALUES (1, N'ABC');
已建立 1 行。
SQL> COMMIT;
提交完成。
SQL> SELECT DUMP(NAME, 16) FROM T_NVARCHAR2;
DUMP(NAME,16)
---------------------------------------------------------------------------------------
Typ=1 Len=6: 0,41,0,42,0,43
SQL> SELECT DUMP('ABC', 16) VAR, DUMP(N'ABC', 16) NVAR FROM DUAL;
VAR NVAR
-------------------------------------------- ----------------------------------------
Typ=96 Len=3: 41,42,43 Typ=96 Len=6: 0,41,0,42,0,43
如果對於VARCHAR2型別的表指定NVARCHAR2型別的查詢,Oracle會自動進行隱式型別轉換。
SQL> CREATE TABLE T (ID NUMBER, NAME VARCHAR2(30));
表已建立。
SQL> CREATE INDEX IND_T_NAME ON T(NAME);
索引已建立。
SQL> INSERT INTO T SELECT ROWNUM, OBJECT_NAME FROM ALL_OBJECTS;
已建立54020行。
SQL> COMMIT;
提交完成。
SQL> SET AUTOT ON EXP
SQL> SELECT * FROM T WHERE NAME = 'T';
ID NAME
---------- ------------------------------
53170 T
執行計劃
----------------------------------------------------------
Plan hash value: 1889074194
------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 30 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| T | 1 | 30 | 2 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IND_T_NAME | 1 | | 1 (0)| 00:00:01 |
------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("NAME"='T')
Note
-----
- dynamic sampling used for this statement
SQL> SELECT * FROM T WHERE NAME = N'T';
ID NAME
---------- ------------------------------
53170 T
執行計劃
----------------------------------------------------------
Plan hash value: 2153619298
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 30 | 52 (6)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T | 1 | 30 | 52 (6)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter(SYS_OP_C2C("NAME")=U'T')
Note
-----
- dynamic sampling used for this statement
這個隱式轉換過程會將列欄位的VARCHAR2型別轉換為NVARCHAR2型別,導致索引無法使用。如果想要這種情況下仍然可以使用索引,需要建立一個函式索引:
SQL> CREATE INDEX IND_T_NNAME ON T(TO_NCHAR(NAME));
索引已建立。
SQL> SELECT * FROM T WHERE NAME = N'T';
ID NAME
---------- ------------------------------
53170 T
執行計劃
----------------------------------------------------------
Plan hash value: 462587453
-------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 567 | 60669 | 48 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| T | 567 | 60669 | 48 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IND_T_NNAME | 227 | | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access(SYS_OP_C2C("NAME")=U'T')
Note
-----
- dynamic sampling used for this statement
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-531728/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- USB入門系列(四)傳輸型別型別
- 從一次輸入框無法輸入的bug,談如何限制輸入框輸入型別型別
- SCSS 字串 型別CSS字串型別
- String:字串型別字串型別
- TypeScript 字串型別TypeScript字串型別
- ncurses輸入函式:字元+字串的輸入函式字元字串
- 基本資料型別與字串型別資料型別字串
- iOS 使用正則判斷輸入型別iOS型別
- 操作型別之字串型別字串
- [java IO流]之 基本資料型別輸入輸出流Java資料型別
- 實現多子型別輸入法:如何在 HarmonyOS中載入不同的輸入模式型別模式
- C#快速入門教程(11)—— 字元和字串型別C#字元字串型別
- 如何自定義 SAP UI5 字串型別輸入欄位的校驗邏輯試讀版UI字串型別
- 關於C++中字串輸入get與getline的區別C++字串
- TypeScript 字串字面量型別TypeScript字串型別
- 型別自定義格式字串型別字串
- 讀取不定長字串輸入字串
- 輸入一段字串,去除字串中重複的字元,並輸出字串字元
- 資料型別之字串篇資料型別字串
- 基本資料型別之字串資料型別字串
- 表單限制字串輸入長度字串
- JavaScript輸入字串字數倒計JavaScript字串
- 處理stdin輸入的字串指令字串
- printf 中 % 別代表的輸出型別型別
- 7-1 混合型別資料格式化輸入型別
- Oracle字串資料型別簡述Oracle字串資料型別
- JavaScript 字串轉換數值型別JavaScript字串型別
- JAVA 解析html 型別字串(使用jsoup)JavaHTML型別字串JS
- Python - 基本資料型別_str 字串Python資料型別字串
- jQuery Validate限定輸入字串的長度jQuery字串
- sizeof和strlen計算陣列型別和指標型別字串陣列型別指標字串
- 演示 資料型別 陣列名[]=new 資料型別[大小],迴圈輸入5個成績,儲存到double陣列,並輸出資料型別陣列
- MySQL基礎教程---Chapter 5 資料型別和資料輸入MySqlAPT資料型別
- C語言資料型別、變數的輸入和輸出、進位制轉換C語言資料型別變數
- Redis字串型別內部編碼剖析Redis字串型別
- pandas中字串object 轉化 datetime 型別字串Object型別
- Python基礎:資料型別-字串(7)Python資料型別字串
- (四)Python中的字串型別及操作Python字串型別
- 第四章 字串和格式化輸入/輸出字串