PL / SQL - 字符串

PL/SQL中的字符串实际上是具有可选大小规范的字符序列.字符可以是数字,字母,空白,特殊字符或所有字符的组合. PL/SQL提供三种字符串 :

  • 定长字符串 : 在这样的字符串中,程序员在声明字符串时指定长度.字符串右边用空格填充指定的长度.

  • 可变长度字符串 : 在这样的字符串中,字符串的最大长度最大为32,767,并且不会发生填充.

  • 字符大对象(CLOB) : 这些是可变长度的字符串,最多可达128 TB.

PL/SQL字符串可以是变量或文字.字符串文字用引号括起来.例如,

'This is a string literal.' Or 'hello world'


要在字符串文字中包含单引号,您需要在彼此旁边键入两个单引号.例如,

'this isn''t what it looks like'


声明字符串变量

Oracle数据库提供了许多字符串数据类型,例如CHAR,NCHAR,VARCHAR2,NVARCHAR2,CLOB和NCLOB.前缀为'N'的数据类型是'国家字符集'数据类型,用于存储Unicode字符数据.

如果需要要声明一个可变长度的字符串,您必须提供该字符串的最大长度.例如,VARCHAR2数据类型.以下示例说明了声明和使用一些字符串变量 :

DECLARE 
   name varchar2(20); 
   company varchar2(30); 
   introduction clob; 
   choice char(1); 
BEGIN 
   name := 'John Smith'; 
   company := 'Infotech'; 
   introduction := ' Hello! I''m John Smith from Infotech.'; 
   choice := 'y'; 
   IF choice = 'y' THEN 
      dbms_output.put_line(name); 
      dbms_output.put_line(company); 
      dbms_output.put_line(introduction); 
   END IF; 
END; 
/


当在SQL提示符下执行上述代码时,它会产生以下结果 :

John Smith 
Infotech
Hello! I'm John Smith from Infotech.  

PL/SQL procedure successfully completed


要声明固定长度的字符串,请使用CHAR数据类型.在这里,您不必为固定长度变量指定最大长度.如果不使用长度约束,Oracle数据库将自动使用所需的最大长度.以下两个声明是相同的 :

red_flag CHAR(1) := 'Y'; 
 red_flag CHAR   := 'Y';


PL/SQL字符串函数和运算符

PL/SQL提供串联运算符(||) 用于连接两个字符串.下表提供了由PL/SQL提供的字符串函数 :

S.No功能&目的
1

ASCII(x);

返回字符x的ASCII值.

2

CHR(x);

返回ASCII值为x的字符.

3

CONCAT(x,y);

连接字符串x和y并返回附加的字符串.

4

INITCAP(x);

将x中每个单词的首字母转换为大写并返回该字符串.

5

INSTR(x,find_string [,start] [,出现]);

Se x中的 find_string 的拱门并返回它出现的位置.

6

INSTRB(x);

返回位置另一个字符串中的字符串,但返回以字节为单位的值.

                         7

LENGTH(x);

返回的数量x中的字符.

8

LENGTHB(x);

返回长度单字节字符集的字节字符串(字节).

                        9

LOWER(x);

转换字母x为小写并返回该字符串.

10

LPAD(x,width [,pad_string]);

Pads x 左边有空格,以使字符串的总长度达到宽度字符.

11

LTRIM(x [,trim_string]);

修剪 x 左侧的字符.

                        12

NANVL(x,value);

返回值如果x匹配NaN特殊值(不是数字),否则返回 x .

13

NLS_INITCAP(x);

与INITCAP相同函数除了它可以使用NLSSORT指定的其他排序方法.

                     14

NLS_LOWER(x);

与LOWER相同函数除了它可以使用NLSSORT指定的其他排序方法.

                     15

NLS_UPPER(x);

与UPPER相同函数除了它可以使用NLSSORT指定的其他排序方法.

     16

NLSSORT(x);

更改方法排序字符.必须在任何NLS函数之前指定;否则,将使用默认排序.

17

NVL(x,value);

返回值如果 x 为空;否则,返回x.

18

NVL2(x,value1,value2);

如果x不为null,则返回value1;如果x为null,则返回value2.

      19

REPLACE(x,search_string,replace_string);

搜索 x 搜索search_string并将其替换为replace_string.

      20

RPAD(x,width [,pad_string]);

Pads 在右边。

     21

RTRIM(x [,trim_string]);

从右边修剪 x .

     22

SOUNDEX(x);

返回包含的字符串 x 的语音表示.

     23

SUBSTR(x,start [,length]);

返回从b指定的位置开始的 x 的子字符串.可以提供子字符串的可选长度.

24

SUBSTRB(x);

与SUBSTR相同除外参数以字节而不是单字节字符系统的字符表示.

25

TRIM([trim_char FROM)x);

修剪 x 左右两侧的字符.

     26

UPPER(x);

转换字母x为大写并返回该字符串

现在让我们来研究一下几个例子来理解概念 :

示例1

DECLARE 
   greetings varchar2(11) := 'hello world'; 
BEGIN 
   dbms_output.put_line(UPPER(greetings)); 
    
   dbms_output.put_line(LOWER(greetings)); 
    
   dbms_output.put_line(INITCAP(greetings)); 
    
   /* retrieve the first character in the string */ 
   dbms_output.put_line ( SUBSTR (greetings, 1, 1)); 
    
   /* retrieve the last character in the string */ 
   dbms_output.put_line ( SUBSTR (greetings, -1, 1)); 
    
   /* retrieve five characters,  
      starting from the seventh position. */ 
   dbms_output.put_line ( SUBSTR (greetings, 7, 5)); 
    
   /* retrieve the remainder of the string, 
      starting from the second position. */ 
   dbms_output.put_line ( SUBSTR (greetings, 2)); 
     
   /* find the location of the first "e" */ 
   dbms_output.put_line ( INSTR (greetings, 'e')); 
END; 
/


当在SQL提示符下执行上述代码时,它会产生以下结果 :

HELLO WORLD 
hello world 
Hello World 
h 
d 
World 
ello World 
2  

PL/SQL procedure successfully completed.


示例2

DECLARE 
   greetings varchar2(30) := '......Hello World.....'; 
BEGIN 
   dbms_output.put_line(RTRIM(greetings,'.')); 
   dbms_output.put_line(LTRIM(greetings, '.')); 
   dbms_output.put_line(TRIM( '.' from greetings)); 
END; 
/


当在SQL提示符下执行上述代码时,它会产生以下结果 :

......Hello World  
Hello World..... 
Hello World  

PL/SQL procedure successfully completed.