27
Oracle PL/SQL Eyad Husni Elshami

Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

  • View
    223

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

Oracle PL/SQL

Eyad Husni Elshami

Page 2: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

Why PL/SQL• Block Structures:

– PL/SQL consists of blocks of code, which can be nested within each other. Each block forms a unit of a task or a logical module. PL/SQL Blocks can be stored in the database and reused.

• Procedural Language Capability: – PL/SQL consists of procedural language constructs such as conditional

statements (if else statements) and loops like (FOR loops).•  Better Performance:

– PL/SQL engine processes multiple SQL statements simultaneously as a single block, thereby reducing network traffic.

• Error Handling: – PL/SQL handles errors or exceptions effectively during the execution

of a PL/SQL program. Once an exception is caught, specific actions can be taken depending upon the type of the exception or it can be displayed to the user with a message.

Page 3: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

Basic Structure of PL/SQL

DECLARE /* Declarative section: variables, types, and local subprograms. It is an

optional section*/ BEGIN /* Executable section: procedural and SQL statements go here. */ /* This is the only section of the block that is required. It is an

mandatorysection */

EXCEPTION /* Exception handling section: error handling statements go here. It is an

optional section */

END;

Page 4: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Variables and Types

• Information is transmitted between a PL/SQL program and the database through variables. Every variable has a specific type associated with it. That type can be one of the types used by SQL for database columns.– A generic type used in PL/SQL such as NUMBER,

CHAR, DATE, …etc – Declared to be the same as the type of some

database column

Page 5: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Variables and Types

Declar Std_id number(2);Std_name Students.sname%TYPE;Std_record Students%ROWTYPE;

Beginselect sid into std_id from students where sname=‘ALI’;select sname into std_name from students where sid=12345;select * into std_record from students where sid=12345;

End

Page 6: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Control Structures

• Conditional statement:– IF Statement

• Iterative Statements:– Simple Loop– While Loop– For Loop

Page 7: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Conditional statementIF  condition THEN 

Statements 

ELSIF condition THEN 

Statements 

ELSE 

Statements 

END IF; 

Declareday char(3):= to_char(sysdate,'DY');BeginIf day = 'FRI' thenDBMS_OUTPUT.PUT_LINE('Week

end');Elsif day = 'SAT' then DBMS_OUTPUT.PUT_LINE('New

work week');Else DBMS_OUTPUT.PUT_LINE('have a

nice day');End if;End;/

Page 8: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Iterative Statements

Simple loop syntax: LOOP

<loop_body> ;EXIT; /* EXIT WHEN condition;*/

END LOOP;

DECLARE i NUMBER := 1;

BEGIN LOOP

INSERT INTO T1 VALUES(i,i); i := i+1; EXIT WHEN i>100;

END LOOP;

END;

Page 9: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Iterative Statements

While loop syntax: WHILE condition LOOP

< loop_body> ; END LOOP;

DECLARE i NUMBER := 1;

BEGIN WHILE i<100 LOOP

INSERT INTO T1 VALUES(i,i);

i := i+1;

END LOOP;

END;

Page 10: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Iterative Statements

For loop syntax: FOR counter IN val1..val2

LOOP < loop_body> ;

END LOOP;

DECLARE i NUMBER := 1;

BEGIN FOR i IN 1..100 LOOP

INSERT INTO T1 VALUES(i,i);

END LOOP;

END;

Page 11: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Cursors

• What are Cursors? – A cursor is a temporary work area created in the

system memory when a SQL statement is executed. – A cursor contains information on a select statement 

and the rows of data accessed by it. This temporary work area is used to store the data retrieved from the database, and manipulate this data.

– A cursor can hold more than one row, but can process only one row at a time. The set of rows the cursor holds is called the active set.

Page 12: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Implicit Cursors:• When you execute DML statements or SELECT

statements, implicit cursors are created to process these statements, there are attributes for each cursor:– %FOUND:

• Return TRUE value if DML statement affect at least one row or the select statement return at least on (example SQL%FOUND)

– %NOTFOUND: • Return FLASE value if DML statement affect at least one row or the

select statement return at least on (example SQL%NOTFOUND)– %ROWCOUNT:

• Return the number of rows affected by the DML/SELECT statement (example SQL%ROWCOUNT)

– %ISOPEN: • Return TRUE value if the cursor is already open in the program.

Page 13: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Implicit Cursors:DECLARE

rows_count number(5);BEGIN

UPDATE students SET saverage= 40where saverage is null ; IF SQL%NOTFOUND THEN

dbms_output.put_line('None of the averages where updated'); ELSIF SQL%FOUND THEN

rows_count := SQL%ROWCOUNT; dbms_output.put_line(‘Averages for ' || rows_count|| ‘ students are

updated'); END IF;

END;

Page 14: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Explicit Cursors• An explicit cursor is defined in the declaration

section of the PL/SQL Block. It is created on a SELECT Statement which returns more than one row .

• There are four steps in using an Explicit Cursor. – DECLARE the cursor in the declaration section.– OPEN the cursor in the Execution Section.– FETCH the data from cursor into PL/SQL variables or

records in the Execution Section.– CLOSE the cursor in the Execution Section before you

end the PL/SQL Block.

Page 15: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Explicit CursorsDECLARE

CURSOR std_cur IS SELECT sid, sname, saverage FROM students; std_rec std_cur%rowtype;

BEGIN IF NOT std_cur%ISOPEN THEN

OPEN std_cur; END IF; LOOP

FETCH std_cur INTO std_rec; EXIT WHEN std_cur%NOTFOUND; dbms_output.put_line(std_rec.sid || ' ' ||std_rec.sname || ' ' ||

std_rec.saverage+5); END LOOP;

END;

Page 16: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Procedures

• A stored procedure or in simple a procedure is a named PL/SQL block which performs one or more specific task.

• This is similar to a procedure in other programming languages.

• A procedure is similar to an anonymous PL/SQL Block but it is named for repeated usage.

• We can pass parameters to procedures in three ways: 1) IN-parameters2) OUT-parameters3) IN OUT-parameters

