1. 程式人生 > >PL/SQL字串宣告、字串函式和操作符例項原始碼說明

PL/SQL字串宣告、字串函式和操作符例項原始碼說明

            PL/SQL字串實際上是一個可選的尺寸規格字元序列。字元可以是數字,字母,空白,特殊字元或全部的組合。 PL/SQL提供了三種類型的字串:

  • 固定長度字串在這樣的字串,程式設計師指定的長度,同時宣告該字串。該字串是右填充空格以達到指定的長度。

  • 變長字串在這樣的字串,最大長度可達32,767,為字串指定,並不需要填充。

  • 字元大物件(CLOB)這是可變長度的字串,可以達到128兆兆位元組。

宣告字串變數

        Oracle資料庫提供了大量的字串資料型別,如:CHAR,NCHAR,VARCHAR2,NVARCHAR2,CLOB和NCLOB。前面加上一個'N'的資料型別為“國家字符集”資料型別,即儲存Unicode字元資料。如果需要宣告一個可變長度的字串時,必須提供該字串的最大長度。

PL/SQL字串函式和操作符

PL/ SQL提供了連線運算子(||)用於連線兩個字串。下表提供了用PL / SQL提供的字串功能(函式):

S.N.函式及用途
1ASCII(x);
返回字元 x 的 ASCII 值
2CHR(x);
返回字元 x 的 ASCII 值
3CONCAT(x, y);
連線字串x和y,並返回附加的字串
4INITCAP(x);
每個單詞的首字母x中轉換為大寫,並返回該字串
5INSTR(x, find_string [, start] [, occurrence]);
搜尋find_string在x中並返回它出現的位置
6INSTRB(x); 
返回另一個字串中字串的位置,但返回以位元組為單位的值
7LENGTH(x); 
返回x中的字元數
8LENGTHB(x); 
返回為單位元組字符集的位元組的字串的長度
9LOWER(x); 
在x轉換為小寫字母,並返回該字串
10LPAD(x, width [, pad_string]) ; 
X用空格向左填充,把字串的總長度達寬字元
11LTRIM(x [, trim_string]); 
從x的左修剪字元
12NANVL(x, value); 
如果x匹配NaN的特殊值(非數字)則返回其值,否則返回x
13NLS_INITCAP(x); 
相同INITCAP函式,但它可以使用不同的排序方法所指定NLSSORT
14NLS_LOWER(x) ; 
同樣的,不同的是它可以使用不同的排序方法所指定NLSSORT LOWER函式
15NLS_UPPER(x); 
相同,不同之處在於它可以使用不同的排序方法所指定NLSSORT UPPER函式
16NLSSORT(x); 
改變排序的字元的方法。任何NLS函式之前必須指定該引數;否則,預設的排序被使用
17NVL(x, value); 
返回如果x為null返回null; 否則返回x
18NVL2(x, value1, value2); 
如果x不為null返回value1; 如果x為null,則返回value2
19REPLACE(x, search_string, replace_string); 
搜尋x對於SEARCH_STRING並替換使用replace_string它
20RPAD(x, width [, pad_string]); 
填充x到右側
21RTRIM(x [, trim_string]); 
從x右邊修剪
22SOUNDEX(x) ; 
返回包含x的拼音表示形式的字串
23SUBSTR(x, start [, length]); 
返回x的一個子開始於由start指定的位置。可選長度為子字串
24SUBSTRB(x); 
相同SUBSTR除外的引數均以位元組代替字元的單位元組字元的系統
25TRIM([trim_char FROM) x); 
從左側和右側修剪x字元
26UPPER(x); 
x轉換為大寫字母,並返回該字串

例項原始碼說明:

-- Created on 2018/3/26 by E.WANG 
/*
字元可以使數字、字母、特殊字元或全部的組合。
Oracle資料庫提供了大量的字串資料型別,
如:CHAR,NCHAR,VARCHAR2,NVARCHAR2,CLOB和NCLOB。
前面加上一個'N'的資料型別為“國家字符集”資料型別,即儲存Unicode字元資料。
如果需要宣告一個可變長度的字串時,必須提供該字串的最大長度。
*/

declare 
  --固定長度的字串。
  --字串右邊填充空格以達到指定的長度。
  char_string char(3);
  --變長字串。最大長度可達32767,為字串指定,並不需要填充。
  varchar_string varchar2(50);
  
  --字元大物件。可變長度的字串,可以達到128兆位元組。
  clob_string clob;
 
begin
  -- Test statements here
  char_string:='yes';
  varchar_string:='I like oracle.becasue it is so powerful!';
  clob_string:='Oracle Corporation is an American multinational computer technology corporation, headquartered in Redwood Shores, California.The company specializes primarily in developing and marketing database software and technology, cloud engineered systems and enterprise software products — particularly its own brands of database management systems. ]In 2015, Oracle was the second-largest software maker by revenue, after Microsoft.
The company also develops and builds tools for database development and systems of middle-tier software, enterprise resource planning (ERP) software, customer relationship management (CRM) software and supply chain management (SCM) software.';
  
  if char_string='yes' then
     dbms_output.put_line(varchar_string);
     dbms_output.put_line(clob_string);
  end if;
  
  --呼叫ascii(x)函式返回字元x的accii值
  dbms_output.put_line('the a ascii value is: ' || ascii('a'));
  
  --呼叫chr(x)返回ascii對應的字元
  dbms_output.put_line('the 97 ascii value is: ' || chr(97));
  
  --呼叫concat(x,y)連線字串x和y,並返回附加的字串。
  dbms_output.put_line('hello, +world= ' || concat('hello,','world')); 
 
  --呼叫initcap(x)每個單詞的首字母轉換為大寫,並返回該字串
  dbms_output.put_line('initcap(hello)----' || initcap('hello'));  
  
  --呼叫instr(x, find_string [, start] [, occurrence])
  --搜尋find_string在x中並返回它出現的位置。
  dbms_output.put_line(varchar_string||'find like position :' || instr(varchar_string,'like')); 
  
  --呼叫instrb(x)
  --搜尋find_string在x中並返回它出現的位置。
  dbms_output.put_line(varchar_string||'find like position :' || instrb(varchar_string,'like')); 
  
  --呼叫length(x):返回x中的字元數
  dbms_output.put_line('the length of ''hello,world!'' is:' || length('hello,world!')); 
  
  --呼叫lengthb(x):返回為單位元組字符集的位元組的字串的長度
  dbms_output.put_line('the lengthb of ''hello,world!'' is:' || lengthb('hello,world!')); 
  
  --呼叫lower(x):把x轉換為小寫字母並返回
  dbms_output.put_line('''HELLO,WORLD!''---' || lower('HELLO,WORLD!'));
  
  --呼叫lpad(x,width[,pad_string]):x用空格向左填充,把字串的總長度達到width
  dbms_output.put_line('''HELLO,WORLD!''---:' || lpad('HELLO,WORLD!',35));
  
  --呼叫ltrim(x[,trim_string]):從x的左邊修剪字元
  dbms_output.put_line('  HELLO,WORLD!'|| ltrim('  HELLO,WORLD!'));
  
  --呼叫nanvl(x,value):如果x是數字就返回x,否則返回value
  dbms_output.put_line('HELLO,WORLD!-----------'||nanvl('123','456'));
   
  --呼叫nlssort(x):改變排序的字元的方法。任何NLS函式之前必須指定該引數;否則,預設的排序被使用
  dbms_output.put_line('HeLLo_nlssort(x)!----'||nlssort('HeLLo'));
  
  --呼叫nls_initcap(x):相同initcap函式,但它可以使用不同的排序方法所指定NLSSORT
  
  dbms_output.put_line('hello_nls_initcap!------'||nls_initcap('hello'));

   --呼叫nls_lower(x):同樣lower函式,不同的是它可以使用不同的排序方法所指定NLSSORT LOWER函式
  
  dbms_output.put_line('HeLLo_nls_lower!----'||nls_lower('HeLLo'));
  
   --呼叫nls_upper(x):同樣upper函式,不同的是它可以使用不同的排序方法所指定NLSSORT UPPER函式
  dbms_output.put_line('HeLLo_nls_upper!----'||nls_upper('HeLLo'));
  
  --呼叫nvl(x,value):返回如果x為null返回value; 否則返回x
  dbms_output.put_line('null_nvl!----'||nvl('','HeLLo'));
  dbms_output.put_line('null_nvl!----'||nvl('NULL','HeLLo'));
  
  --呼叫nvl2(x,value1,value2):返回如果x為null返回value2; 否則返回value1
  --dbms_output.put_line('null_nvl2!----'||nvl2('','value1','value2'));
  --dbms_output.put_line('null_nvl2!----'||nvl2('NULL','value1','value2'));
  
  --呼叫replace(x, search_string, replace_string):從x中查詢search_string字串並用replace_string替換
  dbms_output.put_line(varchar_string||'----'||replace(varchar_string,'like','love'));
  
   --呼叫rpad(x, width[, pad_string]):填充到x的右側,如果width長度比x長,如果沒有指定pad_string,則填空。
  dbms_output.put_line('hello----'||rpad('hello',11,',world'));
  dbms_output.put_line('hello----'||rpad('hello',11));
  
  --呼叫rtrim(x, [, trim_string]):從x右邊修剪。
  dbms_output.put_line('hello----'||rtrim('hello  '));
  dbms_output.put_line('hello----'||rtrim('hello----','----')); 
  
  --呼叫soundex(x):返回包含x的拼音表示形式的字串
  dbms_output.put_line('hello----'||soundex('hello'));
  
  --呼叫substr(x,start[,length]):返回x的一個子開始於由start指定的位置。可選長度為子字串。
  dbms_output.put_line('hello----'||substr('hello',3,2));
  dbms_output.put_line('hello----'||substr('hello',3));
  
  --呼叫substrb(x,start[,length]):相同substr除外的引數均以位元組代替字元的單位元組字元的系統
  dbms_output.put_line('I like oracle----'||substr('I like oracle',3,4));
  dbms_output.put_line('I like oracle----'||substr('I like oracle',3));
  
  --呼叫trim(x, [, trim_string):從左側和右側修剪空白字元
  dbms_output.put_line('I like oracle----'||trim(' like '));
  
  --呼叫upper(x):x轉換為大寫字母,並返回該字串
  dbms_output.put_line('I like oracle----'||upper('I like oracle'));
end;

視窗截圖:


執行結果截圖: