PL / SQL - Chuỗi

Chuỗi trong PL / SQL thực sự là một chuỗi ký tự với đặc điểm kỹ thuật kích thước tùy chọn. Các ký tự có thể là số, chữ cái, trống, ký tự đặc biệt hoặc kết hợp của tất cả. PL / SQL cung cấp ba loại chuỗi:

  • Fixed-length strings- Trong các chuỗi như vậy, người lập trình chỉ định độ dài trong khi khai báo chuỗi. Chuỗi được đệm bên phải với khoảng trắng có độ dài được chỉ định.

  • Variable-length strings - Trong các chuỗi như vậy, độ dài tối đa lên đến 32,767, cho chuỗi được chỉ định và không có phần đệm diễn ra.

  • Character large objects (CLOBs) - Đây là những chuỗi có độ dài thay đổi có thể lên đến 128 terabyte.

Chuỗi PL / SQL có thể là biến hoặc ký tự. Một chuỗi ký tự được đặt trong dấu ngoặc kép. Ví dụ,

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

Để bao gồm một trích dẫn duy nhất bên trong một chuỗi ký tự, bạn cần nhập hai dấu ngoặc kép bên cạnh nhau. Ví dụ,

'this isn''t what it looks like'

Khai báo các biến chuỗi

Cơ sở dữ liệu Oracle cung cấp nhiều kiểu dữ liệu chuỗi, chẳng hạn như CHAR, NCHAR, VARCHAR2, NVARCHAR2, CLOB và NCLOB. Các kiểu dữ liệu có tiền tố là'N' Chúng tôi 'national character set' kiểu dữ liệu, lưu trữ dữ liệu ký tự Unicode.

Nếu bạn cần khai báo một chuỗi có độ dài thay đổi, bạn phải cung cấp độ dài tối đa của chuỗi đó. Ví dụ: kiểu dữ liệu VARCHAR2. Ví dụ sau minh họa việc khai báo và sử dụng một số biến chuỗi:

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; 
/

Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:

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

PL/SQL procedure successfully completed

Để khai báo một chuỗi có độ dài cố định, hãy sử dụng kiểu dữ liệu CHAR. Ở đây bạn không phải chỉ định độ dài tối đa cho một biến độ dài cố định. Nếu bạn không giới hạn độ dài, Cơ sở dữ liệu Oracle sẽ tự động sử dụng độ dài tối đa được yêu cầu. Hai khai báo sau đây giống hệt nhau:

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

Các hàm và toán tử chuỗi PL / SQL

PL / SQL cung cấp toán tử nối (||)để nối hai chuỗi. Bảng sau cung cấp các hàm chuỗi được cung cấp bởi PL / SQL:

S.Không Chức năng & Mục đích
1

ASCII(x);

Trả về giá trị ASCII của ký tự x.

2

CHR(x);

Trả về ký tự có giá trị ASCII là x.

3

CONCAT(x, y);

Nối các chuỗi x và y và trả về chuỗi được nối thêm.

4

INITCAP(x);

Chuyển chữ cái đầu tiên của mỗi từ trong x thành chữ hoa và trả về chuỗi đó.

5

INSTR(x, find_string [, start] [, occurrence]);

Tìm kiếm find_string trong x và trả về vị trí mà nó xảy ra.

6

INSTRB(x);

Trả về vị trí của một chuỗi trong một chuỗi khác, nhưng trả về giá trị theo byte.

7

LENGTH(x);

Trả về số ký tự trong x.

số 8

LENGTHB(x);

Trả về độ dài của chuỗi ký tự tính bằng byte cho bộ ký tự byte đơn.

9

LOWER(x);

Chuyển đổi các ký tự trong x thành chữ thường và trả về chuỗi đó.

10

LPAD(x, width [, pad_string]) ;

Miếng đệm x với dấu cách ở bên trái, để nâng tổng chiều dài của chuỗi lên đến ký tự chiều rộng.

11

LTRIM(x [, trim_string]);

Cắt các ký tự từ bên trái của x.

12

NANVL(x, value);

Trả về giá trị nếu x khớp với giá trị đặc biệt NaN (không phải số), ngược lại x Được trả lại.

13

NLS_INITCAP(x);

Giống như hàm INITCAP ngoại trừ nó có thể sử dụng một phương pháp sắp xếp khác như được chỉ định bởi NLSSORT.

14

NLS_LOWER(x) ;

Tương tự như hàm LOWER ngoại trừ nó có thể sử dụng một phương pháp sắp xếp khác như được chỉ định bởi NLSSORT.

15

NLS_UPPER(x);

Giống như hàm UPPER ngoại trừ nó có thể sử dụng một phương pháp sắp xếp khác như được chỉ định bởi NLSSORT.

16

NLSSORT(x);

Thay đổi phương pháp sắp xếp các ký tự. Phải được chỉ định trước bất kỳ chức năng NLS nào; nếu không, sắp xếp mặc định sẽ được sử dụng.

17

NVL(x, value);

Trả về giá trị nếu xlà null; ngược lại, x được trả về.

18

NVL2(x, value1, value2);

Trả về giá trị1 nếu x không rỗng; nếu x là null, giá trị2 được trả về.

19

REPLACE(x, search_string, replace_string);

Tìm kiếm x cho chuỗi tìm kiếm và thay thế nó bằng chuỗi thay thế.

20

RPAD(x, width [, pad_string]);

Miếng đệm x rẽ phải.

21

RTRIM(x [, trim_string]);

Cắt tỉa x từ bên phải.

22

SOUNDEX(x) ;

Trả về một chuỗi có chứa biểu diễn ngữ âm của x.

23

SUBSTR(x, start [, length]);

Trả về một chuỗi con của xbắt đầu ở vị trí được chỉ định bởi bắt đầu. Có thể cung cấp độ dài tùy chọn cho chuỗi con.

24

SUBSTRB(x);

Tương tự như SUBSTR ngoại trừ các tham số được thể hiện bằng byte thay vì ký tự cho hệ thống ký tự byte đơn.

25

TRIM([trim_char FROM) x);

Cắt các ký tự từ bên trái và bên phải của x.

26

UPPER(x);

Chuyển các chữ cái trong x thành chữ hoa và trả về chuỗi đó.

Bây giờ chúng ta hãy làm một vài ví dụ để hiểu khái niệm -

ví dụ 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; 
/

Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:

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

PL/SQL procedure successfully completed.

Ví dụ 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; 
/

Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:

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

PL/SQL procedure successfully completed.