Page 17: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Procedures

CREATE OR REPLACE PROCEDURE update_name IS BEGIN

UPDATE students SET sname = UPPER(sname);

UPDATE collgeSET cname = UPPER(cname);

COMMIT;

END;

Page 18: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Procedures

CREATE OR REPLACE PROCEDURE upadet_average (push_value IN NUMBER) IS

BEGINUPDATE students SET saverage = saverage +push_valueWHERE saverage BETWEEN 55 and 59;

COMMIT;

END;

Page 19: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Procedures

CREATE OR REPLACE PROCEDURE student_details IS CURSOR std_cur IS SELECT sname, cid, saverage FROM students;std_rec std_cur%rowtype;

BEGINFOR std_rec in std_cur LOOP

dbms_output.put_line(std_cur.sname || ' ' ||std_cur.cid|| ' ' ||std_cur.saverage);

END LOOP;

END;

Page 20: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Procedures

Execute procedurename;

Page 21: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Functions

• A function is a named PL/SQL Block which is similar to a procedure. The major difference between a procedure and a function is, a function must always return a value, but a procedure may or may not return a value.

Page 22: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL FunctionsCREATE OR REPLACE FUNCTION need_to_pass  (std_id  IN NUMBER) RETURN NUMBERIS

point NUMBER;BEGIN

SELECT SAVERAGE INTO pointFROM students

                WHERE sid = std_id;

                  IF  (point<60) THENRETURN (60-point);

ELSERETURN 0;

END IF;END;

Page 23: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Functions

• Execution for function like:1. Since a function returns a value we can assign it

to a variable.X := need_to_pass(12345);

2. As a part of a SELECT statementSELECT sname,saverage, need_to_pass(sid)FROM STUDENTS;

3. In a PL/SQL Statements like,dbms_output.put_line(need_to_pass(sid));

Page 24: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Triggers• A trigger is a pl/sql block structure which is fired when

a DML statements like Insert, Delete, Update is executed on a database table.

CREATE OR REPLACE TRIGGER trigger_name {BEFORE | AFTER | INSTEAD OF } {INSERT | UPDATE | DELETE} [OF col_name] ON table_name [REFERENCING OLD AS o NEW AS n] [FOR EACH ROW] WHEN (condition) BEGIN --- sql statements END;

Page 25: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Triggers

CREATE or REPLACE TRIGGER saverage_historyBEFORE UPDATE OF saverage ON stdudents FOR EACH ROW /* WHEN :new.saverage>90*/BEGIN INSERT INTO archive_average VALUES

(:old.sid, :old.saverage, :new.saverage, sysdate, user);

END;

Page 26: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

PL/SQL Exception Handling

We’ll study it later

Page 27: Oracle PL/SQL Eyad Husni Elshami. Why PL/SQL Block Structures: – PL/SQL consists of blocks of code, which can be nested within each other. Each block

create function grade(stdid in number) return charis

savg stduents.saverage%type;Begin

select saverage into asvg from stduentswhere sid= stdid;

if savg>=65 thenreturn 'A‘;

Else Return ‘B’;

End if;End;