PL/SQL
1 : PL/SQL BLOCK
2 : CONDITIONAL STRUCTURES
Ø  IF - THEN
Ø  IF - THEN - ELSE
Ø  IF - THEN- ELSIF
3 : USER DEFINED DATA TYPES 
Ø  TABLE TYPE
4 : LOOPIN STRUCTURES
Ø  LOOP - EXIT -
END LOOP 
Ø  LOOP - EXIT WHEN
- END LOOP
Ø  WHILE - LOOP - END LOOP
Ø  FOR - IN - LOOP -
END LOOP
5 : CUSOR
Ø  IMPLICIT CURSOR      
Ø  EXPLICIT CURSOR
Ø  CURSOR FOR LOOP
Ø  PARAMETERIZED
CURSOR
6 : PROCEDURE
7 : FUNCTION
8 : TRIGGER
9 : PACKAGE
10 : RAISE_APPLICATION_ERROR
1 : PL/SQL BLOCK
(1) Example
for BLOCK :
DECLARE
BAL NUMBER(11,2);
NO1 NUMBER(3);
DB_AMT CONSTANT NUMBER(5):=2000;
MIN_BAL CONSTANT NUMBER(5,2):=500;
BEGIN
NO1 := &NO1;
SELECT BAL  INTO BAL FROM ACCOUNTS_SAM WHERE NO=NO1;
BAL:=BAL-DB_AMT;
IF BAL >= MIN_BAL THEN
                        UPDATE ACCOUNTS_SAM SET
BAL=BAL-DB_AMT
                        WHERE NO=ACCOUNTS_SAM.NO;
            END IF;
END;
(2) Example
for BLOCK :
DECLARE
            PI
CONSTANT NUMBER(4,2) :=3.14;
            RADIUS1
NUMBER(10,4);
            AREA1
NUMBER(10,4);
BEGIN
            /*
INITIALISATION OF RADIUS TO 3 */
            RADIUS1
:= 51.22;
            /*
SET A LOOP SO THAT IT FIRES TILL THE RADIUS
VALUE REACHES 7 */
                        WHILE
RADIUS1<=55.22
            LOOP
                        AREA1:=PI
* POWER(RADIUS1,2);
                        INSERT
INTO AREA_SAM
                        VALUES(RADIUS1,AREA1);
                        RADIUS1:=RADIUS1
+1;
            END
LOOP;
END;
(3) Example
for BLOCK :
DECLARE
            TYPE
TE_TABLE IS TABLE OF TE.NO%TYPE INDEX BY BINARY_INTEGER;
S TE_TABLE;
            I
NUMBER;
            P
NUMBER;
BEGIN
            DBMS_OUTPUT.PUT_LINE(S.FIRST);
            DBMS_OUTPUT.PUT_LINE(S.LAST);
            S(-5)
:= 10;                                
            S(-4)
:= 20;
            S(1)
:= 11;
            S(3)
:= 24;
            S(2)
:= 1;
            S(15)
:=60;
            S(9)
:= 22;
            S(10)
:=34;
            I:=S.FIRST;
            P:=I;
            DBMS_OUTPUT.PUT_LINE(S.FIRST);
            DBMS_OUTPUT.PUT_LINE(S.LAST);   
            S.DELETE(3);
            I:=S.NEXT(I);
            DBMS_OUTPUT.PUT_LINE(I);
            I:=S.NEXT(I);
            P:=S.PRIOR(I);
            DBMS_OUTPUT.PUT_LINE(I||'=='||P);
            I:=S.NEXT(I);
            DBMS_OUTPUT.PUT_LINE(I);
            I:=S.NEXT(I);
            DBMS_OUTPUT.PUT_LINE(I);
            I:=S.NEXT(I);
            DBMS_OUTPUT.PUT_LINE(I);
            I:=S.NEXT(I);
            DBMS_OUTPUT.PUT_LINE(I);
            I:=S.NEXT(I);
            DBMS_OUTPUT.PUT_LINE(I);
            I:=S.NEXT(I);
            DBMS_OUTPUT.PUT_LINE(I);
            I:=S.NEXT(I);
            DBMS_OUTPUT.PUT_LINE(I);
            I:=S.NEXT(I);
            DBMS_OUTPUT.PUT_LINE(I);
            IF
