رشته
رشته (STRING)، تعداد مشخصی از داده های کاراکتری است. کاراکترهای رشته می توانند از نوع عددی، حروف، جای خالی یا ترکیبی از آنها باشند. در PL/SQL سه نوع رشته داریم:
1.رشته های از نوع FIXED-LENGTH:
در این نوع رشته ها فضای مورد استفاده برابر با حداکثر طول تعیین شده خواهد بود. مانند نوع داده CHAR
مثال 1: در این دو رشته حداکثر طول برابر یک است.
red_flag CHAR(1) := ‘Y’;
red_flag CHAR := ‘Y’;
مثال 2: فضای حافظه رشته زیر معادل با 10 کاراکتر است.
TEST CHAR(10) := ‘HELLO’;
2.رشته های از نوع VARIABLE-LENGTH:
در این نوع رشته ها فضای مورد استفاده برابر با حداکثر طول رشته وارد شده خواهد بود. البته باید حداکثر طول داده را مشخص نمود. مانند نوع داده VARCHAR2.
مثال 1: فضای حافظه رشته زیر معادل با 5 کاراکتر است.
TEST CHAR(10) := ‘HELLO’;
مثال 2: رشته name برابر با ‘John Smith’ است پس فضای مورد نیاز برابر با 10 کاراکتر خواهد بود زیرا رشته name از نوع 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;
/
خروجی
John Smith
Infotech Corporation
Hello! I’m John Smith from Infotech.
PL/SQL procedure successfully completed
3.رشته های از نوع (CLOB(Character Large Object:
این رشته ها از نوع VARIABLE-LENGTH هستند که طول داده می تواند تا 128TB باشد.
نکته: نوع داده های رشته هایی که با N شروع می شوند از نوع NATINAL CHARACTER SET هستند مانند NVARCHAR2.
نکته: در PL/SQL رشته ها می توانند از نوع متغیر یا LITERAL باشد.
مثال: تعریف رشته به صورت LITERAL.
‘This is a string literal.’
‘hello world’
تابع های رشته ای
در PL/SQL توابع زیادی بر روی رشته ها عمل می کنند. در جدول زیر لیست برخی از این توابع به همراه توضیحات آن را مشاهده می کنید. در این توابع منظور از علامت [] اختیاری بودن ورودی داخل آن است.
مثال 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;
/
خروجی:
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;
/
خروجی
……Hello World
Hello World…..
Hello World
PL/SQL procedure successfully completed.
آرایه
در زبان PL/SQL یک ساختمان داده یک بعدی به نام VARRAY وجود دارد که مجموعه ای از المنت های هم نوع با سایز ثابت را در کنار هم ذخیره کند. البته این ذخیره سازی در حافظه به صورت ترتیبی می باشد. یعنی به اولین المنت، آدرس اول از حافظه اختصاص می یابد و آخرین آدرس مربوط به المنت آخر است.
در ادامه سینتکس ساخت VARRAY را می بینید:
CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) of <element_type>
در این سینتکس n برابر با حداکثر تعداد المنت ها است و element_type نوع داده المنت های VARRAY است.
نکته: حداکثر سایز VARRAY یا همان n با دستور ALTER قابل تغییر می باشد.
مثال 1:
CREATE Or REPLACE TYPE namearray AS VARRAY(3) OF VARCHAR2(10);
/
Type created.
سینتکس ایجاد نوع داده:
TYPE varray_type_name IS VARRAY(n) of <element_type>
مثال 2:
TYPE namearray IS VARRAY(5) OF VARCHAR2(10);
Type grades IS VARRAY(5) OF INTEGER;
مثال 3:
DECLARE
type namesarray IS VARRAY(5) OF VARCHAR2(10);
type grades IS VARRAY(5) OF INTEGER;
names namesarray;
marks grades;
total integer;
BEGIN
names := namesarray(‘Kavita’, ‘Pritam’, ‘Ayan’, ‘Rishav’, ‘Aziz’);
marks:= grades(98, 97, 78, 87, 92);
total := names.count;
dbms_output.put_line(‘Total ‘|| total || ‘ Students’);
FOR i in 1 .. total LOOP
dbms_output.put_line(‘Student: ‘ || names(i) || ‘
Marks: ‘ || marks(i));
END LOOP;
END;
/
خروجی
Total 5 Students
Student: Kavita Marks: 98
Student: Pritam Marks: 97
Student: Ayan Marks: 78
Student: Rishav Marks: 87
Student: Aziz Marks: 92
PL/SQL procedure successfully completed.
نکته: VARRAY به صورت پیش فرض برابر با NULL است برای اینکه بتوان به المنت های آن رجوع کرد باید به آنها مقدار اختصاص یابد.
مثال:
Select * from customers;
+—-+———-+—–+———–+———-+
| ID | NAME | AGE | ADDRESS | SALARY |
+—-+———-+—–+———–+———-+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 511dfds | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
+—-+———-+—–+———–+———-+
DECLARE
CURSOR c_customers is
SELECT name FROM customers;
type c_list is varray (6) of customers.name%type;
name_list c_list := c_list();
counter integer :=0;
BEGIN
FOR n IN c_customers LOOP
counter := counter + 1;
name_list.extend;
name_list(counter) := n.name;
dbms_output.put_line(‘Customer(‘||counter ||’):’||name_list(counter));
END LOOP;
END;
/
خروجی
Customer(1): Ramesh
Customer(2): Khilan
Customer(3): kaushik
Customer(4): Chaitali
Customer(5): Hardik
Customer(6): Komal
PL/SQL procedure successfully completed.
Comments (2)