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 InfotechHello! 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 x 在右边。 |
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.