PL/SQL - 字符串

  • 简述

    PL/SQL 中的字符串实际上是一个带有可选大小规范的字符序列。字符可以是数字、字母、空格、特殊字符或所有字符的组合。PL/SQL 提供三种字符串 -
    • 固定长度字符串− 在此类字符串中,程序员在声明字符串时指定长度。字符串右填充空格到指定的长度。
    • 可变长度字符串 − 在此类字符串中,指定字符串的最大长度为 32,767,并且不进行填充。
    • 大字符对象 (CLOBs) − 这些是可变长度的字符串,最长可达 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''national character set' 数据类型,用于存储 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 提供的字符串函数 -
    序号 功能和目的
    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] [, occurrence]);
    搜索 find_string 在 x 中并返回它发生的位置。
    6
    INSTRB(x);
    返回一个字符串在另一个字符串中的位置,但以字节为单位返回值。
    7
    LENGTH(x);
    返回 x 中的字符数。
    8
    LENGTHB(x);
    返回单字节字符集的字符串长度(以字节为单位)。
    9
    LOWER(x);
    将 x 中的字母转换为小写并返回该字符串。
    10
    LPAD(x, width [, pad_string]) ;
    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 不为空,则返回 value1;如果 x 为空,则返回 value2。
    19
    REPLACE(x, search_string, replace_string);
    搜索 x 为 search_string 并将其替换为 replace_string。
    20
    RPAD(x, width [, pad_string]);
    x 向右。
    21
    RTRIM(x [, trim_string]);
    修剪 x 从右边。
    22
    SOUNDEX(x) ;
    返回包含以下音标的字符串 x.
    23
    SUBSTR(x, start [, length]);
    返回一个子串 x从 start 指定的位置开始。可以提供子字符串的可选长度。
    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.