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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-LONG和LONG RAW變數SQL資料型別變數
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-ROWID和UROWID變數SQL資料型別變數
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-有限制的子型別SQL資料型別
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-不同的最值大小SQL資料型別
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-使用者定義的PL/SQL子型別SQL資料型別
- PLSQL Language Referenc-SQL資料型別-子型別與基型別具有相同的資料型別家族SQL資料型別
- Oracle的資料型別:char/varchar2Oracle資料型別
- PLSQL Language Reference-PL/SQL子程式-過載子程式-只是數值資料型別不同的形參SQL資料型別
- PLSQL Language Reference-SQL資料型別-PLS_INTEGER的子型別SIMPLE_INTEGERSQL資料型別
- 【SQL】SQL資料型別SQL資料型別
- SQL 資料型別SQL資料型別
- Oracle 資料型別CHAR, NCHAR, VARCHAR2, NVARCHAR2Oracle資料型別
- SQL資料型別和C#資料型別間的轉換SQL資料型別C#
- PLSQL Language Reference-BOOLEAN型別-PLS_INTEGER和BINARY_INTEGER資料型別SQLBoolean資料型別
- 資料型別,變數資料型別變數
- 【SQL】18 SQL NULL 函式、SQL 通用資料型別、SQL 用於各種資料庫的資料型別SQLNull函式資料型別資料庫
- PLSQL Language Referenc-PL/SQL集合和記錄-集合型別SQL型別
- SQL Server-資料型別SQLServer資料型別
- SQL 常見資料型別SQL資料型別
- SQL Server資料型別BLOBSQLServer資料型別
- 【開發篇plsql】plsql資料型別(一) 集合型別SQL資料型別
- python—資料型別和變數Python資料型別變數
- 強型別語言變數和資料型別的理解變數資料型別
- MySql和SQL Server資料型別 對比MySqlServer資料型別
- PLSQL學習——資料型別SQL資料型別
- MySQL資料型別及sql模型及伺服器變數MySql資料型別模型伺服器變數
- MySQL CHAR和VARCHAR資料型別介紹MySql資料型別
- PL/SQL複合資料型別SQL資料型別
- js資料型別之基本資料型別和引用資料型別JS資料型別
- SSIS 資料型別 第二篇:變數的資料型別資料型別變數
- Solidity-變數和資料型別[複合型別_1]Solid變數資料型別
- JS的資料型別和變數(轉)JS資料型別變數
- 1、變數和簡單資料型別變數資料型別
- SQL Server 2005 資料型別和.Net資料型別的對應關係SQLServer資料型別
- SQL中給varchar2(5)資料型別合適的約束SQL資料型別
- 強資料型別和弱資料型別資料型別
- ABAP中Char型別資料轉換成Decimal型別型別Decimal
- js基本語法之 值型別(資料型別)(變數型別)JS資料型別變數