PL / SQL - สตริง

สตริงใน PL / SQL เป็นลำดับของอักขระที่มีข้อกำหนดขนาดที่เป็นทางเลือก อักขระอาจเป็นตัวเลขตัวอักษรว่างอักขระพิเศษหรือรวมกันทั้งหมด PL / SQL มีสตริงสามประเภท -

  • Fixed-length strings- ในสตริงดังกล่าวโปรแกรมเมอร์จะระบุความยาวขณะประกาศสตริง สตริงถูกบุด้านขวาโดยเว้นวรรคตามความยาวที่ระบุไว้

  • Variable-length strings - ในสตริงดังกล่าวมีการระบุความยาวสูงสุดถึง 32,767 สำหรับสตริงและไม่มีช่องว่างภายในเกิดขึ้น

  • Character large objects (CLOBs) - เป็นสตริงที่มีความยาวผันแปรได้สูงสุด 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' คือ '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 Database จะใช้ความยาวสูงสุดที่ต้องการโดยอัตโนมัติ คำประกาศสองคำต่อไปนี้เหมือนกัน -

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

ฟังก์ชันและตัวดำเนินการสตริง PL / SQL

PL / SQL เสนอตัวดำเนินการเชื่อมต่อ (||)สำหรับการเชื่อมต่อสองสตริง ตารางต่อไปนี้แสดงฟังก์ชันสตริงที่จัดเตรียมโดย PL / SQL -

ส. เลขที่ ฟังก์ชั่นและวัตถุประสงค์
1

ASCII(x);

ส่งคืนค่า ASCII ของอักขระ x

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 ด้วยช่องว่างทางด้านซ้ายเพื่อเพิ่มความยาวทั้งหมดของสตริงให้เท่ากับอักขระ width

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

ส่งคืนค่า 1 ถ้า x ไม่ใช่ค่าว่าง ถ้า x เป็นโมฆะค่า 2 จะถูกส่งกลับ

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ที่เริ่มต้นในตำแหน่งที่ระบุโดยเริ่มต้น อาจมีการระบุความยาวเสริมสำหรับสตริงย่อย

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.