S.EXISTS(-3) THEN
                        DBMS_OUTPUT.PUT_LINE(S(-3));
            END
IF;
END;
(4) Example
for BLOCK :
declare
salary emp1.sal%type;
            id emp1.no%type;
begin
     id:=
&id;
     select
sal into salary from emp1 where no = id;
     if salary
>=1000 then
            update emp1 
            set
sal = 1500 where no = id;
    else
            dbms_output.put_line('salary cannot be
updated');
    end
if;                       
end;
(5) Example
for BLOCK :
declare
            cnt
number(3):= 1;
            tot
number(3);
            id
emp1.no%type;
            salary
emp1.sal%type;
begin
select count(*) into tot from emp1;
            while
cnt <= tot
            loop
           select sal,no into salary,id from
emp1
                        where
no like to_char(cnt);
                        if
salary >= 1500  then
                                    update
emp1  
                                                set
sal= sal-(sal * 0.2) where no like id;
elsif salary
>= 1000 then
                       update emp1  
                       set sal= sal-(sal * 0.15) where no
like id;
end if;
cnt:= cnt + 1;
            end
loop;     
end;
(6) Example
for BLOCK :
DECLARE
            cursor
cemp IS select no,sal from emp1
                                    where
depno like '1';
            id     emp1.no%type;
            salary
emp1.sal%type;
BEGIN
            OPEN
cemp;
            IF
cemp%ISOPEN THEN
            LOOP
                 FETCH cemp INTO id,salary;
                 EXIT WHEN cemp%NOTFOUND;
                 update emp1
                 set sal= salary + (salary * 0.05) where no
like id;
              END LOOP;
              COMMIT;
            ELSE
                        dbms_output.put_line('UNABLE
TO OPEN CURSOR');
END IF;
END; 
2 : CONDITIONAL STRUCTURES
1 : IF - THEN
(1) :  Example of IF - THEN :
If var1 > 10 then
            var2
:= var1 + 20;
End if;
(2) :  Example of IF - THEN :
If not(var1 <= 10)  then
                        var2
:= var1 + 20;
End if;
(3) :  Example of NESTED IF - THEN :
if var1 > 10 then
if var2 < var1 then
                        var2
:= var1 + 20;
            end
if;
end if;
Ø  GUIDELINES :
(1) Each if statement is followed by its own then.
There is no semicolon (;) terminator            
on the   line that starts with if.
(2)Each if statement block is terminated by a
matching end if.
2 : IF - THEN - ELSE
(1) :  Example of 
IF - THEN - ELSE :
if var1  >
10 then
            var2
:= var1 + 20;
else      
            var2
:=  var1 + var1;
end if;
(2) :  Example of 
IF - THEN - ELSE :
if mycur%ISOPEN then
            null;
else
open mycur;
end if;
(3) :  Example of 
IF - THEN - ELSE :
if var1 > 10 then
            var2
:= var1 + 20;
else
            if
var1 between 7 and 9 then
                        var2
:= 2 * var1;
            else
                        var2
:= var1 * var1;
            end
if;
end if;
Ø GUIDELINES :
(1)There can be one and only one else with every if
statement. 
(2)There is no semicolon (;)  terminator on the line starting with else.
3 : IF - THEN - ELSIF
(1) :  Example of 
IF - THEN - ELSIF :
if var1 > 10 then
var2 := var1 + 20;
elsif var1 between 7 and 9 then
            var2
:= 2 * var1;
else 
            var2
:= var1 * var1;
end if;
(2) :  Example of 
IF - THEN - ELSIF :
if var1 > 10 then
            var2
:= var1 + 20;
elsif var1 between 7 and 9 then
            var2
:= 2 * var1;
end if;
(3) :  Example of 
IF - THEN - ELSIF :
if location = 'Bombay'
then
            cricket_team_name
= 'Maharashtra';
elsif location = 'Rajkot' then
            cricket_team_name
= 'Gujrat';
elsif location = 'Calcutta' then
            cricket_team_name
= 'West Bengal';
end if;
(4) :  Example of 
IF - THEN - ELSIF :
if cnt  >=
90 then
            null;
else
            insert
into tab1 values('Still in loop',cnt);
end if;
Ø  GUIDELINES :
            (1)
There is no matching end if with each elsif.
3 : USER DEFINED DATA TYPE
1 :TABLE  TYPE
(1)Example of
TABLE type :
set serveroutput on size 100000
DECLARE
state_rec state%rowtype;
type just_names is table of
state.name%type
            index
by binary_integer;
            i
binary_integer := 0;
            nametab
just_names;
BEGIN
            FOR
state_rec IN (SELECT name FROM state)
            LOOP
                        i
:= i+1;
                        nametab(i)
:= state_rec.name;
                        dbms_output.put_line
(nametab (i) );
            END
LOOP;
END ; 
4 :LOOPING STRUCTURES
(1) : LOOP - EXIT - END LOOP
(1) Example
for LOOP - EXIT - END LOOP :
DECLARE 
            CURSOR
c_emp IS SELECT emp_code,salary FROM employee
            WHERE
dept_no = 20;
            str_emp_code
employee.emp_code%type;
            num_salary
employee.salary%type;
BEGIN
            OPEN
c_emp;
            LOOP   
                        FETCH
c_emp INTO str_emp_code,num_salary;
                        IF
c_emp%FOUND THEN
                                    UPDATE
employee SET salary = num_salary + (sum_salary * 0.5)
                                    WHERE emp_code
= str_emp_code;
INSERT INTO
emp_raise VALUES(str_emp_code,sysdate,num_salart *       0.5);
                        ELSE
                                    exit;
END IF;
            END
LOOP;
            COMMIT;
CLOSE c_emp;
END;
(2) : LOOP - EXIT  WHEN -
END LOOP
 (1) : 
Example for LOOP - EXIT WHEN - END LOOP
:
DECLARE 
            CURSOR
scantable IS 
                        SELECT
item_id,qty,desc FROM item_transaction;
            vitemidno
item_transaction.item_id%type;
            vqty
item_transaction.qty%type;
            vdesc
item_transaction.desc%type;
            valexists
number(1);
BEGIN
            LOOP
                        FETCH
scantable INTO vitemidno,vqty,vdesc 
                        EXIT
WHEN scantable%NOTFOUND;
                        valexists
:= f_itemidchk(vitemidno);
                        IF
valexists = 0 THEN
                                    INSERT
INTO item_master(item_id,desc,bal_stock)
                                    VALUES
(vitemidno,vdesc,vqty);
                        ELSIF
valexists = 1 THEN
                                    UPDATE
item_master
                                    SET
bal_stock = bal_stock + vqty;
                                    WHERE
item_id = vitemid;
                        END
IF;
            END
LOOP;
            CLOSE
scantable;
            COMMIT;
END;
(2) Example
for LOOP - EXIT WHEN - END LOOP
DECLARE 
            a
number := 100;
BEGIN
            LOOP
                        a
:= a +25;
                        EXIT
WHEN a = 250;    
            END
LOOP;
            dbms_output.put_line(to_char(a));
END;
(3) : WHILE - LOOP - END LOOP
(1) : Example
for WHILE - LOOP - END LOOP :
DECLARE 
            i
number := 0;
            j
number := 0;
BEGIN
            WHILE
i <= 100
            LOOP
                        j
:= j+1;
                        i
:= i+2;
            END
LOOP;
            dbms_ouput.put_line(to_char(i));
END;
(4) : FOR - IN - LOOP - END LOOP
(1) : Example
for FOR - IN - LOOP - END LOOP :
FOR cnt IN 1 .. 5 
LOOP
            INSERT
INTO tab1 VALUES ('Still in loop',cnt);
END LOOP;
(2) : Example
for FOR - IN - LOOP - END LOOP :
BEGIN 
            FOR
i in 1..10
            LOOP
            dbms_output.put_line(to_char(i));
            END
LOOP;
END;
5 : CURSOR
(1) : IMPLICIT CURSOR
            (1) :  Example for 
SQL%FOUND
BEGIN
            UPDATE
emp SET salary = salary *0.15
                         WHERE emp_code = &emp_code;
            IF
SQL%FOUND THEN
                                    dbms_output.put_line('Employee
Record Modified Succesfully');
            ELSE
                                    dbms_output.put_line('Employee
No. Does not Exist');
            END IF;
END;
(2) :  Example for 
SQL%NOTFOUND
BEGIN
            UPDATE
emp SET salary = salary *0.15
WHERE emp_code = &emp_code;
 IF SQL%NOTFOUND THEN
            dbms_output.put_line('Employee No.Does not
Exist');
ELSE
            dbms_output.put_line('Employee Record Modified
Successfully');
END IF;
END;
(3) - Example
for SQL%ROWCOUNT
DECLARE
     
rows_affected char(4);
BEGIN
            UPDATE
emp SET salary = salary * 0.25
               
                    WHERE emp_code
= '001';
            rows_affected
:= to_char(sql%rowcount);
            IF
SQL%ROWCOUNT > 0  THEN
dbms_output.put_line(rows_affected ||
'Employee Records Modified Successfully');
ELSE
                        dbms_output.put_line('There are
no Employees working as EMP_CODE = 001');
END IF;
END;
(2) : EXPLICIT CURSOR
(1) Example of
Explicit Cursor : 
declare
v_rating number(3);
cursor c1 is select rating from
customers;
begin
open c1;
loop
                        fetch c1 into v_rating;
if v_rating =100
then v_rating :=150;
elsif v_rating =
200 then v_rating :=250;
else v_rating :=
350;  
end if;   
        
dbms_output.put_line(v_rating);
        
exit when c1%notfound;
end loop;
            close c1;
end;
(2) :  Example of cursorname%ISOPEN : 
DECLARE
CURSOR c_emp IS SELECT emp_code,salary
FROM employee
            WHERE
dept_no = 20;
            str_emp_code
employee.emp_code%type;
            num_salary
employee.salary%type;
BEGIN  
OPEN c_emp;
            IF
c_emp %ISOPEN THEN
            LOOP   
                        FETCH
c_emp INTO str_emp_code,num_salary;
                        exit
when c_emp%NOTFOUND;
                        UPDATE
employee SET salary = num_salary + (sum_salary * 0.5)
                        WHERE
emp_code = str_emp_code;
                        INSERT
INTO emp_raise VALUES(str_emp_code,sysdate,num_salart * 0.5);
            END
LOOP;
            COMMIT;
            CLOSE
c_emp;
            ELSE
                        dbms_output.put_line('Unable
to open Cursor');
            END
IF;
END;    
(3) : Example
for cursorname %FOUND :
DECLARE 
CURSOR c_emp IS SELECT emp_code,salary
FROM employee
            WHERE
dept_no = 20;
            str_emp_code
employee.emp_code%type;
            num_salary
employee.salary%type;
BEGIN
OPEN c_emp;
            LOOP   
                        FETCH
c_emp INTO str_emp_code,num_salary;
                        IF
c_emp%FOUND THEN
                                    UPDATE employee SET salary = num_salary +
(sum_salary * 0.5)
                                    WHERE
emp_code = str_emp_code;
INSERT INTO emp_raise
VALUES(str_emp_code,sysdate,num_salart * 0.5);
                        ELSE
                                    exit;
                        END
IF;
            END
LOOP;
            COMMIT;
            CLOSE
c_emp;
END;
(4) : Example
for cursorname %NOTFOUND : 
DECLARE 
            CURSOR
c_emp IS SELECT emp_code,salary FROM employee
            WHERE
dept_no = 20;
            str_emp_code
employee.emp_code%type;
            num_salary
employee.salary%type;
BEGIN
            OPEN
c_emp;
            LOOP   
                        FETCH
c_emp INTO str_emp_code,num_salary;
                        exit
when c_emp%NOTFOUND;
                         UPDATE employee SET salary = num_salary +
(sum_salary * 0.5)
                       WHERE emp_code =
str_emp_code;
                         INSERT INTO emp_raise
VALUES(str_emp_code,sysdate,num_salart * 0.5);
            END
LOOP;
            COMMIT;
            CLOSE
c_emp;
END;
(5) : Example
for cursorname%ROWCOUNT :
DECLARE        
CURSOR c_emp IS 
            SELECT
emp_nm,dept_no,salary from EMP,DEPT_MASTER
            WHERE
dept_master.dept_no = emp.dept_no;
            ORDER
BY salary desc;
            str_ename
emp.emp_nm %type;
            num_dept_no
emp.dept_no%type;
            num_salary
emp.salary%type;
BEGIN
OPEN c_emp;
            dbms_output.Put_line('Name           Department        Salary');
            dbms_output.Put_line('--------            ------------------        ----------');
            LOOP
                        FETCH
c_emp INTO str_ename,num_dept_no,num_salary;
                        exit
when c_emp%ROWCOUNT = 10 or c_emp%NOTFOUND;
dbms_output.Put_line(str_ename|| '   ' || num_dept_no || '  ' ||    
num_salary);
            END
LOOP;
END;
(3) : CURSOR FOR LOOP
(1) Example of
Cursor For Loop :
DECLARE 
            CURSOR
c_emp IS 
            SELECT
emp_code,salary FROM employee WHERE dept_no = 20;
BEGIN
            FOR
emp_rec in c_emp
            LOOP
                        UPDATE
employee       
                                    SET
salary = emp_rec.salary + (emp_rec.salary * 0.5)
                                    WHERE
emp_code = emp_rec.emp_code;
                        INSERT
INTO emp_raise
                                    VALUES(emp_rec.emp_code,sysdate,emp_rec.salary
* 0.5);
            END
LOOP;
            COMMIT;
END;
(2) : Example
of Parameterized Cursor For Loops :
DECLARE
CURSOR c1 (deptno) IS 
                        SELECT
* FROM emp WHERE dept_no = deptno;
BEGIN 
FOR empreco in c1(10)
            LOOP
                        DBMS_OUTPUT.PUT_LINE
(empreco.ename);
            END
LOOP;
END;
(4) :  PARAMETERIZED CURSORS
(1) :  Example of Parameterized Cursors :
DECLARE
CURSOR 
c_item_tran IS 
                        SELECT
itemid,description,quantity FROM item_transaction;
            CURSOR
c_itemchk (mast_itemid number) IS 
                        SELECT
itemid FROM item_master WHERE itemid = mast_itemid;
            itemidno
number(4);
            desc
varchar2(30);
            qty
number(3);
            mast_ins_uptd
number(4);
BEGIN 
OPEN c_item_tran;
            LOOP
                        FETCH
c_item_tran  INTO itemidno,desc,qty;
                        EXIT
WHEN c_item_tran%NOTFOUND;
                        OPEN
c_itemchk(itemidno);
                        FETCH
c_itemchk INTO mast_ins_uptd;
                        IF
c_itemchk%FOUND THEN
                                    UPDATE
item_master
                                                SET
bal_stock = bal_stock - quantity WHERE itemid = itemidno;
            ELSE
                        INSERT
INTO item_master(itemid,description,bal_stock)
                                    VALUES(itemidno,desc,qty);
                        END
IF;
                        CLOSE
c_itemchk;
            END
LOOP;      
            CLOSE
c_item_tran;
            COMMIT;
END;
6 : PROCEDURE
(1)              
: Example 1 :
Ø Creating Procedure for use :
CREATE OR REPLACE PROCEDURE proc_update(vproduct_no
IN char,
            vsorder_no
IN char,qty IN number) IS 
total_qty_ordered number(8);
total_qty_disp number(8);
BEGIN
            UPDATE
product_master
                        SET
qty_on_hand = qty_on_hand - qty;
                        WHERE
product_no = vproductno;
            SELECT
sum(qty_ordered),sum(qty_disp)
                        INTO
total_qty_ordered,total_qty_disp
                        FROM
sales_order_details
                        WHERE
detl_order_no = vsorder_no;
            IF
total_qty_ordered = total_qty_disp THEN
                        UPDATE
sales_order
                        SET
order_status = 'Fulfilled'
                        WHERE
order_no = vsorder_no;
            ELSIF
total_qty_disp = 0 THEN
                        UPDATE
sales_order
                        SET
order_status = 'Backorder'
                        WHERE
order_no = vsorder_no; 
            ELSE
   
                        UPDATE
sales_order
                        SET
order_status = 'In Process'
                        WHERE
order_no = vsorder_no;             
            END
IF;
END;
Ø Calling the Procedure in a PL/SQL code block :
DECLARE 
            CURSOR
c_mast_check IS 
                        SELECT
challan_no,order_no from challan_header;
            vproduct_no
varchar2(6);
            vsorder_no
varchar2(6);
            vmast_challan
varchar2(6);
            vdetl_challan
varchar2(6);
            qty
number(3);
BEGIN
            vproduct_no
:= '&vproduct_no';
            qty
:= '&qty';
            vdetl_challan
:= '&vdetl_challan';
            OPEN
c_mast_check;
            LOOP
                        FETCH
c_mast_check INTO vmast_challan,vsorder_no;
                        EXIT
WHEN c_mast_check %NOTFOUND;
                        IF
vdetl_challan = vmast_challan_details THEN
                                    INSERT
INTO challan_details
                                                VALUES(vdetl_challan,vproduct_no,qty);
                        proc_update(vproduct_no,vsorder_no,qty);
                                    EXIT;
                        END
IF;
            END
LOOP;
            IF
c_mast_check %NOTFOUND THEN
                        DBMS_OUTPUT.PUT_LINE('The
given challan_no does not 
                                    have
a master record');
            END
IF;
            CLOSE
c_mast_check;
            COMMIT;
END;
Ø Deleting a Stored  Procedure
: 
DROP PROCEDURE proc_update;
7 :FUNCTION
(1)              
Example 1 : 
Ø Creating Function for use :
CREATE FUNCTION f_itemidchk(vitemidno IN number)
RETURN number IS 
dummyitem number(4);
BEGIN
            SELECT
item_id INTO dummyitem FROM item_master
                        WHERE
item_id = vitemidno;
            RETURN
1;
EXCEPTION
            WHEN
NO_DATA_FOUND THEN
                        RETURN
0;
END;
Ø Calling the Function f_itemidchk in a PL/SQL code block:
DECLARE 
            CURSOR
scantable IS 
                        SELECT
item_id,qty,desc FROM item_transaction;
            vitemidno
item_transaction.item_id%type;
            vqty
item_transaction.qty%type;
            vdesc
item_transaction.desc%type;
            valexists
number(1);
BEGIN
            LOOP
                        FETCH
scantable INTO vitemidno,vqty,vdesc 
                        EXIT
WHEN scantable%NOTFOUND;
                        valexists
:= f_itemidchk(vitemidno);
                        IF
valexists = 0 THEN
                                    INSERT
INTO item_master(item_id,desc,bal_stock)
                                    VALUES
(vitemidno,vdesc,vqty);
                        ELSIF
valexists = 1 THEN
                                    UPDATE
item_master
                                    SET
bal_stock = bal_stock + vqty;
                                    WHERE
item_id = vitemid;
                        END
IF;
            END
LOOP;
            CLOSE
scantable;
            COMMIT;
END;
Ø Deleting a Stored Functions :
DROP FUNCTION f_itemidchk;
8 : TRIGGER
(1) - Example
: 1 
Ø Create  a  Trigger :
CREATE TRIGGER audit_trail 
            AFTER
UPDATE OR DELETE ON client_master
            FOR
EACH ROW
DECLARE
            oper
varchar2(8);
            client_no
varchar2(6);
            name
varchar2(20);
            bal_due
number(10,2);
BEGIN
            IF
updating THEN
                        oper
:= 'update';
            END
IF;
            IF
deleting THEN
                        oper
:= 'delete';
            END
IF;
            client_no
:= :old.client_no;
            name
:= :old.name;
            bal_due
:= :old.bal.due;
            INSERT
INTO auditclient
                        VALUES(client_no,name,bal_due,oper,user,sysdate);
END;
(2) - Example
: 2 
create or replace trigger ins_trigger
after insert on stud1 for each row
declare
begin 
insert into stud1(total,per)
values((:new.s1 + :new.s2 + :new.s3      
+ :new.s4 + :new.s5), :new.total / 5);
commit;
end;
(3) - Example
: 3  
Ø USE OF INSERTING / UPDATING / DELETING IN A TRIGGER :
CREATE OR REPLACE TRIGGER trigl_1 
            AFTER
INSERT or UPDATE or DELETE ON emp
BEGIN 
IF inserting THEN
                        DBMS_OUTPUT.PUT_LINE
(" One row is INSERTED ! ");
            ELSIF
updating THEN
                        DBMS_OUTPUT.PUT_LINE
(" One row is UPDATED ! ");
            ELSIF
deleting THEN
                        DBMS_OUTPUT.PUT_LINE
(" One row is DELETED ! ");
            END
IF;
END;
(4) - Example
: 4 
Ø  You
have two tables with the Same Structure . If you DELETE a Record from one
Table(Emp), It will be INSERT into Second Table(Backup)
CREATE OR REPLACE TRIGGER backup
            AFTER
delete ON emp 
            FOR
EACH ROW
BEGIN
            INSERT
INTO emp VALUES(:old.ecode,:old.ename,:old.job,:old.salary);
END;
(5) - Example
: 5 
Ø 
Write a TRIGGER - capital for Table -
EMP  on ename field , such  that 
if you entered ename into            LOWER
case , it will convert into CAPITAL CASE and then stored it into the table.
CREATE OR REPLACE TRIGGER capital 
            BEFORE
INSERT ON emp 
            FOR
EACH ROW
BEGIN
            :new.ename
= UPPER(:new.ename);
END:
(6) - Example
: 6 
Ø  Write
a TRIGGER - cons_pk on  Table - emp that
do not allow any DUPLICATE or NULL VALUES in 
field - empno. 
OR
Ø  CREATE
A TRIGGER cons_pk THAT WORKS AS A PRIMARY KEY
CREATE OR REPLACE TRIGGER cons_pri 
BEFORE INSERT ON emp 
FOR EACH ROW
DECLARE
CURSOR c1  IS SELECT 
* FROM emp;
            reco  emp%rowtype;
BEGIN
            OPEN
c1;
            LOOP
                        FETCH  c1 INTO reco;
                        IF
:new.empno = reco.empno THEN
                                    DBMS_OUTPUT.PUT_LINE
("Your no. is DUPLICATE !!!! " );
                        ELSIF
:new.empno IS NULL THEN
                                    DBMS_OUTPUT.PUT_LINE
("Your no. is NULL !!! " );
            END
IF;
                        EXIT
WHEN c1%NOTFOUND;
            END
LOOP;
END;
Ø Dropping a Trigger :
                        DROP
TRIGGER audit_trail;
9 : PACKAGE
(1)              
Example of Package 1 :
Ø  Package Specification :
CREATE OR REPLACE PACKAGE area_pack IS
FUNCTION area (r number) RETURN number;
FUNCTION pack (r number, h number) RETURN number;
END;
Ø  Packager Body :
CREATE OR REPLACE PACKAGE BODY area_pack IS
--creating body of funtion : area
FUNCTION area(r number) RETURN number IS
            BEGIN
                        RETURN  (3.14 * r 
* r);
            END;
--creating body of funtion : pack
            FUNCTION
pack (r number,h number) RETURN number IS 
            BEGIN
                        RETURN
(3.14 * r * r * h);
            END;
Ø  USE OF PACKAGE area_pack IN PL/SQL BLOCK :
DECLARE
            a
number;
            v
number;
BEGIN
            a
:= area_pack.area (10);
            v
:= area_pack.pack(10,4);
            dbms_output.put_line(a);
            dbms_output.put_line(v);
END;
10 : RAISE APPLICATION_ERROR
(1) Example :
1
CREATE or REPLACE TRIGGER trig_1 
            BEFORE
INSERT ON item 
            FOR
EACH ROW 
DECLARE
            item_id  Item.itemid%type;
BEGIN
            SELECT
itemid INTO item_id FROM  item WHERE qty
= 4543;
            IF
Item_id = 1000 THEN
                        RAISE_APPLICATION_ERROR
(-200001.,"ENTER SOME OTHER NUMBER !");
            END
IF;
END;
(2)              
Example : 1
Ø  To
strict in salary field by Trigger(trig_valid), means WHEN you ENTER / INSERT
greater than 5000, then this trigger should be executed :
CREATE OR REPLACE TRIGGER trig_valid
            CHECK
BEFORE
            INSERT
ON emp 
            FOR
EACH ROW WHEN (:new.salary >5000)
BEGIN  
            RAISE_APPLICATION_ERROR(-2000,"Your
salary is greater than 5000");
END:
(3) Example :
1
Ø  Write
a trigger that do not allow any updation / changes on Table - emp on SATURDAY /
SUNDAY.
CREATE OR REPLACE TRIGGER change 
            BEFORE  ON emp
            FOR
EACH ROW 
            WHEN
(to_char(Sysdate,"dy") IN ("SAT","SUN"))
BEGIN
            RAISE_APPLICATION_ERROR(-20001."You
are not enter a data in SAT or SUN !!! ");
END;
Question
Bank – Oracle
1.     Explain various field types
in Oracle.
2.     Write down E.F. Codd’s 12
rules for RDBMS.
3.     Explain DDL, DML & DCL
statement with example.
4.     Justify Oracle as RDBMS.
5.     Distinguish the followings.
1.     SQL - SQL*Plus                 5. Having – Group By
2.     DMBS – RDBMS               6.
Group By – Order By
3.     Char – Varchar                            7. Primary Key –
Foreign Key
4.     DML – DDL                       8. 
6.     What is constraint? Explain
various constraints in detail.
7.     Explain following operators
with example.
a.     Between               d. In
b.     Like                      e. Any
c.      Exists                             f. All
8.     Write a short note on ALTER
TABLE command.
9.     Explain following functions.
a.     to_date( )              f. substr( )            k. avg( )
b.     date_diff( )           g. instr( )              l. rpad( )
c.      decode( )               h. next_day( )       m. ceil( )
d.     round( )                i. greatest( )          n. count(*)
e.      nvl( )                    j. to_char( )          o. months_between( )
10.                       
 Explain self-join with example.
11.                       
 What is join? Explain various
types of joins with example.
12.                       
 Discuss view & it’s
different types in Oracle.
13.                       
 Explain CREATE SEQUENCE
statement with various clause.
14.                       
 Explain INDEX syntax with
example.
15.                       
 Write a note on GRANT and REVOKE
with example.
16.                       
 What is transaction? Explain the
use of Rollback, Commit and  Savepoint.
17.                       
 What is Cluster? Also Explain
Snapshot in brief.
18.                       
 Write a short note on Synonyms.
19.                       
 Discuss PL/SQL block structure.
20.                       
 What is Cursor? Explain explicit
& implicit cursor.
21.                       
 Explain Memory Structure of
Oracle in detail.
22.                       
 List Database Processes in
Oracle & explain any five.
23.                       
 Explain Redo Log files &
Control files.
24.                       
 What is Trigger? Explain
different types of it.
25.                       
 Explain Exception Handling in
detail.
26.                       
 Explain Tablespace & related
commands.
27.                       
 Short note: Import, Export &
SQL*Loader
28.                       
 What is Backup? Explain various
types of Backup.
29.                       
 Write a short note on Net 8 and
it’s features.
30.                       
 Give the difference between
followings.
1.     SQL – PL/SQL                       5. %NOTFOUND – NO_DATA_FOUND
2.     Procedure – Function            
6. Implicit – Explicit Cursor
3.     Nested Table – Varray    7. 
4.     %TYPE - %ROWTYPE 8.  
PRACTICAL EXERCISE
1.     Various Queries based on
Create, Select, Update, Insert using
Group by, having, where, in, exists clause
And also use 
of built in functions.
2.     Create a package that
consist of one function and one procedure to check stud roll_no & to add
record in the table.
3.     Create the after update row
level trigger to display the old value as well as new value from the table.
4.     Write a PL/SQL block which
update employee’s salary by 0.5 of salary whose id is given at run time. And
display message if salary is update otherwise display appropriate message.
(Using implicit cursor)
5.     Write a function which
returns yes or no if substing is found within the string.
6.     Write a procedure which
returns total salary paid by specified department.
7.     Write a trigger which stores
modified and deleted records of emp table within emp_backup table.
8.     Write a PL/SQL block which
display user defined error message when duplicate data is entered within id
field through the block.
9.     Write a PL/SQL block which
display employee’s detail of specified department. (Using explicit cursor)
0 comments:
Post a Comment