Oracle 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.