ORACLE FINANCIAL CONSULTANT ACCOUNTANT UNDER …

67
PL/SQL Course Eng. Mo7amed Reda E-mail :[email protected] Mobil : 01066734381 Mo7amed Reda Abd El-Rahman FINANCIAL CONSULTANT ORACLE APPLICATIONS ENVIRONMENT ORACLE ACCOUNTANT UNDER FINANCIAL R12 ORACLE INSTRUCTOR DEVELOPER ORACLE INSTRUCTOR Scientific Computing Center Mansoura University Mobile : 01066734381 حخغشن غكي ا بمغاـك ا ي م يبذع ااذ ػا اصؼ يذا اؼا في ا و خفغ ب ي ػ يخضذ غ فؼشبي اص ا يز خ ا عخار ا ويؼا يبذػا سائؼا ػشاش ي ا

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

Fundamental (I)

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

PLSQL

Program Units

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: