آموزش PL/SQL قسمت ششم- رشته و آرایه در PL/SQL

رشته

رشته (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.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.