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.