Sie sind auf Seite 1von 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 SQLS 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;

Das könnte Ihnen auch gefallen