ORACLE FINANCIAL CONSULTANT ACCOUNTANT UNDER …
Transcript of ORACLE FINANCIAL CONSULTANT ACCOUNTANT UNDER …
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
Mo7amed Reda Abd El-Rahman
FINANCIAL CONSULTANTORACLE
APPLICATIONS ENVIRONMENTORACLE ACCOUNTANT UNDER
FINANCIAL R12ORACLE INSTRUCTOR
DEVELOPERORACLE INSTRUCTOR
Scientific Computing Center – Mansoura University Mobile : 01066734381
ػذا يبذع ام يـك اغا بمي اغك حخغشن
ؼ اص ا يخ ػ يخفغ ب و في اؼا ايذا
ؼا يبذػا وي الاعخار اخيزاؼشبي اصغ فضذ
ايششا ػا سائؼ
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
Index
Fundamental (I)
Introduction to PL/SQL Chapter1:
Declaring PL/SQL Variables Chapter2:
Writing Executable Statements Chapter3:
Interacting with the Oracle Server Chapter4:
Writing Control Structures Chapter5:
Working with Composite Data Types Chapter6:
Using Explicit Cursors Chapter7:
Handling Exceptions Chapter8:
PL/SQL Program Units Fundamental (II)
Creating Stored Procedure s Chapter1:
Creating Stored Functions Chapter2:
Creating Package Chapter3:
Introduction To PL/SQL
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
PL/SQL
Procedural Language / Structure Query Language
PL \ SQL إزذاد غخ اـــ SQL . ثإضبفخ يضاد غخ اجشغخ الأعشائيخ
لأسزؼلا اخبطخ ثبــ ع ازؼب اSQL يز إدساعب داخ اىد اخبص ثغخ اــPL / SQL .
سف م ف اــPL ثؼ ود رخضيخ ف اــDATABASE م ثبذاء ػي فمظ إسزذػبئخ .
سف م ثأسزخذا بيس ثبزغيشاد(Variables) ايضب اضاثذ(Constant) ح .ااع اخش وضيش
سف سزخذ اغ اششعيخ(If Statement) ع ازىشاس(Loop) . رسزخذ زىشاس ع ؼي ػذد شاد ؼي
. سف م ثىزبثخ اىد شح اؽذح ىب سزغيغ رفيزح اوضش شح
يضاث اـــPL / SQL :
Modularized حـيش ابشاش:
ثن داخ ثؼضب ؽيش سزغيغ ضغ اوضش(Nested Blocks)
الأسزفبدح اخجشاد الأواد اسبثمخ ره ثغؼب ف شى ىزجبد(Libraries) يى الأسزفبدح ب ثي اداد
اساو اخزفخ .
Integration : اخىا
يزىب غ زغبد اساو ض اـــJdeveloper .
Portability : اشت
سزغيغ وزبثخ اىد ػ ا ؽيش(Operating System) ا(Platform) .
Exception : ؼاضت الأخـاء
. ؽيش سزغيغ ؼبغخ الأخغبء إظبسب ثبشى از شيذ
CHAPTER 1
Introduction to PL/SQL
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
ـ ػذة PLيخى ود اـ (Blocks) و(Block) : يخى
ـمت اخؼشيف الأػلا حغخ ػ اي :
Variables – Cursors – Constants – And Other Types Optional
SQLStatement – Pl / SQL Statement Mandatoryاـمت اخفيزيت ـ
Optional ؼاضت الأخـاء
Block Mandatoryايت اــ
: غظ
يزى اــBlock ػ الألBegin End .
PL/SQL Block Structure
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
ـحفيز ص : PL / SQL ػباساث اــ
فبطخ معخ ف بيخ و ع ا ػجبسح ع اــ (;)يز ضغ ػلاخPL / SQL .
ػذ رفيز اجن ثذ أخغبء رظش اغخ ازبيخ زضيؼ رب طؾخ ازفيز
PL / SQL procedure successfully completed .
امعخ ثؼذ بيخ وخ لاؽظ ػذ عد ػلاخ افبطخDeclare اBegin اException
ف بيخ وخ (;)لاؽظ عد ػلاخ افبطخ امعخEnd .
ى لايؾجز ره غؼ لشاءح (;)يى وزبثخ أوضش عخ ا ػجبسح ػ فس اسغش افظ ثي ثؼلاخ افبطخ امعخ
في :اجشبظ اس وزه ازؼذي
ـ ااع اـ ـ Blocksلاعظ ا حى فظت ويا ا خذاخ غ بؼؼا ابؼغ PL / SQLف غت اــ يى ا
(Nested Blocks) : لغي حمغ ز اىخ ا
1) "Anonymous block: الكتلة المجهىلة "
زشعزب رفيزب .مغخ ازغجيك يفز سبػزب يز اسسب ا ؼبظ اساو يس اس يز رؼشيف ػذ
2) "Subprograms: وحدات برمجية "
ؽذاد ا Blocks رمج ؼبلاد(Parameters) رمس ز اؽذاد يى ا رسزذ ػيب ف رفيز اجشبظ
يز اسزذػبئب ػذ اؾبعخ ايب . Databaseداخ اــ ز اؽذاد يز ؽفظب (Function) (Procedure)ا
Blocks
Anonymous block Subprograms
Block Typesااع ابواث
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
Blocks Types
Procedure Function Anonymous
Differences between Anonymous Blocks and Subprograms
Subprogram Anonymous Block
يظ ئع ئع
ػذ و ػيت حفيز Compileم بؼ شة اعذة فمؾ Compileم بؼ
Databaseلايخض ف اــ Databaseيخض ف اــ
اخش Appلاغخـيغ حفيز أخش Appغخـيغ حفيز
Parametersلايى ا يأخز Parametersى ا يأخز
ـا ؟ Functionاــ Procedure افشق بي اـ
اــProcedure . ى رؼد ثميخ ا اوضش ا لا رؼد ثميخ
اــFunction . لاثذ أ رؼد ثميخ
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
زاي :
اظف سل 111اعخخشس اع
Declare
V_fname varchar2 (20);
Begin
Select First_name into V_fname
From employees
Where employee_id = 100 ;
End ;
PL/SQL procedure successfully completed.
ملحىظة :
لابذ هي تهيئة البزبهح لأستخزاج خول الطببعه عي طزيق كتببة الأهز التبلىSet Serveroutput On ز اضت حىخب شة
باغلاق ابشاش .حظ غفظت عخ م Sessionاعذة ف اــ
بعذ تهيئة البزبهح قىم بكتببة خولة الطببعه وهىDBMS_OUTPUT.PUT_LINE والــPUT_LINE هىProcedure
. DBMS_OUTPUTتسوى Packageهحفىظة داخل
تىضع خولة الطببعه داخلBegin وتأخذParameter فى حبلة (||)بذاخلهب بل ستخذم (,)واحذ لذلك لاستطيع استخذام الــ
لى اردب طببعة اكثز هي هتغيز .
: فى حبلة كتببة الكىد بشكل سلين وبذوى أخطبء تظهز الدولة التبليةPL/SQL procedure successfully completed.
Declare
V_fname varchar2 (20);
Begin
Select First_name into V_fname
From employees
Where employee_id = 100 ;
DBMS_OUTPUT.PUT_LINE(„the first name of the employee is : „ || V_fname ) ;
End ;
the first name of the employee is : Steven
PL/SQL procedure successfully completed.
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
Variables اخغيشاث
م: Variable اـ - ف ايس ىا ـ ؼي حخضي إلج غخـيغ ئعخخذا اـ ا لي في بخخضي بيا ؼي
Variables ـ اصدة ف اـ امي شة . Databaseخؼذي الأػافت ػ ايؼا غخـيغ ئعخخذا اوزش
خغيت اـــ : Variablesاماػذ اؼا
يبذأ بغشف لابذ أ
يغخع ػ ا اى ػلااث عشف أسلا
عشف 31يضب الا يضيذ ػ
اغضصة ز واث اساو ا غيشا (Select , Insert)الا يى وت
: غظت
م بخؼشيف اــVarables فDeclarative Section ا اضضء اخاص بــ(Declare) .
ـ ئػـاء اـ اى Variables ـلي ئفخشاػيت ف اـ Declare غخـيغ حبذيا ف
. Beginاضضء اخاص بــ Executable Section اـ
Example
DECLARE
Variable Name Datatype ;
V_hire Date;
V_deptno Number Not Null := 10 ; Null يضب ا لا يغخ ػ
V_location Varchar2(13) := 'Mansoura' ;
V_comm Constant Number := 1400 ; ز اميت رابخت لاحخغيش
Example ( I )
DECLARE
V_Name Varchar2(20) ;
BEGIN DBMS_OUTPUT.PUT_LINE ('My name is: '|| V_Name );
وت يـبغ شء ع ز اغا فمؾ : My Name Isف
V_Name := 'Mo7amed Reda';
DBMS_OUTPUT.PUT_LINE('My name is: '||V_Name);
عيـبغ وت ز اغا My Name Is: Mo7amed Redaف
END ;
CHAPTER 2
Declaring PL/SQL Variables
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
Example ( II )
DECLARE
V_Name Varchar2(20) := 'Mo7amed';
BEGIN
V_Name := ' reda ';
DBMS_OUTPUT.PUT_LINE('My name is: '||V_Name);
END ;
ـ Variableف ز اغات اــ Executable Sectionبا ليت أيؼا ف اــ Declarative Sectionبا لي ف اـ ى
اصدة باخغيش عخـبغ اميت اصدة اــ ػذا Executable Sectionم بـباػت امي
اخفيز زه عيى احش اـباػ . My name is : redaلأا الأعك ف
PL/SQL variables:
Scalar افشدة .
Composite اشوبت . (CH6)
Reference با اشاس .
Large object (LOB) اىبيشة راث الأعضا .
Non-PL/SQL variables:
Host
Bind
الا اخغيشاث اخاطت باـــ PL / SQL :
: غظت
ـ الأفؼ حغيت ا Variable . از يغت يذي ػ ابيا باع
ـ الأفؼ ػذ حغيت اـ Variable ئع . Columnػ
ـ ـ Not Nullا Constantاز يى Variableا ئػـائت لي ئفخشاػيت ف ا . Declarative Sectionلابذ
ـ ا وخابت وت (=:) Assignment Operator ليت ئفخشاػيت ػ ؿشيك ػ Variableغخـيغ ئػـاء ا
Default : وا ي
V_Name Varchar2(20) := 'Mo7amed Reda' ;
V_Name Varchar2(20) Default 'Mo7amed Reda' ;
Types of Variablesأاع اخغيشاث
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
الأفؼ حؼشيف و Variable عـش عخ يغ ػيا ػيت امشاءة أيؼا ؼاضت الأخـاء عت اطي ػ
ايا.
ـ عف خاي اع PL/SQL Variablesاـــ Scalarاع الأي اـــ Chapterعف خاي ف زا اـ
. Non Pl/sql Varciablesخيش اخاص باــ الأ
اخغيشاث افشدة(Scalar Variables) :
يغخ (1 ا حضضء ا لي فشدة أطغش ا ف ااع لايى لي فشدة لايى خغيشاث حغخ ػ
ليت اعذ فمؾ Dateا Varchar2ا Numberاخغيش فيا ع ػ .غيش Booleanا
DECLARE
V_Job Varchar2 (9) ;
V_Count Binary_Integer := 0;
V_Dept Number (9, 2) := 0;
V_Orderdate Date := Sysdate+ 7;
V_Tax_Rate Constant Number := 8.25;
V_Valid Boolean Not Null := TRUE;
ــ الأاع اخخفتData Types :
Char (length) : حشوج فاسغت زا اع ؼش ف لأا بابيااث ا خغيش عشف رابج اغؼت عاء ح
. اخؼا اعشع ف اغاعت ى
Varchar2 (length) : ز اغؼت خغيشة يخ لأ اخغيش بغؼت اض فمؾ بغذ ؼيت ى خغيش عشف راث عؼ
6عشف يلاء باغشف اي 6عشف يػغ في ع 31اخغيش فزلا خغيش عشف راث عؼت الظ عؼت زا
زا اع فيذ ف اغاعت ابـء اع اغابك يخ حفيش ابال . (char)ى
Long : بغذ الظ بيااث اظيت راث عؼ بايج . 32761 اع الأعاع
Long Raw : ــ ز اLong ب لا يف . PL/SQLى لايخ اخؼا
number (p, s) : خا اعذة ا يأخز ـاق 33 خغيش سل 23خات وزه وغش ػشش 127ا
p : . اظغيغت ػذد خااث الأسلا
S : . اؼششيت ػذد خااث الأسلا
Binary_integer : اظغيظ يأخ 2147433+ ز وغس ػششيت خلاي اع اشل
Pls_integer : . ز اع اغابك ى اعشع يأخز غاعت ال
Boolean : ع يأخز رلاد لي فمؾ (true , false m null) يغخخذ ف عالاث اششؽ اماساث اـميت
. فمؾ
Date : ع اخغيشاث اخاسيخيت يغخ ػ بيااث حاسيخ ا يبذأ 4712 لج ا ص لب ايلاد ا
بؼذ ايلاد . 9999
Declaring Scalar Variables
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
Declare
v_job varchar2 (15); عشف 15خغيش عشف راث عؼت
v_count binary-integer := 0; طغيظ يأخز ليت ئبخذائيت طفش خغيش سل
v_total_sal number (7.2) := 3.17; عبغ خااث ارا وغش ػشش خغيش سل
v_order_date date:= sysdate +7 ; يبذأ ف الأعبع اماد خغيش ص
C-TAX-RATIO CONSTANT NUMBER (4.2) :=17.25;
اسبغ خااث خااحا وغش ػشش يأخز ليت افخشاػيت ى 17.25 خغيش رابج سل
V_Flag Boolean Not Null :=True ;
. trueيأخز ليت ئفخشاػيت Nullلايأخز ليت فاسغت ”Boolean“خغيش ـم
%TYPE Attribute
Data type ـ ايضة با اا حأخز فظ ا . Columnاخاص باـ Lengthاـ Data typeى
DECLARE
Variable Name Table Name . Column Name %Type ;
V_Name Employees.Last_Name%Type ;
V_Balance Number(7,2) ;
V_Min_Bal V_Balance%TYPE := 1000;
: غظت
اــ ـ Basic Scalarزا اع افؼ اضذي ف اـ ا حغييش ا حؼذي ف ػذ ػ زلا فا Lengthعيذ ا
ـ يخغيش حمائيا بخغييش اضذي . Variableا
حؼد با . Boolean (true , false , null )امي اخ
؟ 111ئعخخشاس ئع شحب اظف از يغ سل
DECLARE
V_Name Employees.Last_Name%Type ;
V_Sal Number ;
V_Id Employees.Employee_id%Type := 100 ;
BEGIN
Select Last_Name , Salary into V_Name , V_Sal
From Employees
Where Employee_Id = V_Id ;
DBMS_OUTPUT.PUT_LINE( V_Name || ' and His Salary is : ' ||V_Sal);
END ;
---------------------------------------------------------------------------------------------
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
غظت :
اخغيشاث يخ ئشاؤة داخ اـ ـ Sessionزا اع Blockيظ داخ اـ . Host Variableحغ
يػغ لبا وتVariable ـ ـ Sqlحغخخذ أيؼا ف اـ . Pl/Sqlاـ
ػذ وخابتBind Variable لايػغ بؼذة(;) Semi Colon : يى شىت واخا
Variable Variable Name Datatype
ؼغ لب Variable Name:وا ي Colon ( : )ػذ اذاء ػيت ئعخذػائت لابذ ا
اؼاديت غ اــ صت اـباػ . Bind Variableغخـيغ ئعخخذا
؟ 173ئعخخشاس شحب اظف سل
Variable V_Sal Number
BEGIN
Select Salary into :V_Sal
From Employees
Where Employee_Id = 178 ;
END ;
/
Print V_Sal
غظت :
يى اعخخذا اــBind Variable ف اــSQL .
زاي :
ـ Bind Variableا V_Salاغ شحب اظف سل فخشع اا 173ازوس ف ازاي اغابك يغخ ػ
اظفي ازي ػ زا اشحب ؟شيذ الأعخؼلا يغظ ػ
Select Last_Name
From Employees
Where Salary = :V_Sal ;
ـ الا غ اـ اـباػت احاحيىيا حغ Bind Variableان صت لاحؼ . Set Autoprint On حغخخذ ف
Bind Variables
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
Prompt for Substitution Variables
: زاي
غخخذا اــ شحب اظف از ل باعخخشاس شحب؟ Bind Variable عأػـيه سلت ايا وا
Set Veriffy Off
Variable V_Sal Number
Accept Empno Prompt ' Please Enter a Valid Employee ID '
Set Autoprint On
DECLARE
V_Id Number(6) := & Empno ;
BEGIN
Select Salary into :V_Sal
From Employees
Where Employee_Id = V_Id ;
END ;
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
Lexical Units in a PL/SQL Block
غظت :
ػؼا بي غ الأعشف اخاسيخ لابذ . Single Quotitionػذ اخؼا
. عـش غخـيغ وخابت اىد ػ اوزش
) حؼيك ( ىد بـشيمخي وا ي : Commentغخـيغ ػ
1) . --غـش اعذ غخخذ Commentؼ
2) عـش غخخذ Commentؼ ./*مف بـ */لأوزش
ـ م بىخابت اـ الأفؼ ا comment الأواد ششط ظيفت و ود عخ ارا صاء بشش اخش يى اششع ػ
يف الأواد بشى عشيغ . يغخـيغ ا
SQL Functions in PL/SQL
صيغ اــ ـ SQLاصدة باـ Functionsغخـيغ اعخخذا PLداخ ا
. Decode & Group Functionsاػذا اــ
DECLARE
V_Lname Varchar2(20) := Initcap( ' KING' ) ;
V_Name Varchar2(20) ;
BEGIN
Select First_Name into V_Name
From Employees
Where Last_Name Like V_Lname And Salary = 24000 ;
END;
CHAPTER 3
Writing Executable Statements
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
Nested Blocks
غظت :
. ابن اخاسص لايش ابن اذاخ يش ابن اخاسص يإرش في اؼىظ غيش طغيظ ا ا ابن اذاخ
Example
DECLARE
V_Father_Name Varchar2(20) := 'reda';
V_Date_of_Birth Date :='04-Apr-1965' ;
BEGIN
DECLARE
V_Child_Name Varchar2(20) := 'mohamed' ;
V_Date_of_Birth Date := '04-Dec-1985';
BEGIN
DBMS_OUTPUT.PUT_LINE( V_Father_Name ) ; ==== >>> reda
DBMS_OUTPUT.PUT_LINE( V_Date_of_Birth ); ==== >>> 04-Dec-1985
DBMS_OUTPUT.PUT_LINE( V_Child_Name ); ==== >>> mohamed
END;
DBMS_OUTPUT.PUT_LINE( V_Date_of_Birth ); ==== >>> 04-Apr-1965
END;
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
غظت :
غ ى لابذ Qualifierخـيغ ػ حغذيذ ابن اشاد اذاء ػي شيذة عخ خى بن حغيخ بأ ئع
. << >> ػؼ بي
داخ ابن اظغيش فالأيت ف ابن اظغيش لا باذاء ػي فظ الأع ان خغيش ف ابن اىبيش
ابن اظغيش . خغيش اصد ف
Operators in PL/SQL
Logical
Arithmetic
Concatenation
Parentheses to control order of operations
Qualify an Identifier
Example ( I )
<< scc >>
DECLARE
V_Father_Name Varchar2(20) := 'reda';
V_Date_of_Birth Date :='04-Apr-1965' ;
BEGIN
DECLARE
V_Child_Name Varchar2(20) := 'mohamed' ;
V_Date_of_Birth Date := '04-Dec-1985';
BEGIN
DBMS_OUTPUT.PUT_LINE( V_Father_Name ) ; ==== >>> reda
DBMS_OUTPUT.PUT_LINE(scc. V_Date_of_Birth ); ==== >>> 04-Apr-1965
DBMS_OUTPUT.PUT_LINE( V_Child_Name ); ==== >>> Mohamed
DBMS_OUTPUT.PUT_LINE( V_Date_of_Birth ); ==== >>> 04-Dec-1985
END;
END;
Same in SQL
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
Example ( II )
<< scc >>
DECLARE
V_Sal Number(7,2) := 60000 ;
V_Comm Number(7,2) := V_Sal * 0.20;
V_Message Varchar2(255) := ' eligible for commission' ;
BEGIN
DECLARE
V_Sal Number(7,2) := 50000 ;
V_Comm Number(7,2) := 0 ;
V_Total Number(7,2) := V_Sal + V_Comm ;
BEGIN
V_Message := 'CLERK not' || V_Message ;
DBMS_OUTPUT.PUT_LINE ( V_Message ); (1)
scc.V_Comm := V_Sal * 0.30;
DBMS_OUTPUT.PUT_LINE (scc.V_Comm ); (2)
END;
V_Message := 'SALESMAN'||v_message;
DBMS_OUTPUT.PUT_LINE ( V_Message ); (3)
END;
1) eligible for commission .
2) 15000
3) SALESMAN eligible for commission .
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
Using PL/SQL to Manipulate Data
MERGE DELETE UPDATE INSERT
Inserting Data
BEGIN
INSERT into Departments
Values (280 , 'Reda_Dept', 100 , 1700);
END;
*****************************************
Updating Data
DECLARE
Sal_Increase Employees. Salary%Type := 800 ;
BEGIN
UPDATE Employees
Set Salary = Salary + Sal_Increase
Where Job_id = 'ST_CLERK';
END;
*****************************************
Deleting Data
DECLARE
Deptno Employees.Department_id%Type: = 280;
BEGIN
DELETE From Employees
Where Department_id = Deptno;
END;
-----------------------------------------------------------------------------------
CHAPTER 4
Interacting with the Oracle Server
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
EXPLICIT IMPLICIT
عف خات از يم بؼ ابشش
Chapter (7)باخفظي ف
اخ اساو اع اؼ ا ا
يؼ حمائيا بضشد اذاء ػي لاج بؼ
غظت :
اــCursor يؼزجش سبؽخ ف اشا رم اساو ثزغيضب اربريىيب غ و عخSQL رضغ ثب اجيببد امبدخ اــ
SQL .
SQL Cursor Attributes for Implicit Cursors
False SQL%FOUND يغذ يم ثإسزشعبع True عذ ثيببد يم ثإسزشعبع
False SQL%NOTFOUND عذ ثيببد يم ثإسزشعبع True يغذ ثيببد يم ثإسزشعبع
SQL%ROWCOUNT يم ثإسزشعبع ػذد اظفف از رأصشد ثبؼيخ ف ايس
ل بغظ ا صذ زا اظف ؟ 206ظف سل حأرشث باؼيت ا ر اؿبغ ػذد اظفف اخ
DECLARE
V_Rows_Deleted Varchar2(30) ;
V_Empno Employees.Employee_id%Type := 206;
BEGIN
Delete From Employees
Where Employee_id = V_Empno ;
V_Rows_Deleted := (SQL%Rowcount || ' row deleted.');
DBMS_OUTPUT.PUT_LINE (V_Rows_Deleted );
END;
SQL Cursor
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
111ل باػـاء اظف سل ؟ 31111ا صذ اشحب الأح
DECLARE
V_Name Varchar2 (20);
BEGIN
Select Last_Name into V_Name
From Employees
Where Employee_Id = 100;
IF SQL%Found Then
Update Employees
Set Salary = 30000
Where Employee_Id = 100;
End IF;
END;
غظت :
مذ لب ثؼ عخSelect ا يغذ ف يأر ثشء . اشلؽز ؼشف يعذ ظف ثزا ا لا ف عذ سيأر ثإس
اب اــSQL%FOUND فزظش ا اــSQL م ثزفيز ػيخ ازؼذي ا عذد ثيببد ا لا فإ عذد فسف ر
رغذ ف رفؼ شء .
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
DECLARE
V_Myage Number:=30;
BEGIN
IF V_Myage < 11 Then
DBMS_OUTPUT.PUT_LINE (' I am a child ');
ELSE
DBMS_OUTPUT.PUT_LINE (' I am not a child ');
End IF;
END;
CHAPTER 5
Writing Control Structures
IF Statement
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
Example
DECLARE
V_Myage Number:=30;
BEGIN
IF V_Myage < 11 Then
DBMS_OUTPUT.PUT_LINE (' I am a child ');
ELSIF V_Myage < 20 Then
DBMS_OUTPUT.PUT_LINE (' I am young ');
ELSIF V_Myage < 30 Then
DBMS_OUTPUT.PUT_LINE (' I am in my twenties');
ELSIF V_Myage < 40 Then
DBMS_OUTPUT.PUT_LINE (' I am in my thirties');
ELSE
DBMS_OUTPUT.PUT_LINE (' I am always young ');
End IF;
END;
: غظت
ارا يزؾمك اششط الأي يز اغء ا اششط اضب ار رؾمك يز رفيز Then رؾمك اششط الأي يز رفيز الأش از ثؼذ (1
. Elseيز رفيز الأش از ثؼذ nullإرا وبذ اششط وب thenالأش از ثؼذ
IF Condition Then Action
True ـ Action سف يفز اـ
False ـ Action يفز اـ
ف فس اغخ . Ifسزغيغ ضغ اوضش (2
. IFرأر شح اؽذح ف بيخ عخ Elseوخ (3
. IFف بيخ ( ; )سبش ضغ ; End ifف بيخ اششط ضغ وخ (4
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
DECLARE
V_Grade Char(1) := Upper('&Grade');
Appraisal Varchar2 (20);
BEGIN
Appraisal := CASE
When V_Grade = 'A' Then 'Excellent'
When V_Grade In ('B','C') Then 'Good'
Else 'No such grade'
End;
DBMS_OUTPUT.PUT_LINE ('Grade: '|| V_Grade || ' Appraisal ' || Appraisal);
END;
غظت :
امبسبد اجسيغخ فيبNull ابرظ يظجؼNull .
ضؼب Not غNull ابرظ يظجؼNull .
غAnd الأل اــFalse الأضؼف اـTrue .
غOr الأل اــTrue الأضؼف اـFalse .
CASE Expressions
Handling Nulls
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
For Loop While Loop Basic Loop
pBasic Loo
Syntax
Loop
Statement;
Exit [When Condition];
End Loop;
---------------------------
باػافت اــ 3ل ؟ Basic Loopالغ باعخخذا
DECLARE
V_Country_id Locations.Country_id%Type:= 'CA';
V_Loc_id Locations.Location_id%Type;
V_Counter Number := 1;
V_New_City Locations.City%Type := 'Montreal';
BEGIN
Select Max(Location_id) Into V_Loc_id From Locations
Where Country_id = V_Country_id;
LOOP
Insert Into Locations (Location_id, City, Country_id)
Values ((V_Loc_id + V_Counter), V_New_City, V_Country_id);
V_Counter := V_Counter + 1;
EXIT WHEN V_Counter > 3;
END LOOP;
END;
LOOP Statements
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
غظت :
سزظ اــ Loop رؼ ا بلابيخ ؟ ثبغجغ لا ػشب وذ زلال ػشفذ زغيش ثضبثخ ػذاد از يض ػذد
ا اؾذ اغة يخشط ارا فبـ Loopاذساد از رم ثب اــ ف و دسح ضيف اؽذ ػ زا اؼذاد ؽز يظ
Basic Loop يى ثضبثخ ػذاد ؽز ػيخ اــ لاثذ ػ زغيش Loop . ػذ
ارا ؾذدExit When Condition ششط خشط اــLoop فسف رظ اـLoop رؼ ا بلابيخ سف
Error== .< Numeric or Value Error :Number ػ اؼ ثسجت ازيظ يظش زا اـ Databaseرزلف اـ
Precision too Large
فشضب اب لب ثؼ اششط ازبExit When Counter <1 فب اــBasic Loop سف رفز شح اؽذح ػ الأل
. Conditionرفز الا لج اشس ػ اـ Statementره لأ اــ Loopسغ ا اششط يخبف اــ
While Loop
Syntax
While Condition Loop
Statement;
End Loop;
باػافت اـــ 3ل ؟ WHILE Loopالغ باعخخذا
DECLARE
V_Country_id Locations.Country_id%Type:= 'CA';
V_Loc_id Locations.Location_id%Type;
V_Counter Number := 1;
V_New_City Locations.City%Type := 'Montreal';
BEGIN
Select Max(Location_id) Into V_Loc_id
From Locations
Where Country_id = V_Country_id;
WHILE v_counter <= 3 LOOP
Insert Into Locations (Location_id, City, Country_id)
Values ((V_Loc_id + V_Counter), V_New_City, V_Country_id);
V_Counter := V_Counter + 1;
END LOOP;
END;
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
غظت :
اــWhile Loop رم ثؼCheck الا ػ اـ Condition لج رفيز اــStatement فإرا رؾمك رم ثؼ اــLoop
رؼ. Loopسف رظ اـ Conditionوب رؾمك اــ Basic Loopثؼىس اـ Loopارا يزؾمك رؼ اـ
For Loop
Syntax
For Counter in [Reverse] lower-Bound .. Upper-Bound Loop
Statement;
End Loop;
غظت :
اــFor Loop . لارؾزبط ا ػ ػذاد ب ث رم اساو ثؼ اربريىيب ىب م ثزسيز فمظ
فبب م ثىزبثخ اغخ ثزا اشى 11.... 1ف ضلا اسدب عجبػخ الأسلب
For I in 1 .. 10 Loop DBMS_OUTPUT.PUT_LINE ( I );
ازب : 1ؽز اشل 11 اسدب عجبػخ الأسلب ثشى ػىس اشل For I in 1 .. 10فب م وزبثخ اغخ ثبشى
Reverse Loop DBMS_OUTPUT.PUT_LINE (I);
. (1)ثب ف ثذايخ اؼذاد ال لي يغت ا جذأ Nullلاسزغيغ اسزخذا
داخ ثؼضب ف فس اغخ . Loopسزغيغ اسزخذا اوضش
باػافت 3ل ؟ While Loopالغ باعخخذا
DECLARE
V_Country_id Locations.Country_id%Type:= 'CA';
V_Loc_id Locations.Location_id%Type;
V_New_City Locations.City%Type := 'Montreal';
BEGIN
Select Max(Location_id) Into V_Loc_id From Locations
Where Country_id = V_Country_id;
FOR i in 1..3 LOOP
Insert Into Locations (Location_id, City, Country_id)
Values ((V_Loc_id + i), V_New_City, V_Country_id);
END LOOP;
END;
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
Composite Data Types
ن ػا ا :ا
1) PL/SQL Records
2) PL/SQL Collections :-
a. Index By tables.
b. Nested table.
c. Varray.
Records
: غظت
اـRecord يؾ ثذاخ اوضش ليخ ػ ػىس اــScalar .
يؾز اــRecord ػFields (3GL) 3 Generation Language فس اغشيمخ از يز اشبء ز اخببد ث
++Cاـ Cرسزخذب غبد اـ
اجشظ يم ثزؼشيف اـDataType اخبطخ ثز اـFields رسيزب ايضبص ػ اـVariable إػغبء اـRecord
ا زغيش لاثذ رؾذيذ ع ثيببد ا ا اVariable لاثذ رؾذيذDatatype اشح ا اـ ى الأخزلاف ز
Datatype ػجبسح ػ غػخ اـ Datatypes يسذ اؽذح زه يغت ػيب اشبء اـDatatype الا ثؼذ ره
يز إػغبؤب زغيش .
Syntax Create Datatype and Variable .
Type Type_Name is Record (Field1 Datatype , Field2 Datatype , ….) ;
Variable ;
CHAPTER 6
Working with Composite
Data Types
PL/SQL Records
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
غظت :
ش اب لذ لب ثؼDatatype رؾز ػTwo Fields وأب لب ثؼ زغيشا داخ اـDatatype ز لذ لب
. إسب Datatypeثإػغبء ز اـ
ظيفت اظف سل اــ 111ئعخخشس ئع ؟ Recordباعخخذا
DECLARE
Type Emp_Rec is Record (R_Name Varchar2(20) , R_Job Varchar2(20));
V_Rec Emp_Rec ;
BEGIN
Select Last_Name , Job_id into V_Rec
From Employees
Where Employee_id = 100 ;
DBMS_OUTPUT.PUT_LINE (V_Rec.R_Name ||' '|| V_Rec.R_Job ) ;
END;
غظت :
اس ازغيش دد اس افيذ ف ؽبخ اغجبػ لاثذ وزبث(Variable.Field name) .
ضغ امي داخ ازغيش يغت ا يشاػ ازشريت اعد ف اـ . Recordػذ الأسزؼلا
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
%ROWTYPE Attribute
Syntax
Variable_Name Table_Name%Rowtype ;
سزخذ اــ%Rowtype اغذي ف اسزخذب اغشيمخ اؼبديخ اـ اسدب اسزخشاط عيغ أػذحScalar فإب سؾزبط
ثؼذد أػذح اغذي Fieldsفإب سف ؾزبط ا رؼشيف Recordا رؼشيف زغيشاد ثؼذد أػذح اغذي لب ثؼ
. Rowtype%زا سجت إسزخذا خبطيخ أيضب
بـبا 111ئعخخشس صيغ بيااث اظف سل ػت ئعت شحبت ؟ل
Exampl (I)
DECLARE
V_Rec Employees%Rowtype ;
BEGIN
Select * into V_Rec
From Employees
Where Employee_Id = 100 ;
DBMS_OUTPUT.PUT_LINE ( V_Rec.Last_Name || ' ' || V_Rec.Salary);
END;
Exampl (II)
DECLARE
Type T_Rec is Record (R_Sal Number, R_Minsal Number Default 1000,
R_Hire_Date Employees.Hire_Date%Type,
R_Rec1 Employees%Rowtype );
V_Myrec T_Rec ;
BEGIN
V_Myrec.R_Sal := V_Myrec.R_Minsal + 500;
V_Myrec.R_Hire_Date := Sysdate;
Select * into V_Myrec.R_Rec1
From Employees
Where Employee_Id = 100;
DBMS_OUTPUT.PUT_LINE (V_Myrec.R_rec1.Last_Name ||' '||To_Char(V_Myrec.R_Hire_Date) ||' '||To_Char(V_Myrec.R_Sal) );
END;
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
INDEX BY Tables
ع أاع اـ Datatype اؼد الأي ثيى از م ثؼب يزى ػديPrimary Key يفض ا
. Compositeا Scalarرى ع اجيببد ث سليخ اؼد اضب اب ا يى
Syntax
TYPE Type_Name Is Table Of ( Column_type | Table.Column%Type | Table%Rowtype )
INDEX BY (Datatype );
Variable_Name Type_Name;
غظت :
PL/SQL collections
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
Examples(I)
DECLARE
Type T_Name_Table Is Table Of Employees.Last_name%Type
Index By Number;
V_Name T_Name_Table;
BEGIN
V_Name (1) := 'Mo7amed Reda';
IF V_Name.Exists(1) Then
Insert into Employees (LAST_Name , Employee_Id , Hire_Date , Job_Id , Email )
Values(V_Name(1) , 800 , '1-JAN-2010' ,‟SA_REP‟ , „[email protected]‟ );
END;
Examples(II)
DECLARE
TYPE Emp_Table_Type Is Table Of Employees%Rowtype
INDEX BY PLS_INTEGER;
V_Emp Emp_Table_Type;
V_Max_Count Number := 104;
BEGIN
FOR i IN 100 .. V_Max_Count LOOP
Select * Into V_Emp(i)
From Employees
Where Employee_Id = i;
END LOOP;
FOR i IN V_Emp.FIRST .. V_Emp.LAST LOOP
DBMS_OUTPUT.PUT_LINE ( V_Emp(i).Last_Name);
END LOOP;
END;
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
اـ فائذحت ؟ Cursorا ا
ا ا اجشظ از يم ثؼ فزؾ رؼجئز غم ػجبسح يس اع اض Explicit Cursorsاـ -
ف Databaseػ ىب ف ايس رم في ثؼ ػي ؼي ا اب م ثزخضي و اجيببد از ؾزبؽب اـ
سزذػ اجيببد زا عجؼب اسشع ثىضيش يفش لزب Databaseثذلا ا زت ف و شح ا اـ Cursorـ ا
ف ازغيش Databaseوجيشا ارا فبئذر اىجش ف اسشػخ ف الأسزؼلاؼ اجيببد فجذلا ا ضغ امي اــ
از ثغجيؼز خض ف ايس ص مب ا ازغيش . Cursor اـ فأر ثى اجيببد از شيذب شح اؽذ
Syntax
DECLARE
Cursor Cursor_Name is Select_Statement;
BEGIN
Open Cursor_Name ;
Fetch Cursor_Name Into Variables ;
Close Cursor_Name ;
END;
CHAPTER 7
Using Explicit Cursors
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
أعاء ئعخخشس أسلا الأداسة سل ؟31ظف
DECLARE
Cursor Emp_Cursor is Select Employee_Id , Last_Name
From Employees
Department_Id = 30 ;
V_Id Employees.Employee_Id%Type ;
V_Name Employees.Last_Name%Type ;
BEGIN
Open Emp_Cursor ;
LOOP
Fetch Emp_Cursor into V_Id , V_Name ;
Exit When Emp_Cursor %Notfound ;
DBMS_OUTPUT.PUT_LINE ( V_Id || ' and his name is :' || V_Name );
End Loop ;
Close Emp_Cursor ;
END;
خغيشاث اع باعخخذا ازاي اغابك ى بغ ـ Compositeل ا بذلا Recordباخغذيذ باعخخذا
؟ Scalar اخغيشاث اــ
DECLARE
Cursor Emp_Cursor is Select Employee_Id , Last_Name
From Employees
Where Department_Id = 30 ;
V_Rec Emp_Cursor %Rowtype ;
BEGIN
Open Emp_Cursor ;
LOOP
Fetch Emp_Cursor into V_Rec;
Exit When Emp_Cursor %Notfound ;
DBMS_OUTPUT.PUT_LINE ( V_Rec.Employee_Id || „ ‟ ||V_Rec.Last_Name );
End Loop ;
Close Emp_Cursor ;
END;
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
: غظ
و اجيببد از شيذب اــــ Cursorمذ لب ثؼ اـ - Cursorص لب ثإسزذػبئب اـ Databaseضؼب ث
. Cursor اــ ا Variableا ازغيش ثسشػ لأ الأصب ف ايس ساء اـ
Explicit Cursor Attributes
Cursor FOR Loops
For الأشيبء اشبئؼخ الأسزخذا ؽيش اب لاؾزبط ا رؼشيف زغيش ثبسجخ ـ Cursorغ اـ For Loopاسزخذا -
Loop أيضب لاؾزبط فزؼ لا زؼجئخ لا غك اـCursor اــ ارا ف ؾزبط الا ؼCursor فمظ رم اساو
اربريىيب ثفزؾخ رؼجئز غمخ .
الأداسة سل اعاء ظف اــ 31اعخخشس اسلا ؟ For Loopباعخخذا
DECLARE
Cursor Emp_Cursor is Select Employee_Id , Last_Name
From Employees
Where Department_Id = 30 ;
BEGIN
For Rec in Emp_Cursor Loop
DBMS_OUTPUT.PUT_LINE ( Rec.Employee_Id || „ ‟ ||Rec.Last_Name );
End Loop ;
END;
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
Syntax %ISOPEN Attribute
BEGIN
IF NOT c_emp_cursor%ISOPEN THEN
OPEN c_emp_cursor;
END IF;
LOOP.................
اخاطيت . NOTFOUND %ROWCOUNT%زاي ػ اعخخذا
ECLARE
Cursor C_Emp Is Select Employee_Id, last_name
From Employees;
V_Rec C_Emp%Rowtype;
BEGIN
Open C_Emp ;
LOOP
Fetch C_Emp INTO V_Rec ;
Exit When C_Emp %Rowcount > 10 or C_Emp %Notfound;
DBMS_OUTPUT.PUT_LINE ( V_Rec.Employee_Id ||' '||V_Rec.Last_Name);
End Loop;
Close C_Emp ;
END ;
غظت :
اطجؼ فبسغب ا ػذد اظفف از ر سؾجب Cursorساء اـ Loopيزؾمك الا رخشط اــ ف ز اؾبخ ا ششط -
. 11اوجش
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
ـ اـ . Cursor FOR Loops Using Subqueriesزاي ػ اعخخذا
BEGIN
For R in ( Select Employee_Id, Last_Name From Employees
Where Department_Id =30 ) LOOP
DBMS_OUTPUT.PUT_LINE ( R.Employee_Id ||' '||R.Last_Name);
End Loop;
END;
غظت :
ف Cursorىب اـ Subqueyضغ عخ الأسزؼلا داخ لب ثؼ Cursorو بفؼب اب ثذلا ػ اــ -
ظيف ى يس ثفس اسشػخ .فمظ رم ثفس ا for Loopاــ
ـ اـ . Cursors with Subqueriesزاي ػ اعخخذا
DECLARE
Cursor Sub is Select D.Department_Id , D.Department_Name,E.Staff
From Departments D, (Select Department_Id,Count (*) as Staff
From Employees
Groub by Department_Id) E
Where D.Department_Id = E.Department_Id And E.Staff >= 3;
BEGIN ………
غظت :
Cursorبرظ زا اـ - ظفي . 3 اسلب اسبء الأداساد از ثب ظفي اوجش ا يسب
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
Cursors with Parameters
زغييش اارظ . Parametersػ عشيك إدخبي Cursorافبئذح اب سزغيغ رغييش امي ابرغخ ػ اـ -
Example
DECLARE
Cursor C_Emp (P_Id Number) is Select Employee_Id, Last_Name
From Employees
Where Department_Id = P_Id ;
V_Id Number ;
V_Name Varchar2(20) ;
BEGIN
Open C_Emp( 10 ) ;
Loop
Fetch C_Emp Into V_Id , V_Name ;
Exit When C_Emp%Notfound ;
DBMS_OUTPUT.PUT_LINE (V_Id || ‟ ‟ || V_Name);
End Loop ;
Close C_Emp ;
DBMS_OUTPUT.PUT_LINE („---------------------------‟);
Open C_Emp( 30 ) ;
Loop
Fetch C_Emp Into V_Id , V_Name ;
Exit When C_Emp%Notfound ;
DBMS_OUTPUT.PUT_LINE (V_Id || ‟ ‟ || V_Name);
End Loop ;
Close C_Emp ;
END;
غظت :
شح اخش ثجيببد اخش ى ره Cursorثزا اشى ى لذ لب ثزغييش اجيببد اوضش شح ػ عشيك فزؼ اــ -
غت ػ ز اشىخ سزخذ اخبطيخ ا فزػ ثبفؼ ز Errorامذي الا سيظش ب Cursorيزغت ب غك اــ
Cursor_Name%Isopen .
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
لج ا ز اشؽخ شؽخ إخزيبسيخ سغزيغ الأسزغبء ػب ىب شؽخ بخ فيب يز ازؼب غ روشبوب -
ب لشأرب ؽيش ا الأخغبء الأخغبء از ى ا رظش سزخذ ابئ ؼبغزب إظبسب ثظس يسزغيغ ف
زه ظشب ثظسح ثسيغخ . از رظش اساو لايسزغيغ اسزخذ ابئ فب
Predefined Oracle Server
ايضب سل ض Error لج اساو اشسي يى ذي إس ـ زؼبسف ػي Error 21 ؽابن -
شسبخ .
Example
DECLARE
V_Name Varchar2(20);
BEGIN
Select First_Name into V_Name
From Employees
Where Last_Name Like „King‟ ;
DBMS_OUTPUT.PUT_LINE („V_Name‟);
EXCEPTION
When Too_Many_Rows Then
DBMS_OUTPUT.PUT_LINE („Query Retrieved Multiple Rows‟);
END;
غظت :
Syntax Exception
EXCEPTION
When Exception1 [Or Exception2] Then Statement ;
[When ………………………………………. Then Statement ; ]
[When Others
CHAPTER 8
Handling Exceptions
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
ا بن اوضش شخض ى غ وزبثخ اــ Errorفإ سف يظش King عذ اوضش ظف يس -
Exception ا اــ فسزظش اشسبخ از وزجبب زError 21 اشبيش اـ
لب ثىزبثخ ز اغخ -
Select Last_Name From employees Where salary = 2542184518 ;
لأ لايعذ ظف يأخز زا اشرت Error No Data Found ==> فإ سف يظش بزا اــ
DECLARE
V_Name Varchar2(20);
V_Sal Number;
BEGIN
Select Last_Name into V_Name
From employees
Where salary = 2542184518;
DBMS_OUTPUT.PUT_LINE ('V_Name' );
DBMS_OUTPUT.PUT_LINE ( 'V_Sal' );
EXCEPTION
When No_Data_Found Then
DBMS_OUTPUT.PUT_LINE ( 'لايصذ ظف يأخز زرا اشحب ');
When Others Then
DBMS_OUTPUT.PUT_LINE (SQLCODE || '' || SQLERRM);
END;
غظت :
لأب عبءا V_nameلا اـ V_salثز اظسح سف يظش ا لايعذ ظف ثزا اشرت يم ثغجبػخ اــ -
فإ سف Selectاب ضؼب عخ اغجبػ اشرت الأس اػ اـ Errorاز رؾز ػ اــ Selectثؼذ عخ
. Nullرم ثغجبػخ
Error SQLCODEحأح بشل اـ
Error SQLERRMحأح بض سعات اـ
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
ـ بؼشع ا لب اا Errorsعف م الأ Error 21اخؼاسف ػيا اشسة وا لا خؼاشف ػي
والأح :
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
ServerNon predefined Oracle
ى اشىخ اب لاسزغيغ اذاء Errorف ز اؾب اـ - لايزه يخ ا لا يزه اس ذي ثبغجغ سل ذي سسب
يؾ ثذاخخ Exceptionػي لأ يس إس زه م ثؼ زغيش اع ضغ Errorا ا
ثبـ Errorاـ عشيك بيس ػ رشثظ رضغ اــ Paragmaثذاخ داخ Error از
Variableاـ
يؾذس ارا ؽبب اضبفخ ليخ - ؟ Not Nullف ػد Nullبز
سلخ Errorثبغجغ سيظش - رمي اب لاسزغيغ ضغ ليخ 11411- داخ Nullسسبز
اشسبخ زا اشل Not Nullػد ظشد ز ابئ يف شيئب زه ى اسزخذ
يسزغيغ فب . سسب سف ظش
Example
DECLARE
V_Error Exception;
Pragma Exception_init (V_Error , -01400);
BEGIN
Insert into Departments (Department_Id , Department_Name)
Values ( Null , 'Mo7amed Reda');
EXCEPTION
When V_Error Then
DBMS_OUTPUT.PUT_LINE ('ػغ ليت داخ اؼد ; ('لابذ
END;
User Defined Exceptions
-وهما نىعان :
Raise_Application_Error Raise
ى اىد يغجك فؼيب PL/SQL Procedural Successfullyز اشح لارعذ شىخ لأ يظش ب -
يضؼ ا اؼؼيخ رز يظش اب غؾذ فؼ عشيك Error ثذلا ا يظش ب يغؼ ف رفيز اغة ى
. غجشح ػ اظبس سسبخ رضؼ ا اؼيخ رزسزغيغ ارا يفز اىد اغة فإب Raiseاسزخذا
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
1) Raise
Example
DECLARE
V_Error Exception ;
BEGIN
Update Employees
Set Salary = 12000
Where Employee_Id = 123456 ;
IF SQL%Notfound Then Raise V_Error ;
End IF;
DBMS_OUTPUT.PUT_LINE (SQL%Rowcount);
Commit;
EXCEPTION
When V_Error Then
DBMS_OUTPUT.PUT_LINE ('لا يصذ ظف بزا اشل ');
END;
ا Raise سزخذ - رذ ػيخ ازؾذيش ثغبػ زا عجؼب يؾذس ؼذ عد ظف ىب ظش ب سسب
ثزا اشل .
- %ROWCOUNT == < ػذد اظفف از رأصشد ثبؼيخ خلاي ايس فإرا وب وزجب رم ثبمشاءح
Commit لجDBMS فإ يظش يغجغ شيئبره لأCommit رم ثؼSave ؼيبد
رؾ ب ف ايس . Databaseيس ا اـ ا
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
2) Raise_Application_Error
اساو Errorطشيؼ ض Errorا لا لاي ى اجشظ خلا يسزغيغ ظس Errorف ز اشح بن -
و ثع غػ الأسلب سل سسبخ اى ا م ثأسزخذا اسلب خبطخ ثبساو مذ لبذ اسا
ؽز م ثز Raise_Application_Errorسزخذ 21222ؽز 21111سزغيغ اسزخذاب رجذأ
Executableا غمخ اـ Exception Sectionاؼيخ سزغيغ ا فؼ ره ثىبي ب اب غمخ اــ
Section . .
- Executable Section
BEGIN
Delete From Employees
Where Employee_Id = 123456;
IF SQL%Found Then
DBMS_OUTPUT.PUT_LINE (SQL%Rowcount );
Elsif SQL%Notfound Then
Raise_Application_Error (-20001, „الرقم بهذا مىظف يىجد لا ‟);
End IF;
END;
- Exception Section
DECLARE
V_Name Varchar2(20);
BEGIN
Select Last_Name into V_Name
From Employees
Where Employee_Id = 123456;
EXCEPTION
When No_Data_Found Then
Raise_Application_Error (-20002, „اشل بزا ظف يصذ لا ‟);
END;
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
ثبجن اــ Subprogramيؼزجبس اؽذ افشاد ػبئخ اـ ع ااع اجوبد - غ إخزلاف ثسيظ Anonymousرىي شجي
اجبل وب Variablesؽز ضغش ا رؼشيف Asا Isسزخذ ثذلا Declareلاسزخذ اــ Procedureغ اــ
Databaseح اؽذح سزغيغ رفيزح اذاء ػي اوضش شحلأ خض ف اــ اب م ثىزبثخ اىد ش Procedure يضح اــ
ى يس اضشس ا يؼد زا الأعشاء ثميخ ؼي ... ا ا ى ا يؼد ثميخ ا لا ...
ـ ـ Subprogram (Procedure , Function)افشق بي ا ؟ Anonymous Blockاـ
Syntax
Create [ or Replace ] Procedure Procedure_Name
[ (Parameter1 [Mode1] Datatype1, Parameter2 [Mode2] Datatype2, . . .) ]
Is | As
Variables;
BEGIN
END [Procedure_Name];
غظت :
. Procedureم ثإسزخذا وخ زؼذي ػ اـ -
ا لا . Parametersرسزغيغ ا رأخز Procedureاــ -
يس ث أخغبء Syntaxػي فإرا وب اـ Checkيم ثؼ Compilerفإ اـ Functionا اــ Procedureػذ ػ اــ -
:Warningفسف رظش ز اشسبخ Errorارا وب بن Procedure Createdفإ رظش سسبخ رمي
Function Created with Compilation Error .
. Show Errorsؼشفخ اخغأ اعد م ثىزبثخ -
CHAPTER 1
Creating Stored Procedures
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
بؼ باػافت اداسة صذيذة ؟ Procedureل حم
CREATE PROCEDURE Add_Dept
IS
V_Dept_Id Number := 280 ;
V_Dept_Name Varchar2(20) := 'Outbox';
BEGIN
Insert into Departments ( Department_Id,Department_Name)
Values (V_Dept_Id , V_Dept_Name ); DBMS_OUTPUT.PUT_LINE ('Inserted '||
SQL%Rowcount ||' row ');
END;
لذ ا بؼ فزا فا ره يخ بـشيمخي ا : Procedureبزا اشى حفز بؼذ ا اسدا ا ىا
- Execute Add_Dept ;
- BEGIN
Add_Dept ;
END;
غظت :
لا حؼ ف افسض غخمبلا . - يفؼ ئعخخذا اـشيمت ازايت لأ اـشيمت الأ
Parameters
ثبزغيشاد ى رشس اميخ فمظ داخب اب ازغيش فيم ثؾ اميخ م ثزؼشيف اــ - ثؼذ إس اـ Parameterشجي
Procedure لايأخزLength .
P_Name Varchar2 √ P_Name Varchar2(20) x
ـ : Parameterا - ااع
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
غظت :
- Parameters Formal :- اــ Parameter : ف ؽبخ الأشبء ض
Create Procedure Add_Name (P_Name Varchar2 )
- Actual Parameters :- اــ Parameter ض : ف ؽبخ إػغبء ليخ
BEGIN
Add_Name („ Mo7amed Reda‟);
END;
Using IN Parameters: Example
ل بؼProcedure ف شحب بز اغبت ؟ م باػـائا سل اظف غبت اغافض حم باخؼذي
CREATE OR REPLACE PROCEDURE Raise_Salary
( P_Id IN Employees.Employee_Id%Type, P_Percent IN Number)
IS
BEGIN
Update Employees
Set Salary = Salary + (Salary * P_Percent)
Where Employee_Id = P_Id;
END Raise_Salary;
:خفيزا
BEGIN
Raise_Salary ( 100 , .4 );
END;
Using OUT Parameters: Example
ل بؼProcedure باػـائا سل اظف حؼـيا ئع شحب ؟م
CREATE OR REPLACE PROCEDURE Query_Emp
(P_Id IN Number ,P_Name OUT Varchar2, P_Sal OUT Number)
IS
BEGIN
Select Last_Name, Salary Into P_Name, P_Sal
From Employees
Where Employee_Id = P_Id;
END Query_Emp;
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
: خفيزا
DECLARE
V_Name Varchar2(20);
V_Sal Number;
BEGIN
Query_Emp ( 171 , V_Name , V_Sal );
DBMS_OUTPUT.PUT_LINE ( V_Name || „ ‟ || V_Sal );
END;
-:ؿشيمت أخش خفيز
VARIABLE V_Name Varchar2(25)
VARIABLE V_Sal Number
EXECUTE Query_Emp (171, :V_Name , :V_Sal) ;
/
PRINT V_Name , V_Sal
غظت :
. Out اع Parameterثب Procedureػب م ثبذاء ػ اـ Variableلاثذ ػ -
Using IN OUT Parameters: Example
؟ 455-0984(010)عف أػـيه سل باي اسيذ اعخخشاص بزا اشى
CREATE OR REPLACE PROCEDURE Format_Phone
(P_Phone_No IN OUT Varchar2)
IS
BEGIN
P_Phone_No := '(' || Substr (P_Phone_No,1,3) ||
')' || Substr (P_Phone_No,4,3) ||
'-' || Substr (P_Phone_No,7);
END ;
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
-:خفيزا
DECLARE
V_Phone Varchar2(20) := '01009844556';
BEGIN
Format_Phone (V_Phone );
DBMS_OUTPUT.PUT_LINE (V_Phone );
END;
غظت :
In Out اع Parameterثب Procedureػذب م ثبذاء ػ اــ Variableلاثذ ػ -
Syntax for Passing Parameters
-ثأوضش شى : Parametersسزغيغ اذاء ػ اــ -
اـ Parameter)اخشحيب( م بػغ لي اـ Procedure Positionaبفظ اخشحيب اصد ف
اـ ةاخاطت ب : Parameter)الأع( م بىخابت ئ بضاسة امي
P_Name => „Mo7amed Reda‟ Named
ؼا اخشحيب( م بىخابت امي باـشيمخي اغابمخي Combination )الأ
ل باشاءSequence ؟ 1حضيذ بؼذي 1111حبذأ
Create Sequence Reda_Seq Start With 1000 Increment By 1 ;
ل بؼProcedure باػـائا سل اظف حؼـيا ئع شحب ر ل باذاء ػيا بازلاد ؿشق م
اغابمت ؟
CREATE OR REPLACE PROCEDURE Add_Dept
( P_Name Varchar2, P_Loc IN Number )
IS
BEGIN
Insert Into Departments ( Department_Id, Department_Name,
Location_Id)
Values (Reda_Seq.Nextval , P_Name, P_Loc);
END Add_Dept;
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
-: خفيز
• Passing by Positional Notation
Execute Add_Dept (‘Education’ , 2300 );
• Passing by Named Notation
Execute Add_Dept (P_Loc => 2400, P_Name => ‘Training’ );
• Passing by Combination Notation
Execute Add_Dept (‘Advertising’ , P_Loc => 2500 );
Invoking Procedures
ذد ايضب خلاي رؼشضب لأضخ وضيشح ف زا اظ anonymous blocks خلاي Parametersسزغيغ اذاء ػ اــ -
Procedure . اخش
CREATE OR REPLACE PROCEDURE Process_Employees
IS
Cursor Emp_Cursor is Select Employee_Id
From Employees;
BEGIN
For Rec in Emp_Cursor Loop
Raise_Salary Rec.Employee_Id , .3);
End Loop;
Commit;
END Process_Employees;
andled ExceptionsH
ب الأخغبء از يى ا رمغ ثب ص لب Exceptionلب ثؼ Add_Deptرس Procedureػ إفزشاع اب لب ثؼ -
. Add_Deptاخش ظيفزب اذاء ػ Procedureثؼ
ارا يغذد عذد خـأ ف اـAdd_Dept ى لذ لا بؼاضخ ؟
يلف و شء . Error يؼبظ فسف يظش ب Errorب لذ لب ثؼبغز ف يؾذس شيئب اب ارا وب بن ارا و -
Removing Procedures
Syntax
- DROP Procedure Procedure_Name ;
Example
- DROP Procedure Raise_Salary;
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
Viewing Procedures in the Data Dictionary
ـشؤيت ؼشفت - لج بؼا Procedureاىد از لذ لج بىخابخ داخ ا اخ
Select *
From User_Source
Where Name = ' Add_Dept '
And Type = 'PROCEDURE'
Order by Line;
ـ - لج بؼا Procedureشؤيت ؼشفت اعاء ا اخ
Select Object_Name
From User_Objects
Where Object_Type = 'PROCEDURE';
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
ثبجن اؼبد اـ Subprogram ع ااع اجوبد يؼزجش اؽذ افشاد ػبئخ اـ - غ Anonymousرىي يى شجي
ؽز ضغش Asا Isلاثذ وزبثخ Asا Isرسزخذ ثذلا ب Functionغ اــ Declareإخزلاف ثسيظ لارسزخذ
اب م ثىزبثخ اىد شح اؽذح اذاء ػيخ رفيزح اوضش شح Function اب اجبل وب يضح اــ Variablesاخ رؼشيف
ثميخ . Functionلاثذ ا رؼد اــ Databaseلأب خض ف اــ
افشق بي اـSubprogram (Procedure , Function) اــAnonymous Block ؟
Syntax
CREATE [ OR REPLACE ] FUNCTION Function_Name [(Parameter1 [mode1] Datatype1, …....)]
RETURN Datatype
IS|AS
[Variables ; …]
BEGIN
RETURN expression;
END [function_name];
غظت :
ا ابرظ اشاد Functionا اب م ثزيئخ اـ Return Datatypeف اـ Functionـ اـ Procedureافشق ثي اـــ -
از في ؾذد ازغيش از شيذ ا ضغ في Return Expressionاز لذ ثزؾذيذح سزمج خلاي إسزخشاعخ سيى
اميخ .
فمظ . In اع الا Paramerterاسزخذا Functionلاسزغيغ غ اــ -
لا ؾذد ب Datatypeػذ رؾذيذ اــ Returnايضب اـ Lengthوب ػشفبب سبثمب ػذ رؼشيفب فإب لاؼغيب Paramerterاــ -
Length . ايضب
CHAPTER 2
Creating Stored Functions
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
ل بؼFunction ؼـيا سل اظف حؼـيا شحب ؟
CREATE OR REPLACE FUNCTION Get_Sal ( P_Id Number )
RETURN Number
IS
V_Sal Number:= 0;
BEGIN
Select Salary into V_Sal
From Employees
Where Employee_id = P_Id;
RETURN V_Sal;
END Get_Sal;
اــ ؟ Functionان اسبغ ؿشق خفيز ز
غظت :
في .لأسزشعبع اميخ Functionلاثذ ػ زغيش ػذ اذاء ػ اــ -
ل بؼFunction ؼـيا اشحب حؼـيا طاف اؼشيبت اخاص ب ؟
CREATE OR REPLACE FUNCTION Tax (P_Value IN Number)
RETURN Number
IS
BEGIN
RETURN (P_Value * 0.08);
END Tax;
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
: خفيزا
Select Employee_Id, Last_Name, Salary, Tax(Salary)
From Employees
Where Department_Id = 100;
ل بؼFunction اظف حؼد بـ Trueؼـيا سل خعؾ شحباث اداسح اؼىظ ؟ False شحب اوبش
CREATE FUNCTION Check_Sal ( P_Id Number)
RETURN Boolean
IS
V_Dept_Id Employees.Department_Id%Type;
V_Empno Employees.Employee_Id%Type ;
V_Sal Employees.Salary%Type;
V_Avg_Sal Employees.Salary%Type;
BEGIN
Select Salary,Department_Id into V_Sal,V_Dept_Id
From Employees
Where Employee_Id = P_Id;
Select Avg(Salary) into V_Avg_Sal
From Employees
Where Department_Id=V_Dept_Id;
IF V_Sal > V_Avg_Sal THEN
RETURN True;
ELSE
RETURN False;
End IF;
EXCEPTION
When NO_DATA_FOUND Then
RETURN Null;
END;
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
:خفيزا
DECLARE
V_Check Boolean ;
BEGIN
V_Check := Check_Sal ( 205) ;
IF V_Check = True Then
DBMS_OUTPUT.PUT_LINE („T‟);
ELSIF V_Check = False Then
DBMS_OUTPUT.PUT_LINE („F‟);
End IF ;
END;
غظت :
. Show Errorsشؤيخ اخغأ ىزت -
Removing Functions
Syntax
DROP Function Function_Name ;
Example
DROP Function Get_Sal ;
Viewing Functions in the Data Dictionary
از لج بىخابخ داخ اـ شؤيت صؼشفت اىدFunction اخ لج بؼا.
Select Text
From User_Source
Where Name = ' Get_Sal '
And Type = 'FUNCTION' ;
شؤيت ؼشفت أعاء اـFunctions . اخ لج بؼا
Select Object_Name
From User_Objects
Where Object_Type ='FUNCTION';
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
الأذاف :
ازؼشف ػ اــBackage . ىبرب
اشبءBackage رزض غػخExceptions – Functions – Procedures – Cursors – Variables.
اــ . Backageازؼشف ػ ويفيخ اسزذػبء رشغي
صضئي ا : Backageحخى اـــ
1) Specification 2 )Body
الا . Bodyؽيش ا لايى اشبء اـ Bodyالا ص م ثإشبء اــ Specificationلاؽظ ا لاثذ اشبء اــ -
ى Public))اغضء اـ Specification ف اــ ثششط عد Functionا Procedureلأ (Call)يىه إسزذػبء ا ػ -
فمظ( . Privateفمظ )اغضء اـ Package Bodyاعدي ف اـ Functionا Procedureلايى أسزذػبء
اغابك - اشع :ف
يىب إسزخذا اـBackage ( ػ عشيك اــProcedure A ؽيش ر رؼشيف ز اــ )Procedure اـ فSpecification .
لايىب إسزخذا اـBackage ( ػ عشيك اــProcedure B ؽيش رؼشف ز اــ )Procedure ف اـSpecification .
لاؽظ ا يز ؽفظ اــSpecification اــBody اخبطي ثبــBackage . ف عضئي فظي داخ الأساو
CHAPTER 3
CREATING PACKAGES
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
بخ - اساو -: Backageفيز اىد اخاص باــ ويف يم
. Text Fileيز وزبثخ اىد الا ف (1
ا اـ Loadيز ػ (2 . .Isql*plus Environmentىد از ر وزبثز
ارا وب ف Databaseف اــ Backageارا وب اىد سي يز رخضي اـ Backageـ Compile And Storeيز ػ (3
ره ؼشفخ اــ Show Errorsيعذ ثب اخغبء شؤيخ اخغأ م ثىزبثخ الأش Backageا خغأ سش ا اـ اىد
Compilation Errors .
. Bodyاــ Specificationى اــ Executeيز ػ (4
Backage Specificationئشاء اـ
- Or Replace :ب ؽز زى ػ ا رؼذي ف اــ إخزيبسيخ م ثىزبثزBackage Specification ثذلا ا م
ثإصازب ص ازؼذي فيب .
- Subprogramme : اــProcedure اـFunction ؽيش يز رؼشيف ف اــSpecification يى إسزخذا ثؼذ ره ػ
. Backageعشيك اــ
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
Description Parameters
اخاص باــ ح Package Package_nameؼبش ػ الأع
Declare
Variable, Cursor, Constant , Exception , or Types
Public Type and item
Declaration
اــ Function Subprogram Specification اــ Procedureحؼشيف ولا
زاي :
Commرم ثبزأوذ أ ا ظف عذيذ يز رؼيي ف اششوخ لاثذ أ يى اــ Packageاذف اضبي ازب اشبء -
ف اششوخ . Commاخبص ث ال اوجش
Variableر رؼشيف - 0.10يأخز ليخ إفزشاضيخ G_commثإس
. Numberاؽذ ػ Parameterب Reset_commثإس Procedureأيضب ر رؼشيف -
ر رؼشيف ف اــ publicالأصب اع Reset_commاــ G_commبزب يى اـــ ث - Specificationره لأ
. Package Bodyإشبء اــ -
- Or Replace : إخزيبسيخ م ثىزبثزب ؽز زى ػ ا رؼذي ف اــ Backage Body ص ثذلا ا م ثإصازب
ازؼذي فيب .
- Subprogramme : اــProcedure اـFunction ؽيش يز رؼشيف ف اــSpecification ا لا يز رؼشيف م ب
. Backage Bodyثىزبثخ اىد اخبص ث ف اــ
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
حابغ ازاي اغابك :
ـح Subprogrammeباشاء أ Package Bodyم داخ اــ - ا يخ حؼشيفا وا ف ازاي اغابك . Specification حؼشيفا ف اـ
غظت :
. (Body) فس الأس ف اغضء اضب (Specification)ف اغضء الأي Packageيغت ا يى إس اــ -
. Packageويف يى ئعخذػاء حشغي اــ -
از لب ثإشبؤب . USERػ عشيف فس اسزخذ ا اــ Packageف اضبي اسبثك ر رفيز اــ -
. اظيفخ ا الاعشاء اس ص مغخ ص الا اؾضخ اس ا -
ا Privilageره ػ عشيك ؼ زا اسزخذ اــ SCOTTػ عشيك سزخذ اخش ض Packageف زا اضبي ر رفيز اــ -
. Packageزى إسزخذا ز اــ اظلاؽيخ ابسجخ ى ي
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
. Package Bodyبذ Packageحؼشيف -
زاي :
زا ازاي لا بخؼشيف - ـ Variablesف اــ ـ Package Specificationداخ اـ ز حى ـ Variableباخا اع اـ Global
ـ ض Packageلذ لا باشاء اـ ػ حغخ غابم ـا ا ـ Variablesػت اـ ئفخشاػيت . Variablesز لي ػ حغخ
ـ - باشاء اـ ـ Procedureر م ـ ا حػظ ئىايت ئعخخذا خايت ـ Packageا ـ ا . Procedureداخ
Removing Package
ـ : Packageعزف ا
ـ - اـ ا )سأط Packageػشفا عابما صضئي ا Specification )مغ Body))صغ
- ئصات اضغ ـ Specificationبماء اشأط Bodyزه يى شحبـت باـ يظ ا ػلالت ا خ ره ىائاث ا اضغ بذ Bodyحؼ
ـ ئبخذائيت ا ا لي اخغيشاث اخ ـExceptionsز ــ Cursorsا اذاي فأا لاحؼ حخش خـأ .اا الأصشاءاث
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
غظت :
بـشيمت أحاحيىيت . Bodyيخ عزف اــ Package Specificationػذ عزف اــ
ـ : Packageضايا اعخخذا اـ
ـ (1 Subprogrammeيىه حضيغ بؼغ اـ اعذة . Packageاشحبـت ببؼؼا ف
ئخفاء ىد (2 ـ (Hiding Information)يى ػ خلاي اـ Package ـ ضضء اـ ا . Privateره ف
3) . اداء افؼ
ـ ا (4 اــ ػيت اظيات بأعخخذا عيذ حغ ػيت اظيا . Backageشء غض ا ا
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
ـ -: Overloadingػيت اـ
ز اؼيخ رغت ا يى بن Packageــ داخ فس ا Functionsا Proceduresرزيؼ ز اؼيخ إسزخذا فس الأس ؼذح -
رزيؼ ز Parametersف ػذد اــ Subprogrammeإخزلاف ثي ز اــ ا رشريج ا ااع ثيببر وب سف يز ششؽ
اؼيخ وزبثخ رغيش اجشاظ ثشخ اوضش .
. Packageخبسط اـ Functionsا Proceduresلاؽظ ا ز اؼيخ لايى ا رؾذس ــ -
.يز ازفشيك ازؼشف ػ اـ Packageز اؼيخ رى اجشظ رؼشيف ػذح ثشغيبد خزفخ ثفس الأس داخ فس اــ -
Subprogramme اشاد إسزخذا ثاسغخ الأخزلاف ف ػذد اـParameters ا ع اجيبببد ز اــParameters ا
ج .رشري
: غظ
ف ع اجيببد ز اجيببد فس اؼبئخ ض Parameters ارا وب الأخزلاف فمظ ثي اــ Overloadingلارز ػيخ اــ -
(Number , Decimal ( ب فس ػبئخ اع اشل )Varchar2, char فس ػبئخ اع اؾشف ).
ؽز وب ااع ثيببد اشعع ػبئلاد خزفخ . ره ف اذاي (Return)فمظ ف اميخ اشعؼخ ا يى الأخزلاف -
. Overloadingارا ؽذس بسجك لاؽظبد يؾذس خغبء لايؾذس ػيخ -
ـ : Overloadingزاي ػ اـ
. Package Specificationثزا ى لذ اشأب -
. Overloadingثفس الأس زغجيك اـ Proceureثذاخب اصب Packageشبؤب ف اضبي اسبثك لذ ا -
ا : Proceduersالأخزلاف ثي اـ -
. Parametersالأ رأخز صلاصخ Procedureاـ -
فمظ لاغيش . Parameterاضبيخ رأخز إصب Procedureاـ -
CHAPTER 4
More Package Concepts
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
:وب ي Package Bodyثؼذ ره م ثإشبء اــ -
: اخا زيغخ رفيزب : Package Specificationاسبثك رؼشيف ف اــ Proceduersيجي ويفيخ إسزذػبء رفيز ولا اـ اشى
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
اــ : Overloadingزاي اخش ػ
:غظت
. Overloadingؼظ اذاي اذاخيخ لأساو غجك ثب ف اــ -
وب ف اضبي اسبثك ش ف اضبي اسبثك اسثغ رؼشيفبد خزفخ فس اذاخ ثفس الأسره To_Charػ ره داخ اــ ضبي -
. Standardثإس Packageف
. Varchar2رشعغ Dateاؽذ ػ Parameterالأ ثب -
. Varchar2رشعغ Numberاؽذ ػ Parameterاضبيخ ثب -
. VARCHAR2رشعغ Varchar2اضب DATEالأي ػ Parametersضبضخ ثب إصب ا -
. VARCHAR2رشعغ Varchar2اضب Numberالأي ػ Parametersاشاثؼ ثب إصب -
: غظت
يذح از ػب اسزخذ ره ف اذاي ارا ر ػ داخ اخش ثفس الأس ذاي داخيخ يز إسزجذاي اذاي امذيخ ضغ اذاي اغذ -
. Standard Packageاخبطخ ثبــ
Forward Declartionsئعخخذا اــ
: غظت
فيغت Procedureلذ ر إشبؤب رؼشيفب لج اــ Functionا رى اــ Procedureداخ اــ Functionاــ ػذ إسزخذا -
لج الأسزخذا. Subprogrammeرؼشيف اىبئ ساء زغيش ا
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
لج Procedure ؽيش لب ثإسزخذا اــ Calc_ratingاس Procedureفف اضبي اسبثك لاؽظ ػذ إىبيخ إسزخذا اــ -
غضء لاثذ رؼشيف الا ف ا Procedureفى زى إسزخذا ره اــ Pl\SQLرؼشيف زا لايى إسزخذا ف اــ
وب ف اضبي ازب : Bodyف اغضء اخبص ثبــ Procedureص م ثؼذ ره ثإسزخذا ز اــ Declartionثبـــ اخبص
ف اغضء اخبص ثبـ Procedure (Calc_Rating)ف اضبي اسبثك ر ؼبغخ ره اشىخ ره ػ عشيك رؼشيف -
Declration .
اؽذح ثؾيش يز رؼشيف ف اــ Packageشرجغخ ثجؼضب ف Subprogrammeرغيغ اوضش ز اؼيخ رزيؼ
Specification اخبص ثبــPackage وزبثخ اىد داخ اــBody اىد ا صيبدح اسشيخ ره يفيذ ف إخفبء رفبطي
(security) .
PL/SQL Course
Eng. Mo7amed Reda E-mail:[email protected] Mobil: 01066734381
Mo7amed Reda Abd El-Rahman
FINANCIAL CONSULTANT ORACLE
FINANCIAL R12 ORACLEINSTRUCTOR
DEVELOPER ORACLEINSTRUCTOR
**********************
Scientific Computing Center – Mansoura University
E-mail:[email protected]
https://www.facebook.com/Eng.mohamedreda.scc
01066734381 Mobile: