آموزش PL/SQL قسمت دوم – متغیر ، CONSTANT و LITERAL در PL/SQL

در زبان PL/SQL متغیر (VARIABLE) نامی است که به یک محل ذخیره سازی اختصاص می یابد و برنامه ها می توانند اطلاعات خود را در این محل ذخیره کنند. هر متغیر بر اساس یک نوع داده تعریف می شود. انواع نوع داده ها را در متن قبل توضیح دادیم. در واقع نوع داده برای یک متغیر موارد زیر را مشخص می کند.

1.سایز متغیر

2.قالب کلی متغیر

3.محدوده مقدارهایی که می توانیم در متغیر ذخیره کنیم.

4.عملیاتی که می توانیم روی آن متغیر انجام دهیم.

بنابراین به هر متغیر یک قسمت از فضای حافظه اختصاص می یابد و با استفاده از نام متغیر می توانیم به این فضا دسترسی داشته باشیم.

نکته: نام گذاری متغیرها بر اساس قوانین نام گذاری نشانگرها می باشد که در متن قبل توضیح داده شده است. همچنین توجه شود که نمی توان از کلمات رزرو شده دیتابیس به عنوان نام متغیر استفاده کرد.

می توان متغیرها را در دو قسمت تعریف کرد:

1.درقسمت DECLARE برنامه

2.تعریف متغیر از نوع GLOBAL در یک  پکیچ

سینتکس تعریف یک متغیر به این شکل است:

variable_name [CONSTANT] datatype [NOT NULL] [:= | DEFAULT initial_value]

در این سینتکس variable_name نام متغیر است و datatype یک نوع داده است که می تواند از قبل تعربف شده باشد یا از نوع USER DEFINED باشد.

مثال:

sales number(10, 2);

pi CONSTANT double precision := 3.1415;

name varchar2(25);

address varchar2(100);

برای نوع داده ها می توان سایز، مقیاس یا دقت خاص تعیین کنیم. به این عملCONSTRAINED DECLARATION می گویند که باعث صرفه جویی در فضای حافظه می شود.

مثال: نمونه هایی از CONSTRAINED DECLARATION

sales number(10, 2);

name varchar2(25);

address varchar2(100);

 

مقداردهی اولیه متغیرها

زمانی که یک متغیر ایجاد می کنیم مقدار آن به صورت پیش فرض برابر با NULL است. برای اختصاص مقدار پیش فرض غیر NULL به متغیرها می توان به دو روش زیر عمل نمود:

1.استفاده از کلمه کلیدی DEFAULT

2.استفاده از عملگر مساوی :=

مثال:

counter binary_integer := 0;

greetings varchar2(20) DEFAULT ‘Have a Good Day’;

نکته: می توانیم برای متغیرها از NOT NULL CONSTRAINT استفاده کنیم که در این صورت می بایست آن متغیر یک مقدار اولیه داشته باشد.

نکته: پیشنهاد می شود به تمام متغیرها یک مقدار اولیه مناسب اختصاص داده شود. در غیر این صورت ممکن است برنامه های PL/SQL نتایج نامناسب تولید کنند.

مثال: کاربرد متغیرها و نمایش خروجی آنها

DECLARE

a integer := 10;

b integer := 20;

c integer;

f real;

BEGIN

c := a + b;

dbms_output.put_line(‘Value of c: ‘ || c);

f := 70.0/3.0;

dbms_output.put_line(‘Value of f: ‘ || f);

END;

/

خروجی برنامه:

Value of c: 30

Value of f: 23.333333333333333333

PL/SQL procedure successfully completed.

 

محدوده عملیاتی متغیرها

همانطور که می دانیم می توان در داخل یک بلاک برنامه PL/SQL از بلاک های دیگر استفاده نمود. در این حالت متغیری که در بلاک بیرونی تعریف شده است برای تمام بلاک های درونی قابل دسترس است ولی متغیرهای بلاک های درونی برای بلاک های بیرونی قابل دسترس نیستند. بنابراین متغیرها دو دسته هستند:

1.LOCAL: متغیرهایی که در یک بلاک درونی تعریف شده اند و برای بلاک بیرونی قابل دسترس نیستند.

2.GLOBAL: متغیرهایی که در بلاک بیرونی تعریف شده اند یا در یک پکیچ تعریف می شوند و برای تمام بلاک های درونی قابل دسترس هستند.

مثال:

DECLARE

— Global variables

num1 number := 95;

num2 number := 85;

BEGIN

dbms_output.put_line(‘Outer Variable num1: ‘ || num1);

dbms_output.put_line(‘Outer Variable num2: ‘ || num2);

