PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-CHAR和VARCHAR2變數
0.1.1 CHAR和VARCHAR2變數
(1) 賦予和插入太長的值
--給字元變數賦值,超出了它的最大大小 DECLARE c VARCHAR2(3 CHAR); BEGIN c := 'abc '; END; /
--將字元變數插入到列中,它的值超出了列的大小 DROP TABLE t; CREATE TABLE t (c CHAR(3 CHAR));
DECLARE s VARCHAR2(5 CHAR) := 'abc '; BEGIN INSERT INTO t(c) VALUES(s); END; /
--在將字串插入到列中之前,使用RTRIM函式去除尾部空格 DECLARE c VARCHAR2(3 CHAR); BEGIN c := RTRIM('abc '); INSERT INTO t(c) VALUES(RTRIM('abc ')); END; / |
(2)對多位元組字元宣告變數
CHAR和VARCHAR2變數的最大值是32767位元組,不管你是以字元還是位元組指定最大值。在變數中儲存的最大字元數取決於字符集,有時也依賴於字元本身。
單位元組字符集 |
32767 |
n位元組定寬字符集 |
FLOOR(32, 767/n) |
n位元組變寬字符集 |
FLOOR(32, 767/n)~32767 |
當宣告CHAR和VARCHAR2變數時,為了確保在任何字符集下都能儲存n個字元,要以字元的形式來指定它的大小CHAR(n CHAR), VARCHAR2(n CHAR),n不要超過FLOOR(32767/4) = 8191
(3)CHAR和VARCHAR2的區別
I 預定義的子型別
CHARACTER
VARCHAR(SQL, PL/SQL), STRING(PL/SQL)
II 記憶體分配
CHAR在編譯時分配的記憶體為最大值。
VARCHAR2記憶體分配依賴於最大值:如果最大值 < 4000位元組,在編譯時根據最大值分配記憶體;如果是大值 >= 4000位元組,根據實際值分配記憶體。
a VARCHAR2(3999); b VARCHAR2(4000); --如果將一個500位元組的值賦值給a和b,在編譯時給a分配3999位元組 --b分配500位元組 |
即PL/SQL對小的VARCHAR2進行效能優化,對大的VARCHAR2進行有效記憶體使用方面的優化。
III 空白填充
當賦給變數的值比變數的最大值小,當插入到列中的值比例的寬度小,當從列獲取的值比變數的最大值小,如果接收者型別為CHAR,則使用空格填充到最大值,原來的尾部空白資訊丟失;如果接收者型別為VARCHAR2,則不填充,沒有資訊丟失。
DECLARE first_name CHAR(10 CHAR); last_name VARCHAR2(10 CHAR); BEGIN first_name := 'John '; last_name := 'Chen ';
DBMS_OUTPUT.PUT_LINE('*' || first_name || '*'); DBMS_OUTPUT.PUT_LINE('*' || last_name || '*');
END;
|
IV 值比較
SQL的字元比較規則適用於PL/SQL字元比較。當2個比較的字元有1個或2個為VARCHAR2或NVARCHAR2型別,則採用無填充比較語義,否則採用空白填充比較語義。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1104099/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL 資料型別SQL資料型別
- 【SQL】18 SQL NULL 函式、SQL 通用資料型別、SQL 用於各種資料庫的資料型別SQLNull函式資料型別資料庫
- SQL Server-資料型別SQLServer資料型別
- SQL 常見資料型別SQL資料型別
- python—資料型別和變數Python資料型別變數
- 資料型別,變數資料型別變數
- PL/SQL基本結構---PLSQL複合型別---表型別變數tableSQL型別變數
- MySQL資料型別及sql模型及伺服器變數MySql資料型別模型伺服器變數
- Solidity-變數和資料型別[複合型別_1]Solid變數資料型別
- 強型別語言變數和資料型別的理解變數資料型別
- SQL教程——常見的資料型別SQL資料型別
- sql學習(mysql)(1)資料型別MySql資料型別
- js資料型別之基本資料型別和引用資料型別JS資料型別
- SSIS 資料型別 第二篇:變數的資料型別資料型別變數
- 1、變數和簡單資料型別變數資料型別
- python:變數和簡單資料型別Python變數資料型別
- 關於Sql server資料型別HierarchyID 資料型別用法和遞迴顯示完整路徑SQLServer資料型別遞迴
- js基本語法之 值型別(資料型別)(變數型別)JS資料型別變數
- 區別值型別資料和引用型別資料型別
- 二、變數與資料型別變數資料型別
- MySQL資料型別操作(char與varchar)MySql資料型別
- SQL Server日期資料型別DATE的使用SQLServer資料型別
- sql server 資料型別轉換函式SQLServer資料型別函式
- SQL SERVER 日期和時間資料型別及函式 (Transact-SQL)SQLServer資料型別函式
- Java雜記1—資料型別和變數Java資料型別變數
- 非關係型資料庫(NOSQL)和關係型資料庫(SQL)區別詳解資料庫SQL
- JAVA中基本資料型別和引用資料型別Java資料型別
- Java檢視變數資料型別Java變數資料型別
- 可變資料型別(mutable)與不可變資料型別(immutable)總結資料型別
- std::cout 輸出 unsigned char型別資料型別
- Mysql 資料型別之整數型別MySQL 資料型別
- 資料型別: 資料型別有哪些?資料型別
- CAPL指令碼中常用到的資料型別轉換——數字型別(int/double)和字串型別(char array)指令碼資料型別字串
- 《JavaScript 闖關記》之變數和資料型別JavaScript變數資料型別
- JAVA-識別符號、變數、資料型別Java符號變數資料型別
- C語言-變數常量資料型別C語言變數資料型別
- Go變數與基礎資料型別Go變數資料型別
- JavaScript變數與資料型別詳解JavaScript變數資料型別
- 分析 JavaScript 的資料型別與變數JavaScript資料型別變數