ADVANCED FEATURES Of PL/SQL
* PROCEDURAL LANGUAGE FEATURE * OBJECT ORIENTED FEATURES * EXCEPTION HANDLING * INCREASED SECUTIRY * PACKAGES
PROGRAMMING FEATURES * PROCEDURES and FUNCTIONS * BLOCK FEATURES * DEBUGGING IS FRUSTRATION * REUSABILITY * INBUILT PACKAGES
PROCEDURES AND FUNCTIONS
BLOCK FEATURES
DEBUGGING - Suspending Execution breakpoint: unconditional and conditional - Stepping through the code STEP IN, STEP OVER, STEP OUT, RUN TO CURSOR - Monitoring values WATCH window - Monitoring Execution Flow CALL STACK window This is done using Sql Program Debugger Window, one of the modules of PL/SQL and needs installation
REUSABILITY BEST EXAMPLES ARE INBUILT PACKAGES
USER FRIENDLY - Search keys in PL/SQL codes - Print to the screen - Read or Write from PL/SQL - Use SQL from PL/SQL - Execute Operating System Commands
INBUILT PACKAGES e.g Banking Package package banking is procedure new_acct(name IN VARCHAR); procedure acct_dep(acno IN NUMBER, amount IN NUMBER); procedure acc_wdr(acno IN NUMBER, amount IN NUMBER); procedure acc_bal(acno IN NUMBER, bal OUT NUMBER); function acc_drwn(acno IN NUMBER) RETURN BOOLEAN; end banking ;
OBJECT ORIENTED * Data Centric * Encapsulation * Function Overloading * DOES NOT SUPPORT INHERITENCE
WE CAN PROTECT OUR SOURCE CODE wrap iname=myscript.sql oname=xxxx.plb CALL REMOTE PROCEDURES
SECURITY ? LOGS OF FILE and CODE e.g. We can keep log of last modification of any code with the following code. SELECT OBJECT_NAME, TO_CHAR(CREATED, 'DD-Mon-RR HH24:MI') CREATE_TIME, TO_CHAR(LAST_DDL_TIME, 'DD-Mon-RR HH24:MI') MOD_TIME, STATUS FROM USER_OBJECTS WHERE LAST_DDL_TIME > '&CHECK_FROM_DATE';
? KEEP HISTORY e.g code CREATE TABLE SOURCE_HIST AS SELECT SYSDATE CHANGE_DATE, USER_SOURCE.* FROM USER_SOURCE WHERE 1=2;
CREATE OR REPLACE TRIGGER change_hist AFTER CREATE ON SCOTT.SCHEMA DECLARE BEGIN if DICTIONARY_OBJ_TYPE in ('PROCEDURE', 'FUNCTION', 'PACKAGE', 'PACKAGE BODY', 'TYPE') then INSERT INTO SOURCE_HIST SELECT sysdate, user_source.* FROM USER_SOURCE WHERE TYPE = DICTIONARY_OBJ_TYPE AND NAME = DICTIONARY_OBJ_NAME; end if; EXCEPTION WHEN OTHERS THEN raise_application_error(-20000, SQLERRM); END;
EXCEPTION HANDLING TYPICAL BODY OF AN PL/SQL PROGRAM DECLARE ….. BEGIN ….. EXCEPTION ….. END;
OTHERS * INTERPORATBILITY and INTERPRETABILITY * JAVA INSIDE PL/SQL
JAVA