DECLARE

— Local variables

num1 number := 195;

num2 number := 185;

BEGIN

dbms_output.put_line(‘Inner Variable num1: ‘ || num1);

dbms_output.put_line(‘Inner Variable num2: ‘ || num2);

END;

END;

/

خروجی برنامه:

Outer Variable num1: 95

Outer Variable num2: 85

Inner Variable num1: 195

Inner Variable num2: 185

PL/SQL procedure successfully completed

 

اختصاص نتایج دستورات SQL به متغیرهای PL/SQL

برای اختصاص مقدارهای SQL به متغیرهای PL/SQL از دستور SELECT INTO استفاده می شود. در این دستور باید برای هر مقدار در لیست SELECT یک متغیر با نوع داده مناسب و سازگار در لیست INTO وجود داشته باشد.

مثال: ایجاد یک جدول:

CREATE TABLE CUSTOMERS(

ID INT NOT NULL,

NAME VARCHAR (20) NOT NULL,

AGE INT NOT NULL,

ADDRESS CHAR (25),

SALARY DECIMAL (18, 2),

PRIMARY KEY (ID)

);

Table Created

درج مقدار در جدول:

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)

VALUES (1, ‘Ramesh’, 32, ‘Ahmedabad’, 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)

VALUES (2, ‘Khilan’, 25, ‘Delhi’, 1500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)

VALUES (3, ‘kaushik’, 23, ‘Kota’, 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)

VALUES (4, ‘Chaitali’, 25, ‘Mumbai’, 6500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)

VALUES (5, ‘Hardik’, 27, ‘Bhopal’, 8500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)

VALUES (6, ‘Komal’, 22, ‘MP’, 4500.00 );

برنامه PL/SQL که از مقدارهای جدول بالا استفاده می کند:

عبارت type% به معنی نوع داده برابر با ستون جدول اشاره شده است.

DECLARE

c_id customers.id%type := 1;

c_name customers.name%type;

c_addr customers.address%type;       

c_sal customers.salary%type;

BEGIN

SELECT name, address, salary INTO c_name, c_addr, c_sal

FROM customers

WHERE id = c_id;

dbms_output.put_line

(‘Customer ‘ ||c_name || ‘ from ‘ || c_addr || ‘ earns ‘ || c_sal);

END;

/

خروجی برنامه:

Customer Ramesh from Ahmedabad earns 2000

PL/SQL procedure completed successfully

 

CONSTRAINT

CONSTANT مقداری ثابت است که قابل تغییر نیست. برای تعریف یک CONSTANT همانند متغیرها باید از نام و نوع داده مناسب استفاده کنیم. همچنین می توان NOT NULL CONSTRAINT برای آنها درنظر گرفت. برای تعریف CONSTANT از کلمه کلیدی CONSTANT استفاده می شود.

مثال:

DECLARE

— constant declaration

pi constant number := 3.141592654;

— other declarations

radius number(5,2);

dia number(5,2);

circumference number(7, 2);

area number (10, 2);

BEGIN

— processing

radius := 9.5;

dia := radius * 2;

circumference := 2.0 * pi * radius;

area := pi * radius * radius;

— output

dbms_output.put_line(‘Radius: ‘ || radius);

dbms_output.put_line(‘Diameter: ‘ || dia);

dbms_output.put_line(‘Circumference: ‘ || circumference);

dbms_output.put_line(‘Area: ‘ || area);

END;

/

خروجی برنامه:

Radius: 9.5

Diameter: 19

Circumference: 59.69

Area: 283.53

Pl/SQL procedure successfully completed.

 

LITERAL چیست؟

LITERAL یک مقدار از نوع کاراکتری، عددی یا BOOLEAN است که به صورت صریح تعریف می شود و نام یا نشانگر ندارد. برای مثال TRUE، 786  ، NULL و ‘fortest’ همه LITERALهایی هستند که از نوع داده های مختلف هستند.

نکته: LITERALها حساس به بزرگی و کوچکی حروف هستند.

 مثال هایی از LITERAL برای نوع داده های مختلف را جدول زیر می بینید

مثال:

DECLARE

message varchar2(30):= ‘That”s tutorialspoint.com!’;

BEGIN

dbms_output.put_line(message);

END;

/

خروجی مثال بالا:

That’s tutorialspoint.com!

PL/SQL procedure successfully completed.

نکته: در مثال بالا استفاده از دو علامت ‘ پشت سر هم باعث می شود این علامت به عنوان دلیمتر در نظر گرفته نشود و نادیده گرفته شود.

 

Comments (3)

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

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