در ادامه درس اول از آموزش زبان 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 :
2- برای شروع به کار با PL/SQL به چه چیزی نیاز داریم
5- کار با PL/SQL در ابزار PL/SQL Developer
6- معرفی انواع داده های PL/SQLمتداول
6،7- تعریف متغیر از نوع جدول (table)
6،8- تعریف متغیر از نوع آرایه (Array)
7،2- Explicit cursor (مکان نمای صریح)
7،3- Implicit cursor (مکان نمای غیر صریح یا ضمنی)
8 - پروسیجر یا Stored procedure
11- معرفی پکیج
11،1- ساخت پکیج در PL/SQL Developer
11،2- تست پکیج
معرفی اوراکل اپکس (oracle apex)