codecamp

PL / SQL字符串

在PL / SQL字符串实际上是字符的一个可选尺寸规格的序列。字符可以是数字,字母,空白,特殊字符或所有的组合。 PL / SQL提供了三种字符串:

  • 固定长度的字符串 :在这样的字符串,程序员指定长度,同时宣布该字符串。该字符串是右填充空格以使指定的长度。

  • 变长字符串 :在这样的字符串,最大长度可达32,767,字符串是指定的,没有填充发生。

  • 字符大对象(CLOB):这些是变长字符串,最长可达128兆兆字节。

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 Corporation
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提供的字符串功能:

SN 功能及用途
1 ASCII(X);

返回字符x的ASCII值。

2 CHR(X);

返回与x的ASCII值的字符。

3 CONCAT(X,Y);

连接了字符串x和y,并返回所附串。

4 INITCAP(x)的;

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

INSTR(X,find_string [,开始] [,发生]);

搜索以x find_string并返回其发生的位置。

6 INSTRB(X);

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

7 长度(X);

返回x中的字符数。

8 LENGTHB(X);

返回为单字节字符集字节的字符串的长度。

9 LOWER(X);

该字母转换x中为小写,并返回该字符串。

10 LPAD(X,宽度[,pad_string]);

垫x,其中空格左边,带来的字符串的总长度可达宽字符。

11 LTRIM(X [,trim_string]);

从X的左侧修整字符。

12 NANVL(X,值);

如果x匹配NaN的特殊值(非数字),否则返回x返回值。

13 NLS_INITCAP(X);

相同,但如由NLSSORT指定它可以使用不同的排序方法的INITCAP函数。

14 NLS_LOWER(X);

相同,只是按规定NLSSORT它可以使用不同的排序方法LOWER函数。

15 NLS_UPPER(X);

相同,但如由NLSSORT指定它可以使用不同的排序方法UPPER函数。

16 NLSSORT(X);

改变分选的字符的方法。任何NLS功能之前,必须先指定;否则,默认的排序将被使用。

17 NVL(X,值);

如果x为null,则返回值;否则,返回x。

18 NVL2(X,值1,值);

返回值1如果x不是null;如果x为null,则返回值2。

19 REPLACE(X,search_string的,replace_string);

搜索x对于SEARCH_STRING和replace_string替换它。

20 RPAD(X,宽度[,pad_string]);

垫X到正确的。

21 RTRIM(X [,trim_string]);

剪裁合适的x。

22 SOUNDEX(X);

返回包含x的发音的字符串。

23 SUBSTR(X,开始[,长度]);

返回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.

PL / SQL集合
PL / SQL事务
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }