آموزش زبان PL/SQL - درس دوم ...

نوشته شده توسط :
آموزش زبان PL/SQL - درس دوم ...

 در ادامه درس اول از آموزش زبان PL/SQL در این بخش کار با ابزار ( PL/SQL Developer ) و معرفی انواع داده خواهیم پرداخت

5-  کار با PL/SQL در ابزار  PL/SQL Developer :

در ابتدا ابزار PL/SQL Developer را اجرا کنید.

در  PL/SQL Developer از منو  new  گزینه  SQL window  را باز کنید.

و یک مثال ساده از جمع دو عدد را به صورت کد pl/sql  بنویسید.

Declare

-- تعریف یک متغییر از نوع عدد

  v_Result Number;

-- تعریف یک متغیر از نوع عدد با ارزش 50

  v_a Number := 50;

-- تعریف یک متغیر از نوع عدد با ارزش 100

  v_b Number := 100;

Begin

-- دستوری برای نمایش یا چاپ یک خروجی در کنسول

  Dbms_Output.Put_Line('v_a= ' || v_a);

-- دستوری برای نمایش یا چاپ یک خروجی در کنسول

  Dbms_Output.Put_Line('v_b= ' || v_b);

-- دستور جمع

  v_Result := v_a + v_b;

-- دستوری برای نمایش یا چاپ یک خروجی در کنسول

  Dbms_Output.Put_Line('v_Result= ' || v_Result);

End;

برای اجرای دستور روی گزینه    یا کلید F8 کلیک کنید.

نتیجه اجرای مثال فوق :

 

6- معرفی انواع داده های PL/SQLمتداول :

 

6.1- نوع داده عددی در  pl/sql :

در جدول زیر می توانید انواع داه های عددی در pl/sql را مشاهد نمایید :

ردیف

  نوع داده (Data Type)

توضیحات

1

PLS_INTEGER

 

عدد صحیح در محدوده 2,147,483,648- تا 2,147,483,647 ، برای نمایش اعداد در حالت 32bits

2

BINARY_INTEGER

 

عدد صحیح در محدوده 2,147,483,648- تا 2,147,483,647 ، برای نمایش اعداد در حالت 32bits

3

BINARY_FLOAT

 

نوع شماره داده 32 بیتی، با دقت ممیز شناور است.

4

BINARY_DOUBLE

نوع شماره داده 32 بیتی، با دو برابر دقت ممیز شناور است.

5

NUMBER(p, s)

یک مقدار عددی با طول p و طول اعشاری s

6

DEC(p, s)

نوع متغیر با حداکثر دقت 38 رقم اعشار (ANSI)

7

DECIMAL(p, s)

نوع متغیر با حداکثر دقت 38 رقم اعشار(IBM)

8

NUMERIC(p, s)

نوع متغیر با حداکثر دقت 38 رقم اعشار.

9

DOUBLE PRECISION

 

نوع متغیر با حداکثر دقت از 126 رقم های دودویی   (ANSI)  (حدود 38 رقم اعشار)

10

FLOAT

 

نوع متغیر با حداکثر دقت 126 رقم های دودویی (حدود 38 رقم اعشار) (ANSI,IBM)

11

INT

 

نوع متغیرعدد صحیح  با حداکثر دقت 38 رقم اعشار

12

INTEGER

نوع متغیرعدد صحیح  با حداکثر دقت 38 رقم اعشار (ANSI,IBM) 

13

SMALLINT

نوع متغیرعدد صحیح  با حداکثر دقت 38 رقم اعشار (ANSI,IBM) 

14

REAL

نوع متغیر با حداکثر دقت 63 رقم های دودویی (حدود 18 رقم اعشار)

 

 

 

البته می توان رایج ترین انواع داده را به صورت زیر معرفی نمود.

ردیف

 نوع داده (Data Type)

توضیحات

1

Number

متغییر از نوع عددی

2

Integer

عدد صحیح

3

Float

متغیر از نوع اعشاری

4

Double

 

5

Real

  6.2- انواع داده متن :

ردیف

نوع داده (Data Type)

توضیحات

1

Varchar2

متن به اندازه موزد نظر

2

 

 

6.3- انواع داده datetime

ردیف

نوع داده (Data Type)

توضیحات

1

Date

برای تاریخ و زمان

2

 

 

 

6-4 تعریف متغیر با type% :

در زیر ساختار جدول کارمند را مشاهده می کنید :

ستون FIRST_NAME در جدول Employee شامل نوع داده VARCHAR2 است که 20 کاراکتر طول آن می باشد. برای تعریف  این شما می توانید با استفاده از راه های زیر این کار را انجام دهید:

مثال زیر :

تعریف متغیر VARCHAR2 به طول 20

v_First_Name Varchar2(20);

 

در زیر به فیلد v_First_Name مقدار اختصاص خواهیم داد. همچنین ممکن دارد که استثنا رخ دهد هنگامی که طول متغیر بیشتر از طول مقدار رشته (20) باشد.

Select Emp.First_Name

into v_First_Name

From Employee Emp

Where Emp.Emp_Id = 1;

در زیر تعریف متغیر VARCHAR2 به طول 30 را داریم .

v_First_Name2 Varchar2(30);

همچنین برای تعریف متغییر در PLSQL از روش زیر استفاده می کنیم :

v_First_Name Employee.First_Name%Type;

در زیر یک مثال کامل را می بینید :

Declare

  v_Emp_Id     Employee.Emp_Id%Type := 1;

  v_First_Name Employee.First_Name%Type;

Begin

  Select Emp.First_Name

  Into   v_First_Name

  From   Employee Emp

  Where  Emp.Emp_Id = v_Emp_Id;

  ----

  Dbms_Output.Put_Line('v_First_Name= ' || v_First_Name);

Exception

  When No_Data_Found Then

     Dbms_Output.Put_Line('No data with emp_id= ' || v_Emp_Id);

End;

 

6-5 تعریف متغیر با Rowtype% :

-  در زیر تعریف یک متغیر را می بینید.
-  این تعریف یک متغیر از نوع ردیف است .

v_Variable_name Table_Name%Rowtype;

یک مثال :

v_Emp Employee%Rowtype;

در زیر یک مثال کامل را می بینید :

Declare

  v_Emp_Id Employee.Emp_Id%Type := 1;

  v_Emp Employee%Rowtype;

Begin

  Select * Into v_Emp From Employee Emp Where Emp.Emp_Id = v_Emp_Id;

  Dbms_Output.Put_Line(' First_Name= ' || v_Emp.First_Name);

  Dbms_Output.Put_Line(' Last_Name= ' || v_Emp.Last_Name);

Exception

  When No_Data_Found Then

     Dbms_Output.Put_Line('No data with emp_id= ' || v_Emp_Id);

End;

نتیجه اجرای :

 

6-6 تعریف متغیر از نوع رکورد :

ما می توانیم یک متغییر رااز روی یک کورد تعیف کنیم  در زیر نحوه انجام این عمل را می بینید.

TYPE Type_Record_Name IS

    RECORD  (

            Col1  Datatype1  [NOT NULL{:=|DEFAULT} expression],

            Col2  Datatype2  [NOT NULL{:=|DEFAULT} expression],

             ...

     );

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

variable_name  Type_Record_Name;

در زیر یک مثال کامل را می بینید :

Declare

 v_Emp_Id Employee.Emp_Id%Type := 1;

 Type Emp_Name_Type Is Record(

     Emp_First_Name Employee.First_Name%Type

    ,Emp_Last_Name  Employee.Last_Name%Type

    ,Emp_Full_Name  Varchar2(50));

 v_Emp Emp_Name_Type;

Begin

 Select Emp.First_Name

       ,Emp.Last_Name

       ,Emp.First_Name || ' ' || Emp.Last_Name

 Into   v_Emp

 From   Employee Emp

 Where  Emp.Emp_Id = v_Emp_Id;

 Dbms_Output.Put_Line(' First_Name= ' || v_Emp.Emp_First_Name);

 Dbms_Output.Put_Line(' Last_Name= ' || v_Emp.Emp_Last_Name);

 Dbms_Output.Put_Line(' Full_Name= ' || v_Emp.Emp_Full_Name);

Exception

 When No_Data_Found Then

    Dbms_Output.Put_Line('No data with emp_id= ' || v_Emp_Id);

End;

نتیجه اجرای :

 

6-7 تعریف متغیر از نوع جدول   (table):

شما می توانید تعریف کنید یک نوع داده جدید به طوری  که می تواند بسیاری از عناصر را در خود ذخیره کنید. این نوع  table است.

 ویژگی های نوع جدول (table) :

      نوع داده ها از جدول شبیه به یک آرایه است، اما دارای عناص متعددی است.

      شاخص از نوع جدول لزوما نباید متوالی باشند. به عنوان مثال، جدول دارای سه عنصر با شاخص از 1، 3، 5.

 

Syntax :

TYPE  <Table_Name>

