1 / 26

PL/SQL

PL/SQL. PL/SQL CURSORS. Oracle creates a memory area, called context area , for processing SQL statement, Contains all information needed for processing the SQL statement . A cursor is a pointer to this context area . PL/SQL controls the context area through a cursor.

israel
Télécharger la présentation

PL/SQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. PL/SQL

  2. PL/SQL CURSORS • Oracle creates a memory area, called context area, for processing SQL statement, • Contains all information needed for processing the SQL statement. • A cursor is a pointer to this context area. • PL/SQL controls the context area through a cursor. • A cursor holds the rows returned by a SQL statement. • Cursors allow to fetch and process rows returned by a SELECT statement.

  3. PL/SQL CURSORS • There are two types of cursors: • Implicit cursors • Explicit cursors • Implicit Cursors • Implicit cursors are automatically created by Oracle whenever an SQL statement is executed • Whenever a DML statement (INSERT, UPDATE and DELETE) is issued, an implicit cursor is associated with this statement • For INSERT operations, the cursor holds the data that needs to be inserted. • For UPDATE and DELETE operations, the cursor identifies the rows that would be affected.

  4. PL/SQL CURSORS • Attributes • %FOUND Returns TRUE if an INSERT, UPDATE, or DELETE statement affected one or more rows Otherwise, it returns FALSE. • %NOTFOUND The logical opposite of %FOUND. It returns TRUE if an INSERT, UPDATE, or DELETE statement affected no rows, Otherwise, it returns FALSE. • %ISOPEN Always returns FALSE for implicit cursors, because Oracle closes the SQL cursor automatically after executing its associated SQL statement. • %ROWCOUNT Returns the number of rows affected by an INSERT, UPDATE, or DELETE statement, or returned by a SELECT INTO statement.

  5. PL/SQL CURSORS • Table s(slno,name) • declare • total_rowsint; • begin • update s set slno= slno+1; • if sql%notfoundthen • dbms_output.put_line('table not found'); • elsifsql%found then • total_rows:=sql%rowcount; • dbms_output.put_line(total_rows||' rows changed in s'); • end if; • end; • Output • 2 rows changed in s

  6. PL/SQL CURSORS • Explicit Cursors • Explicit cursors are programmer defined cursors for gaining more control over the context area. • An explicit cursor should be defined in the declaration section of the PL/SQL Block. • It is created on a SELECT Statement which returns more than one row.

  7. PL/SQL CURSORS • The syntax for creating an explicit cursor is • CURSOR cursor_name IS select_statement; • Explicit cursor involves four steps: • Declaring the cursor • Opening the cursor • Fetching the cursor for retrieving data • Closing the cursor

  8. PL/SQL CURSORS • Declaring the Cursor • Declaring the cursor defines the cursor with a name and the associated SELECT statement. • For example: • CURSOR c_customers IS SELECT id, name, address FROM customers; • Opening the Cursor • Opening the cursor allocates memory for the cursor and makes it ready for fetching the rows returned by the SQL statement into it. For example, • OPEN c_customers;

  9. PL/SQL CURSORS • Fetching the Cursor • Fetching the cursor involves accessing one row at a time. • For example • FETCH c_customers INTO c_id, c_name, c_addr; • Closing the Cursor • Closing the cursor means releasing the allocated memory. • CLOSE c_customers;

  10. PL/SQL CURSORS • declare Table S • s1 s.slno%type; • s2 s.name%type; • cursor ss is select * from s; • begin • open ss; • loop • fetch ss into s1,s2; • exit when ss%notfound; • dbms_output.put_line(s1||' '||s2); • end loop; • close ss; • end; • Output • 1 aji • 2 saji

  11. PL/SQL CURSORS • declare • srows%rowtype; • a int:=&a; • cursor ss is select * from s where slno=a; • begin • open ss; • loop • fetch ss into srow.slno,srow.name; • exit when ss%notfound; • dbms_output.put_line(srow.slno||' '||srow.name); • end loop; • close ss; • end; Output Enter the value of a 2 2 saji

  12. PL/SQL CURSORS • Table s(slno,name) & s1(slno,mark) • Enter rollno print slno and name • Insert slno and mark in the table s1 • declare • srows%rowtype; • roll int:=&roll; • mark int; • cursor ss is select * from s where slno=roll; • begin • open ss; • loop • fetch ss into srow.slno,srow.name; • exit when ss%notfound; • dbms_output.put_line(srow.slno||' '||srow.name); • mark:=&mark; • insert into s1 values(srow.slno,mark); • end loop; • close ss; • end;

  13. PL/SQL CURSORS • Table nos(slno,name) even(slno,name) odd(slno,name) • Read each records from nos, if slno is even then insert the record in even table • Other wise insert the record in odd table • declare • rows nos%rowtype; • cursor c is select * from nos; • begin • open c; • loop • fetch c into rows.slno,rows.name; • exit when c%notfound; • if rows.slno mod 2=0 then • insert into even values(rows.slno,rows.name); • else • insert into odd values(rows.slno,rows.name); • end if; • end loop; • close c; • end;

  14. PL/SQL Trigger • Oracle allows to define procedures that are implicitly executed when an INSERT, UPDATE, or DELETE statement is issued against a table. • These procedures are called database triggers. • Triggers are stored in the database separately from their associated tables.

  15. PL/SQL Trigger • Triggers are stored programs, which are automatically executed when some events occur. • Triggers are, written to be executed in response to any of the following events: • A DML statement (DELETE, INSERT, or UPDATE). • A DDL statement (CREATE, ALTER, or DROP). • A database operation (SERVERERROR, LOGON, LOGOFF, STARTUP, or SHUTDOWN).

  16. PL/SQL Trigger • Syntax for creating a trigger: • CREATE [OR REPLACE ] TRIGGER trigger_name • {BEFORE | AFTER | INSTEAD OF } • {INSERT [OR] | UPDATE [OR] | DELETE} • [OF col_name] ON table_name • [REFERENCING OLD AS o NEW AS n] • [FOR EACH ROW] • WHEN (condition) • DECLARE • Declaration-statements • BEGIN • Executable-statements • END;

  17. PL/SQL Trigger • CREATE [OR REPLACE] TRIGGER trigger_name: Creates or replaces an existing trigger with the trigger_name. • {BEFORE | AFTER | INSTEAD OF}: This specifies when the trigger would be executed. • {INSERT [OR] | UPDATE [OR] | DELETE}: This specifies the DML operation. • [OF col_name]: This specifies the column name that would be updated. • [ON table_name]: This specifies the name of the table associated with the trigger.

  18. PL/SQL Trigger • [REFERENCING OLD AS o NEW AS n]: This allows to refer new and old values for various DML statements, like INSERT, UPDATE, and DELETE. • [FOR EACH ROW]: This specifies a row level trigger, i.e., the trigger would be executed for each row being affected. • Otherwise the trigger will execute just once when the SQL statement is executed, which is called a table level trigger. • WHEN (condition): This provides a condition for rows for which the trigger would fire. • This clause is valid only for row level triggers.

  19. PL/SQL Trigger • Three parts: • Event (activates the trigger) • Condition (tests whether the triggers should run) [Optional] • Action (what happens if the trigger runs) • Events could be : BEFORE|AFTER INSERT|UPDATE|DELETE ON <tableName> e.g.: BEFORE INSERT ON Professor • Condition is SQL expression or an SQL query • Action can be many different choices : • SQL statements ,and even DDL , and “commit”…

  20. PL/SQL Trigger • Table emp(empid,empname,dept,salary) • high_salary(empid,empname) • When insert data in emp table, salary >5000 then insert empid & empname into high_salary table • create or replace trigger t1 before insert or update of salary on emp • for each row • begin • if :new.salary >5000 then • insert into high_salary values(:new.empid,:new.empname); • end if; • end;

  21. PL/SQL Trigger • Table emp(empid,empname,dept,salary) • high_salary(empid,empname) • When delete row from emp, it display the row details • create or replace trigger t2 after delete on emp for each row • Begin • dbms_output.put_line(:old.empname||' deleted'); • end;

  22. PL/SQL Trigger & procedure • Table emp(empid,empname,dept,salary) • high_salary(empid,empname) • Deleted row will be insert into high_salary, using a procedure • create or replace procedure display(roll in int,name in varchar2) as • begin • dbms_output.put_line(roll||' details deleted'); • insert into high_salary values (roll,name); • end; • create or replace trigger tt after delete on emp for each row • begin • display(:old.empid,:old.empname); • end;

  23. PL/SQL Trigger (OLD & NEW) • Table emp(empid,empname,dept,salary) • When insert or update display salary difference • create or replace trigger tri before insert or update on emp • for each row • when (new.empid >0) • declare • diff number(10,2); • Begin • diff:=:new.salary-:old.salary; • dbms_output.put_line('OLD SALARY ' ||:old.salary); • dbms_output.put_line('NEW SALARY ' ||:new.salary); • dbms_output.put_line('SALARY DIFFERENCE ' || diff); • end;

  24. PL/SQL Trigger (OLD & NEW) • When insert new row, then there is no old value • SQL> insert into emp values(100,'popo','mca',22); • OLD SALARY • NEW SALARY 22 • SALARY DIFFERENCE • When update then there is old & new value • SQL> update emp set salary=salary+500 where empid=100; • OLD SALARY 22 • NEW SALARY 522 • SALARY DIFFERENCE 500

  25. PL/SQL Trigger

  26. PL/SQL Trigger

More Related