You are on page 1of 9

GOTO STATEMENT

DECLARE

SELLING_PRICE NUMBER(10,2);

BEGIN
SELECT SELL_PRICE INTO SELLING _PRICE FROM PRODUCT_MASTER WHERE
PRODUCT_NO=‘P00001’;

IF SELLING_PRICE < 500 THEN


GOTO ADD_OLD_PRICE;
ELSE
DBMS_OUTPUT.PUT_LINE(‘ CURRENT PRICE OF P00001 IS’ || SELLING_PRICE);
END IF;

<<ADD_OLD_PRICE>
UPDATE PRODUCTMASTER SET SELL_PRICE =500 WHERE PRODUCTNO=‘P00001’;
DBMS_OUTPUT.PUT_LINE(‘THE NEW PRICE OF P00001 IS 500’);
END;
EXAMPLE USING IF:

DECLARE
ACCT_BAL NUMBER(11,2);
ACCT CONSTANT NUMBER(5):=3;
DEBIT_AMT NUMBER(5):=2000;
MIN_BAL CONSTANT NUMBER(7):=1000;

BEGIN
SELECT BAL INTO ACCT_BAL FROM ACCOUTNS WHERE ACOUNT_ID=ACC;

IF ACCT_BAL >=MIN_BAL THEN


UPDATE ACCOUNTS SET BAL=BAL-DEBIT_AMT WHERE ACCOUNTID=ACCT;
END IF;

END;
ERROR HANDLING IN PL/SQL
PRE-DEFINED EXCEPTION HANDLERS:

DECLARE

SMANNO SALESMANMASTER.SALESMANNO%TYPE;
SALESAMT NUMBER(10);
TARGETSALES SALESMANMASTER.SALESMANNO%TYPE;

BEGIN
SMANNO:=&SMANNO;
SELECT SALESAMOUNT INTO SALESAMT FROM SALESMASTER
WHERE SALESMANNO=&SMANNO;
INERT INTO SALESMANPROGRESS VALUES(SMANNO,SYSDATE,SALESAMT);

EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE(‘SALESMAN NO’ || SMANNO|| ‘IS NOT PRESENT IN THE
SALESMASTER TABLE’);
END;
USER DEFINED EXCEPTIONS
DECLARE
LESS_THAN_TARGET EXCEPTION;
SMANNO SALESMANMASTER.SALESMAN_NO%TYPE;
COMM_RATE SALESMANMASTER.SALESMAN_NO%TYPE;

BEGIN
SELECT SALESMANNO,COMMISSIONRATE INTO SMANNO,COMM_RATE FROM
SALESMANMASTER WHERE SALESMANNO=&SMANNO;

IF COMM_RATE< 5000 THEN


RAISE LESS_THEN_TARGET;
ELSE
INSERT INTO COMMISSIONPAYABLE VALUES(SMANNO,SYSDATE,COMM_RATE/100);
END IF;

EXCEPTION
WHEN LESS_TEHN_TARGERT THEN
DBMS_OUTPUT.PUT_LINE(SALESMANNO’||SMANNO|| ‘IS NOT ENTITLED TO GET THE
COMMISSION’);
END;
CURSORS
THE ORACLE ENGINE USES A WORK AREA FOR ITS INTERNAL PROCESSING IN ORDER TO
EXECUTE AN SQL STATEMENT.THIS WORK AREA IS PRIVATE TO SQL’S OPERATIONS AND
IS CALLED CURSOR.

THE DATA THAT IS STORED IN THE CURSOR IS CALLED THE ACTIVE DATA SET.

 IMPLICIT CURSORS
 EXPLICIT CURSORS

BEGIN

UPDATE EMP SET SALARY=SALARY+(SALARY*0.15)


WHERE EMPCODE=&EMPCODE;

IF SQL%FOUND THEN
DBMS_OUTPUT.PUT_LINE(‘EMPLOYEE RECORD MODIFIED SUCCESSFULLY’);
END IF;

IF SQL%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE(‘EMPLOYEE NUMBER:DOES NOT EXIST’);
END IF;

END;
CURSOR,OPEN,FETCH,CLOSE
DECLARE
CURSOR CEMP IS SELECT EMPCODE,SALARY FROM EMPLOYEE WHERE
DEPTNO=20;
ECODE1 EMPLOYEE.EMPCODE%TYPE;
SAL EMPLOYEE.SALARY%TYPE;
BEGIN
OPEN CEMP;
LOOP
FETCH CEMP INTO ECODE1,SAL;
UPDATE EMPLOYEE SET SALARY-SAL+(SL*0.5) WHERE EMPCODE=ECODE1;
INSERT INTO EMP_RAISE VALUES(ECODE1,SYSDATE,SAL*0.05);
END LOOP;
COMMIT;
CLOSE CEMP;
END;
TRIGGERS

DATABASE TRIGGERS ARE PROCEDURES THAT ARE STORED IN THE DATABASE AND
ARE FIRED WHEN THE CONTENTS OF A TABLE ARE CHANGED.

CREATE OR REPLACE TRIGGER TRIGGERNAME BEFORE OR AFTER DELETE OR INSERT


OR UPDATE ON TABLENAME FOR EACH ROW
DECLARE
<VARIABLE DECLARATION>
<CONSTANT DECLARATION>
BEGIN
<PL/SQL> SUBPROGRAM BODY;
EXCEPTION
<EXCEPTION PL/SQL BLOCK>
END;

DROPING OF A TRIGGER:

DROP TRIGGER TRIGGERNAME;


EXAMPLE:
CREATE TRIGGER AUDITTRAIL AFTER UPDATE OR DELETE ON
CLIENT_MASTER FOR EACH ROW
DECLARE
OPERATION VARCHAR2(10);
CLIENNO VARCHAR2(10);
NAME VARCHAR2(10);
BAL_DUE NUMBER(10,2);
BEGIN
IF UPDATING THEN
OPERATION:=‘UPDATE’;
END IF;
IF DELETING THEN
OPERATION:=’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,OPERATION,SYSDATE);
END;
STORED PROCEDURES

CREATE OR REPLACE PROCEDURE PRODEURENAME (ARGUMENT {IN,OUT,INOUT} DATATYPE }


{IS,AS}
VARIABLE DECLARATION;
CONSTANT DECLARATION;
BEGIN
PL/SQL SUBPROGRAM BODY;
EXCEPTION
EXCEPTION PL/SQL BLOCK;
END;

FUNCTIONS
CREATE OR REPLACE FUNCTION FUNCTIONAME (ARGUMENT {IN} RETURN

DATATYPE } {IS,AS}
VARIABLE DECLARATION;
CONSTANT DECLARATION;
BEGIN
PL/SQL SUBPROGRAM BODY;
EXCEPTION
EXCEPTION PL/SQL BLOCK;
END;

You might also like