IS TABLE OF  <Data_Type>   [NOT NULL]

INDEX BY BINARY_INTEGER;

 

TYPE My_Tbl

IS TABLE OF Varchar2(50)

INDEX BY BINARY_INTEGER;

در زیر یک مثال کامل را می بینید :

 Declare

  Type My_Tbl Is Table Of Varchar2(50) Index By Binary_Integer;

  v_Emps My_Tbl;

Begin

  v_Emps(1) := 'One';

  v_Emps(2) := 'Two';

  v_Emps(3) := 'Three';

  Dbms_Output.Put_Line('Element Count = ' || v_Emps.Count);

  For i In v_Emps.First .. v_Emps.Last Loop

     Dbms_Output.Put_Line('Element at ' || i || ' = ' || v_Emps(i));

  End Loop;

End;           

 

خروجی اجرای دستور بالا به شکل زیر است :

توابع از نوع داده های جدول (table) :

مثال استفاده

توضیحات

نام تابع

v_tbl.delete(3);

حذف ردیف ها در یک جدول.

• DELETE

v_e:=v_tbl.exists;

بازگشت true در صورت ورود مشخص شده در جدول وجود داشته باشد.

• EXISTS

v_count:= v_tbl.count;

 

بازگرداندن تعداد سطر های جدول.

• COUNT

v_first_idx:=v_tbl.first;

اولین ردیف در جدول را برمی گرداند.

• FIRST

v_last_idx:=v_tbl.last;

آخرین ردیف در جدول را برمی گرداند.

• LAST

v_idx:=v_tbl.next(2);

سطر بعدی در جدول پس از ردیف را برمی گرداند.

• NEXT

v_idx:=v_tbl.prior(2);

سطر قبلی در جدول پس از ردیف را برمی گرداند.

• PRIOR

 

تعریف متغیر از نوع آرایه  (Array) :

Syntax :

TYPE <varray_type_name>

IS VARRAY(n)

OF <element_type>;

به عنوان مثال، آرایه، آرایه از 5 عنصر  تعریف کنید  و عناصر از نوع VARCHAR2 (10) باشند :

TYPE cityarray

IS VARRAY(5)

OF Varchar2(10);

یک آرایه n عنصر داریم . عناصر آن به صورت متوالی از 1 تا n شماره هستند.

در زیر یک مثال را می بینید :

Declare

 Type Emp_Array Is Varray(5) Of Varchar2(50);

 Type Salary_Array Is Varray(5) Of Integer;

  v_Names    Emp_Array;

 v_Salaries Salary_Array;

 v_Count    Integer;

Begin

 v_Names := Emp_Array('KING'

                     ,'JONES'

                     ,'FORD'

                     ,'SMITH'

                     ,'BLAKE');

 v_Salaries := Salary_Array(5000

                           ,2975

                           ,3000

                           ,800

                           ,2850);

 v_Count := v_Names.Count;

 Dbms_Output.Put_Line('Count = ' || v_Count);

  For i In 1 .. v_Count Loop

    Dbms_Output.Put_Line('Employee = ' || v_Names(i) || ', Salary = ' ||

                         v_Salaries(i));

 End Loop;

End;

خروجی اجرای دستور بالا به شکل زیر است :

 

آموزش PL/SQL :

1- معرفی

2- برای شروع به کار با PL/SQL به چه چیزی نیاز داریم

3- بررسی اجمالی PL / SQL

4- عبارات ساده PL / SQL

4.1- معرفی If-elsif-else

4.2- معرفی LOOP

4.3- معرفی FOR LOOP

4.4- معرفی WHILE LOOP

5- کار با PL/SQL در ابزار PL/SQL Developer

6- معرفی انواع داده های PL/SQLمتداول

6.1- نوع داده عددی در pl/sql

6.2- انواع داده متن

6،4- تعریف متغیر با type%

6،5- تعریف متغیر با Rowtype%

6،6- تعریف متغیر از نوع رکورد

6،7- تعریف متغیر از نوع جدول   (table)

6،8- تعریف متغیر از نوع آرایه (Array)

7- Cursor (مکان نمای)

7.1- Cursor (مکان نمای) چیست؟

7،2- Explicit cursor (مکان نمای صریح)

7،3- Implicit cursor (مکان نمای غیر صریح یا ضمنی)

8 - پروسیجر یا Stored procedure

9- توابع یا Function

10- تریگر Trigger

11- معرفی پکیج

11،1- ساخت پکیج در PL/SQL Developer

11،2- تست پکیج

معرفی اوراکل اپکس (oracle apex)