Oracle Queries

744
ORACLE ORACLE SYLABUS: DATA BASE CONCEPTS: WHAT IS DATABASE MANAGEMENT SYSTEMS (DBMS). BENEFITS OFDBMS. WHAT IS RELATONAL DATABASE MANAGEMENT SYSTEMS (RDBMS). 12RULES OFDR.E.F.CODD’SRULESOFRDBMS. DBMSV/SRDBMS. OBJECTRELATIONALDATABASEMANAGEMENTSYSTEMS.(ORDBMS). RDBMSVSORDBMS. INTRODUCTION TO OODBMS. ORDBMS VS OODBMS. NORMALIZATION. INSTALLATION OF ORACLE 9I: COMPLETE INSTALATION OF ORACLE 9I ON MICROSOFT XP. CHANGING THE DEFAULT PASSWORD FOR SYS. POST INSTALLATION STEPS. ACTIVATING/DEACTIVATING THE ORACLE 9I ENGINE. DISABLING AUTOMATIC STARTUP. MANUALLY ENABLING THE ORACLE 9I SERVICES. CREATING USERS THROUGH THE ENTERPRISE MANAGER. CREATING USER THROUGH SQL*PLUS. CREATING TABLE SPACES THROUGH ENTERPRISE MANAGER. CREATING TABLE SPACES THROUGH SQL*PLUS. INTRODUCTION OF STRUCTURED QUERY LANGUAGE (SQL) AND SQL*PLUS: FEATURES OF SQL FEATURES OF SQL * PLUS SQL VS SQL*PLUS RULES FOR SQL. DDL, DRL, DML, TCL, DCL COMMANDS. INTRODUCTION OF ISQL*PLUS: NEW FEATURE OF ORACLE 9I SAME AS SQL*PLUS THAT WILL BE OPNED ONLY IN BROWSER. DATABASE OBJECTS: I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE 1

Transcript of Oracle Queries

Page 1: Oracle Queries

ORACLEORACLE SYLABUS:DATA BASE CONCEPTS:

WHAT IS DATABASE MANAGEMENT SYSTEMS (DBMS). BENEFITS OFDBMS. WHAT IS RELATONAL DATABASE MANAGEMENT SYSTEMS (RDBMS). 12RULES OFDR.E.F.CODD’SRULESOFRDBMS. DBMSV/SRDBMS. OBJECTRELATIONALDATABASEMANAGEMENTSYSTEMS.(ORDBMS). RDBMSVSORDBMS. INTRODUCTION TO OODBMS. ORDBMS VS OODBMS. NORMALIZATION.

INSTALLATION OF ORACLE 9I:

COMPLETE INSTALATION OF ORACLE 9I ON MICROSOFT XP. CHANGING THE DEFAULT PASSWORD FOR SYS. POST INSTALLATION STEPS. ACTIVATING/DEACTIVATING THE ORACLE 9I ENGINE. DISABLING AUTOMATIC STARTUP. MANUALLY ENABLING THE ORACLE 9I SERVICES. CREATING USERS THROUGH THE ENTERPRISE MANAGER. CREATING USER THROUGH SQL*PLUS. CREATING TABLE SPACES THROUGH ENTERPRISE MANAGER. CREATING TABLE SPACES THROUGH SQL*PLUS.

INTRODUCTION OF STRUCTURED QUERY LANGUAGE (SQL) AND SQL*PLUS:

FEATURES OF SQL FEATURES OF SQL * PLUS SQL VS SQL*PLUS RULES FOR SQL. DDL, DRL, DML, TCL, DCL COMMANDS.

INTRODUCTION OF ISQL*PLUS:

NEW FEATURE OF ORACLE 9I SAME AS SQL*PLUS THAT WILL BE OPNED ONLY IN BROWSER.

DATABASE OBJECTS:

DATABASE OBJECTS. NAMING CONVENTIONS. THE CREATE TABLE STATEMENT. DISPLAYING TABLE STRUCTURE. THE DEFAULT OPTION. TABLES IN ORACLE DATABASE. QUERYING THE DATA DICTIONARY.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

1

Page 2: Oracle Queries

ORACLE DATA TYPES IN ORACLE. CREATING TABLE USING SELECT STATEMENT. ADDING,MODIFYING,DROPING COULMNS, SET UNUSED OPTION. DROPING TABLE. CHANGING NAME OF A TABLE. ADDING COMMENTS TO TABLES.

INSERTING DATA IN A TABLE:

THE INSERT STATEMENT. ADDING A NEW ROW TO A TABLE. INSERTING ROWS WITH NULL VALUES. INSERTING SPECIFIC DATE VALUES, INSERTING VALUES BY USING SUBSTITUTION VARIABLES. CREATING ROWS FROM ANOTHER TABLE USING SELECT STATEMENT. ORACLE 9I INSERT STATEMENTS.:

o CONDITIONAL INSERT.o UNCONDITIONAL INSERT.o INSERT FIRST.o PIVOTING INSERT.

SELETING DATA IN A TABLE:

SELECT STATEMENT SELETING ALL COLUMNS SELECTING WITH WHERE CLAUSE, COULMN HEADING DEFAULTS.

UPDATING DATA IN A TABLE:

THE UPDATE STATEMENT. UPDATING ROWS IN A TABLE. UPDATING ROWS IN A TABLE USING WHERE CLAUSE. UPDATING WITH MULTIPLE-COLUMN SUBQUERY. UPDATING ROWS BASED ON ANOTHER TABLE. UPDATING TWO OR MORE COLUMNS.

DELETING DATA IN A TABLE:

THE DELETE STATEMENT. DELETING DATA IN A TABLE. DELETING DATA IN A TABLE BASED ON ANOTHER TABLE. COMMIT AND ROLL BACK STATEMENTS. TRUNCATE DATA IN A TABLE. DELETE VS TRUNCATE.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

2

Page 3: Oracle Queries

ORACLECONSTRAINTS:

WHAT ARE CONSTRAINTS. DEFINING CONSTRAINTS. NOT NULL CONSTRAINT. UNIQUE CONSTRAINT. PRIMARY KEY CONSTRAINT. FOREIGN KEY CONSTRAINT. FOREIGN KEY CONSTRAINT WITH ON DELETE CASCADE. FOREIGN KEY CONSTRAINT WITH ON DELETE SET NULL. CHECK CONSTRAINT. GIVING CONSTRAINT AT COLUMN LEVEL. GIVINGCONSTRAINTATTABLELEVEL. GIVINGCONSTRAINTAFTERCREATIONOFTABLE. DROPING CONSTRAINTS. DISABLING CONSTRAINTS. ENABLING CONSTRAINTS. CASCADINGCONSTRAINTS. VIEWING CONSTRAINTS. VIEWING THE COLUMNS ASSOCIATED WITH CONSTRAINTS.

IMPORTANT OPERATORS AND FUNCTIONS:

WHERE CLAUSE. CHARACTERSTRINGS AND DATES. COMPARISON OPERATORS. BETWEEN OPERATOR. IN OPERATOR. LIKE OPERATOR. NULL OPERATOR. ISNULL OPERATOR. AND OPERATOR. OR OPERATOR. NOT OPERATOR. ARITHMETIC EXPRESSIONS. ARITHMETIC OPERATORS. OPERATOR PRECEDENCE. DEFINING NULL VALUE. NVL FUNCTION. DEFINING A COLUMN ALIASES.. CONCATENATION OPERATOR. DISTINCT FUNCTION. ORDER BY CLAUSE. SORTING BY COLUMN ALIASES. SORTING BY MULTIPLE COLUMNS.

SQL FUNCTIONS:

CHARACTER FUNCTIONS. NUMBER FUNCTIONS.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

3

Page 4: Oracle Queries

ORACLE DATE FUNCTIONS. EXPLICIT AND IMPLICIT DAAT TYPE CONVERSIONS. TO_NUMBER FUNCTIONS. TO_CHAR FUNCTIONS. TO_DATEFUNCTIONS. JULIAN DATE FUNTION. SOME SPECIAL DATE FUNCTIONS. DECODE FUNCTION. SOUNDEX. NULLIF NVL2. COALSEC.

JOINS:

WHAT IS JOIN. CARTESIAN PRODUCT. EQUI-JOIN. NONEQUI-JOIN. OUTER-JOIN. SELF-JOIN.

SET OPERATORS:

UNION ALL. UNION. INTERSECT. MINUS.

GROUP FUNCTIONS AND GROUP BY CLAUSE:

WHAT ARE GROUP FUNCTIONS. TYPES OF GROUP FUNCTIONS. CREATING GROUPS OF DATA -GROUP BY CLAUSE. HAVING CLAUSE. ROLL UP OPERATOR. CUBE OPERATOR.

SUBQUERIES:

USING SUB QUERIES. TYPEOFSUB QUERIES. SINGLE ROW SUBQUERIES WITH COMPARISON OPERATORS. MULTI ROW SUBQUERIES. ANY. ALL. FINDING 2ND HIGHEST,3RD HIGHEST AND SO ON……..

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

4

Page 5: Oracle Queries

ORACLE EXSITS. NOT EXSITS. MULTI-COLUMNSUBQUERIES. SUBQUERIESINFROM CLAUSE. SUBQUERIES IN ORDER BY CLAUSE. HIERARCHICAL DATA ACCESS.START WITH CONNECT BY PRIOR. CORRELATED SUB QUERY.

SQL*PLUS COMMANDS:

SUBSTITUTION VARIABLES. SET VERIFY ON/OFF. & AND &&SUBSTITUTIONVARIABLES. ACCEPT. DEFINE,UNDEFINE COMMANDS. SETCOMMANDVARIABLES. SAVING CUTOMIZATIONS IN LOGIN.SQL. SQL*PLUS EDITING COMMANDS. SQL*PLUS FILE COMMANDS. FORMAT COMMANDS. COLUMN COMMANDS. BREAK COMMAND. TTITLE,BTITLE COMMANDS. CREATING SAMPLE REPORT.

VIEWS:

WHAT IS VIEW. USES OF VIEWS. CREATING SIMPLE VIEWS. DML THROUGH SIMPLE VIEW. MODIFYING VIEW. VIEWING VIEWS IN DATABASE. CREATING COMPLEX VIEW. RULES FOR DML THROUGH COMPLEX VIES. WITH CHECK OPTION. WITH READ ONLY. IN LINE VIEWS. ROWNUM COLUMN. FINDING PARTICULAR HIGHEST USING ROWNUM. FINDING FROM X TO Y USING ROWNUM. REMOVING VIEW.

SEQUENCES:

WHAT IS A SEQUENCE. CREATING SEQUENCES. NEXT VAL AN D CURR VAL STATEMENTS. VIEWING SEQUENCES. USING SEQUENCES FOR GENERATING UNIQUE NUMBER FOR COLUMNS.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

5

Page 6: Oracle Queries

ORACLE ALTER A SEQUENCES. REMOVING SEQUENCES.

DATABASE TUNING:

WHAT IS INDEX. CREATING INDEX. USES OF INDEX. OVER VIEW ROWID. WHEN TO CREATE AND WHEN NOT TO CREATE INDEXS. REMOVING INDEXES. WHAT IS SYNONYMS. CREATING AND REMOVING SYNONYMS. CREATING AND MANAGING CLUSTERS. CREATING AND MANAGING SNAPSHOT. PARTITIONING.

TRANSACTIONS:

COMMIT. ROLLBACK. SAVEPOINT.

CONTROLLING USER ACCESS:

CONTROLLING USER ACCESS. PRIVILEGES. OBJECT AND SYSTEM PRIVILEGS. HOW TO GRANT AND REVOKE PRIVILEGES. GRANTING OBJECT AND SYSTEM PRIVILEGES WITH GRANT AND

ADMIN OPTIONS. WHAT IS ROLE. USES AND GRANTING PRIVILEGS TO ROLE.

PL –SQL: (PROCEDURAL LANGUAGE AND STRUCTURED QUERY LANGUAGE):

ABOUT PL/SQL. BENEFITS OF PL/SQL. PL/SQL BLOCKS. DECLARING PL/SQL VARIABLES. NAMING,ASSIGNING,VARIABLE INITIALIZTION OF VARIABLES. PL/SQL RECORD STRUCTURE. %TYPE,%ROWTYPE,LOBVARIABLES. BIND VARIABLES, REFERENCING NON-PL/SQL VARIABLES. DBMS_OUTPUT.PUT_LINE. COMMENTING CODE. SQL,PL/SQL FUNCTIONS. PROGRAMMING GUIDE LINES. CODE NAMING CONVENTIONS. DETERMING VARIABLE SCOPE.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

6

Page 7: Oracle Queries

ORACLE

CONTROL STRUCTURES :

IF-THEN-ELSE STATEMENTS. BASIC LOOP. FOR LOOP. WHILE LOOP CASE STATEMENTS.

COMPOSITE DATATYPES:

PL/SQL RECORDS. %TYPE. %ROW TYPE. PL/SQL TABLES.

WORKING WITH IMPLICIT AND EXPLICIT CURSORS:

ABOUT CURSORS. CURSOR ATTRIBUTES. SQL%ISOPEN,SQL%FOUND,SQL%NOTFOUND,SQL

%ROWCOUNTFORIMPLICITCURSORS. %ISOPEN,%FOUND,%NOTFOUND,%ROWCOUNT FOR EXPLICIT CURSORS. VARIOUS LOOPS IN CURSORS. CURSOR VARIABLES. PARAMETERISED CURSORS. WHERE CURRENT OF CLAUSE. FOR UPDATE CLAUSE. REF CURSORS. CURSORS WITH SUBQUERY.

WORKING WITH EXCEPTIONS:

WHAT IS EXCEPTION. TYPES OF EXCEPTIONS. USER AND PREDEFINED EXCEPTIONS. HANDLING EXCEPTIONS. RAISE-APPLICATION-ERROR EXCEPTION_INIT. SQLCODE. SQLERRM.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

7

Page 8: Oracle Queries

ORACLEPL/SQL SECURITY:

ORACLE DEFAULT LOCKING. TYPES OF LOCKS. LEVEL OF LOCKS. EXPLICIT LOCKING. SELECT FOR UPDATE. READ CONSISTENCY.

STORED PROCEDURES:

OVERVIEW OF PROCEDURES. IMPORTANCE OF STORED PROCEDURES. CREATING PROCEDURES. COMPILING PROCEDURES. CREATING PROCEDURES WITH PARAMETERS. IN,OUT,IN OUT PARAMETERS. DEFAULT OPTION FOR PARAMETERS. FORWARD DECLARATION. OVERLOADING OF PROCEDURE. REMOVING PROCEDURES.

STORED FUNCTIONS:

OVERVIEW OF FUNCTIONS. IMPORTANCE OF STORED FUNCTIONS. CREATING FUNCTIONS. RETURN STATEMENT. COMPILING FUNCTIONS REMOVING FUNCTIONS.. COMPARING PROCEDURES AND FUNCTIONS.

PACKAGES:

OVERVIEW OF PACKAGES. COMPONENTS OF PACKAGE. IMPORTANCE OF PACKAGES. CREATING PACKAGE SPECIFICATION. CREATING PACKAGE BODY. USER DEFINED PACKAGES. REFERENCING PACKAGE OBJECTS. ORACLE SUPPLIED PACKAGES, GLOBAL VARIABLES. PRAGMA RESTRICT_REFERENCES. EXECUTE IMMEDIATE. ORACLE BUILT IN PACKAGES. DBMS_PIPE. DBMS_SQL. DBMS_DDL.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

8

Page 9: Oracle Queries

ORACLE DBMS_JOB. DBMS_OUTPUT.

CREATING DATABASE TRIGGERS:

OVER VIEW OF TRIGGERS. CREATING AND MANAGINGTRIGGERS. TRIGGER COMPONENTS. FIRING SEQUENCE. INSTEADOFTRIGGER. ENABLING AND DISABLING TRIGGERS, AUDIT-TRAIL USING TRIGGERS. PROTECT DATA,REFERENTIAL INTEGRITY. MUTATING TABLE. GENERATION OF PRIMARY KEY USING TRIGGER. REPLICATE A TABLE. COMPUTE DERIVED VALUES BENEFITS OF TRIGGERS.

MANAGING SUBPROGRAMS AND TRIGGERS:

USER_OBJECTS. USER_SOURCE. USER_ERRORS. USER_TRIGGERS. DEBUGGING USING DBMS_OUTPUT.

MANAGING DEPENDENCIES:

UNDERSTANDING DEPENDENCIES USER_DEPENDENCIES.

FILE INPUT/OUTPUT:

PL/SQL FILE I/O USING UTL-FILE PACKAGE.

OOPS IN ORACLE 9I:

CREATION OF OBJECTS. USER DEFINED TYPES. OBJECT TABLES. OBJECT VIEWS. DML THROUGH OBJECTS.

MANIPULATING LARGE OBJECTS:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

9

Page 10: Oracle Queries

ORACLE WHAT IS LOB. COLB. BLOB. NCOLB. BFILE. CREATING TABLES WITH LOBS. DBMS_LOB. CREATION OF EXTERNAL TABLES.

WORKING WITH COLLECTIONS:

VARRAYS. NESTED TABLES. INDEX BY TABLES. DML OPERATIONS ON NESTED TABLES.

DEVELOPMENT AND EXECUTION ENVIRONMENTS:

APPLICATION MODELS IN PL/SQL. TWO-TIER,THREETIERMODEL. SQL*PLUS. RAPIDSQL. SQL NAVIGATOR. TOAD. PL/SQLDEVELOPER. SQL–PROGRAMMER. DBPARTNER DEBUGGER. ISQL * PLUS.

ORACLE DATABASE ARCHITECTURE:

OVER VIEW OF ORACLE DATABASE. LOGICAL AND PHYSICAL STRUCTURE.

INTRODUCTION TO INTERNET TECHNOLOGIES:

TWO –TER ARCHITECTURE. THREE-TIER ARCHITECTURE. N-TIER ARCHITECTURE. JAVA OBJECTS IN ORACLE. SQLJ

PROJECT:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

10

Page 11: Oracle Queries

ORACLETHE ABOVE TOPICS WILL BE COVERED USING DEFAULT TABLES EMP,DEPT,SALGRADE ANDPROJECT BASED STUDY ON BUSSINESS MODEL FOR RETAIL BANKING AND SALES ORDER ENTRY SYSTEM.

COMPLETE DATABASE OF ABOVE TWO PROJECTS WILL BE PROVIDED.

IN GENERAL IF WE WANT TO STORE EMPLOYEE INFORMATION,WE STORE AS SHOWN BELOW:

EMPNO ENAME

JOB MGR

HIREDATE SAL COMM

DEPTNO

100 PAVAN CHAIRMAN

01-JAN-2005

30000 10000 10

101 GAYATRI

P.S 100 01-JAN-2005

10000 1000 10

102 BALAJI MANAGER

100 01-JAN-2005

10000 1000 10

103 SMITH MANAGER

100 01-JAN-2005

10000 1000 10

IN ORACLE WE USE TABLES TO STORE DATA. TABLE CONTAINS COLUMNS AND ROWS.

OPENING SQL* PLUS IN ORACLE 8 :

GO TO ALL PROGRAMS AND SELECT ORACLE FOR WINDOWS 95 AND CLICK SQL*PLUS. YOU GET DIALOG BOX. TYPE SCOTT IN USERNAME AND TIGER IN PASSWORD AND PRESS ENTER. YOU GET SQL PROMPT.

OPENING SQL* PLUS IN ORACLE 9 :

GO TO ALL PROGRAMS AND SELECT ORACLE-ORAHOME90 SELECT APPLICATION DEVELOPMENT IN THERE CLICK SQL PLUS AND TYPE SCOTT IN USER NAME TIGER IN PASSWORD BOX.

IN ORACLE 8 :USER CREATION:

HERE IF YOU WANT TO CREATE YOUR OWN USER YOU GO TO ALL PROGRAMS, THERE PERSONAL ORACLE FOR WINDOWS 95 AND ORACLE NAVIGATOR. CLICK THAT YOU WILL GET WINDOW THERE DOUBLE CLICK PERSONAL ORACLE 8 AND DOUBLE CLICK ON LOCAL DATABASE. YOU SEE DROP DOWN LIST. THERE CLICK ON USER AND RIGHT CLICK ON USER AND NEW.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

11

Page 12: Oracle Queries

ORACLE YOU GET WINDOW TYPE USERNAME,PASSWORD(TWICE). YOUR USER CREATED.

THEN CLICK SQL*PLUS AS SHOWN ABOVE AND TYPE YOUR USERNAME AND PASSWORD.IN THE ABOVE TABLE WE TAKE EMPNO, ENAME, JOB,MGR,HIREDATE,SAL,COMM, DEPTNO AS COLUMNS IN CREATING TABLE IN ORACLE.

CREATION OF TABLE:

SQL>CREATE TABLE EMPLOYEE_INFO 2 (EMPNO NUMBER(10), 3 ENAME VARCHAR2(10), 4 JOB VARCHAR2(10), 5 MGR NUMBER(10), 6 HIREDATE DATE, 7 SAL NUMBER(10), 8 COMM NUMBER(10), 9* DEPTNO NUMBER(10));

Table created.

IN SQL*PLUS,WE USE CL SCR TO CLEAR SCREEN.

IN SQL*PLUS,WE TYPE ED AT SQL PROMPT TO GET EDITOR,WE EDIT SQL STATEMENTS THERE.

DESCRIBE COMMAND WILL GIVE US WITH WHAT COLUMNS WE CREATED TABLE AND THEIR DATATYPE.

SQL> DESC EMPLOYEE_INFO

Name Null? Type

EMPNO NUMBER(10) ENAME VARCHAR2(10) JOB VARCHAR2(10) MGR NUMBER(10) HIREDATE DATE SAL NUMBER(10) COMM NUMBER(10) DEPTNO NUMBER(10)

INSERTING VALUES IN TO TABLE:

SQL> INSERT INTO EMPLOYEE_INFO 2 VALUES 3 (100,'PAVAN','CHAIRMAN',NULL,'01-JAN-2005',30000,10000,10);

1 row created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

12

Page 13: Oracle Queries

ORACLEWHEN EVER WE WRITE VALUES IN INSERT WE HAVE TO GIVE VALUES FOR ALL COLUMNS.

SQL> INSERT INTO EMPLOYEE_INFO 2 VALUES 3 (101,'GAYATRI','P.S',100,'01-JAN-2005',10000,1000,10);

1 row created.

SQL> INSERT INTO EMPLOYEE_INFO 2 VALUES 3 (102,'KUMARI','MANAGER',100,'01-JAN-2005',10000,1000,10);

1 row created.

SQL> INSERT INTO EMPLOYEE_INFO 2 VALUES 3 (103,'SMITH','MANAGER',100,'01-JAN-2005',10000,1000,10);

1 row created.

IF I WANT TO INSERT INTO ONLY FEW COLUMNS THEN I WILL WRITE LIKE THIS:

SQL> INSERT INTO EMPLOYEE_INFO (EMPNO,ENAME,JOB,DEPTNO) 2 VALUES 3 (104,'SMITH','MANAGER',10);

1 row created.

SELECTING VALUES FROM A TABLE:

WHENEVER WE SELECT FROM THE TABLE WE GET COMPLETE INFORMATION IN A TABLE.

SQL> SELECT EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO FROM EMPLOYEE_INFO;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------- ---------- ---------- --------- --------- --------- --------- --------- 100 PAVAN CHAIRMAN 01-JAN-05 30000 10000 10 101 GAYATRI P.S 100 01-JAN-05 10000 1000 10 102 KUMARI MANAGER 100 01-JAN-05 10000 1000 10 103 SMITH MANAGER 100 01-JAN-05 10000 1000 10 4 rows selected.

HERE INSTEAD OF TYPING ALL THE COLUMN NAMES WE TYPE ‘*”.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

13

Page 14: Oracle Queries

ORACLESQL> SELECT * FROM EMPLOYEE_INFO;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------- ---------- ---------- --------- --------- --------- --------- --------- 100 PAVAN CHAIRMAN 01-JAN-05 30000 10000 10 101 GAYATRI P.S 100 01-JAN-05 10000 1000 10 102 KUMARI MANAGER 100 01-JAN-05 10000 1000 10 103 SMITH MANAGER 100 01-JAN-05 10000 1000 10

4 rows selected.

SELECTING WITH WHERE CLAUSE:

WHEN EVER WE SELECT USING WHERE CLAUSE WE GET PARTICULAR INFORMATION DEPENDS ON THE COLUMN YOU SPECIFY IN WHERE CLAUSE.

SQL> SELECT * FROM EMPLOYEE_INFO 2 WHERE EMPNO=100;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------- ---------- ---------- --------- --------- --------- --------- --------- 100 PAVAN CHAIRMAN 01-JAN-05 30000 10000 10

1 row selected.

SQL> SELECT * FROM EMPLOYEE_INFO 2 WHERE ENAME='GAYATRI';

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------- ---------- ---------- --------- --------- --------- --------- --------- 101 GAYATRI P.S 100 01-JAN-05 10000 1000 10

1 row selected.

UPDATE STATEMENT:

WHILE UPDATING A TABLE IF YOU DON’T GIVE WHERE CLAUSE WHOLE TABLE WILL BE UPDATED.

SQL> UPDATE EMPLOYEE_INFO 2 SET SAL= SAL+1000;

4 rows updated.

SQL> SELECT * FROM EMPLOYEE_INFO;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

14

Page 15: Oracle Queries

ORACLE EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------- ---------- ---------- --------- --------- --------- --------- --------- 100 PAVAN CHAIRMAN 01-JAN-05 31000 10000 10 101 GAYATRI P.S 100 01-JAN-05 11000 1000 10 102 KUMARI MANAGER 100 01-JAN-05 11000 1000 10 103 SMITH MANAGER 100 01-JAN-05 11000 1000 10

4 rows selected.

UPDATE TABLE USING WHERE CLAUSE:

WHEN EVER WE GIVE WHERE CLAUSE IN UPDATION ONLY THAT COLUMN CORESSPONDING ROWS WILL BE UPDATED.

SQL> UPDATE EMPLOYEE_INFO 2 SET SAL= SAL+1000 3 WHERE EMPNO=100;

1 row updated.

SQL> SELECT * FROM EMPLOYEE_INFO;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------- ---------- ---------- --------- --------- --------- --------- --------- 100 PAVAN CHAIRMAN 01-JAN-05 32000 10000 10 101 GAYATRI P.S 100 01-JAN-05 11000 1000 10 102 KUMARI MANAGER 100 01-JAN-05 11000 1000 10 103 SMITH MANAGER 100 01-JAN-05 11000 1000 10

4 rows selected.

SQL> UPDATE EMPLOYEE_INFO 2 SET SAL= SAL+1000 3 WHERE ENAME='GAYATRI';

1 row updated.

SQL> SELECT * FROM EMPLOYEE_INFO;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------- ---------- ---------- --------- --------- --------- --------- ---------

100 PAVAN CHAIRMAN 01-JAN-05 32000 10000 10101 GAYATRI P.S 100 01-JAN-05 12000 1000 10102 KUMARI MANAGER 100 01-JAN-05 11000 1000 10103 SMITH MANAGER 100 01-JAN-05 11000 1000 10

4 rows selected.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

15

Page 16: Oracle Queries

ORACLE

DELETING DATA FROM A TABLE:

IF YOU WANT TO DELETE INFO FROM A TABLE,HERE IF YOU WON’T SPECIFY THE WHERE CLAUSE WHOLE TABLE INFO WILL BE DELETED.

SQL> DELETE FROM EMPLOYEE_INFO 2 WHERE EMPNO=102;

1 row deleted.

SQL> SELECT * FROM EMPLOYEE_INFO;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------- ---------- ---------- --------- --------- --------- --------- --------- 100 PAVAN CHAIRMAN 01-JAN-05 32000 10000 10 101 GAYATRI P.S 100 01-JAN-05 12000 1000 10 103 SMITH MANAGER 100 01-JAN-05 11000 1000 10

3 rows selected.

SQL> DELETE FROM EMPLOYEE_INFO 2 WHERE ENAME='SMITH';

1 row deleted.

SQL> SELECT * FROM EMPLOYEE_INFO;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------- ---------- ---------- --------- --------- --------- --------- --------- 100 PAVAN CHAIRMAN 01-JAN-05 32000 10000 10 101 GAYATRI P.S 100 01-JAN-05 12000 1000 10

2 rows selected.

HERE IF YOU WANT TO DELETE ALL EMPLOYEES WE USE THIS STATEMENT.

IF YOU DON’T SPECIFY WHERE IN DELETE COMPLETE TABLE WILL BE DELETED.

SQL> DELETE FROM EMPLOYEE_INFO;

2 rows deleted.

CREATING TABLE WITH SELECT STATEMENT:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

16

Page 17: Oracle Queries

ORACLEIF YOU WANT TO CREATE SAME TABLE AS EMPLOYEE_INFO WITH DATA, WE USE BELOW STATEMENT:

CREATE TABLE EMP

AS

SELECT * FROM EMPLOYEE_INFO;

HERE EMP TABLE HAS SAME COLUMNS AS THAT OF EMPLOYEE_INFO AND EMP HAS SAME DATA THAT OF EMPLOYEE_INFO.HERE BOTH ARE SAME TABLES.

IF YOU WANT TO CREATE TABLE WITH SELETED COLUMNS THAT OF EMPLOYEE_INFO WITH DATA FOR THAT COLUMNS,WE USE BELOW STATEMENT:

CREATE TABLE EMP

AS

SELECT EMPNO,ENAME FROM EMPLOYEE_INFO;

HERE EMP TABLE CREATED WITH EMPNO,ENAME COLUMNS AND DATA FOR THAT COLUMNS FROM EMPLOYEE_INFO TABLE.

IF YOU WANT TO CREATE TABLE WITH SELETED COLUMNS THAT OF EMPLOYEE_INFO WITH DATA FOR THAT COLUMNS WITH YOUR OWN NAME FOR COLUMNS,WE USE BELOW STATEMENT:

CREATE TABLE EMP

(EMPLOYEE_NO,EMPLOYEE_NAME)

AS

SELECT EMPNO,ENAME FROM EMPLOYEE_INFO;

HERE EMP TABLE CREATED WITH COLUMNS EMPNO,ENAME BUT THEIR HEADINGS WILL BE EMPLOYEE_NO,EMPLOYEE_NAME.

INSERTING VALUES WITH SELECT STATEMENT:

INSERT INTO EMP

SELECT * FROM EMPLOYEE_INFO;

HERE BOTH EMP,EMPLOYEE_INFO TABLES SHOULD HAVE SAME STRUCTURE.

MOST IMPORTANT TABLES IN ORACLE DATABASE:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

17

Page 18: Oracle Queries

ORACLEIN USER SCOTT WE HAVE THREE IMPORTANT TABLES THOSE ARE

EMP

DEPT

SALGRADE.

DELETE VS TRUNCATE:

SQL> SELECT * FROM EMPLOYEE_INFO;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 100 PAVAN CHAIRMAN 01-JAN-05 32000 10000 10 101 GAYATRI P.S 100 01-JAN-05 12000 1000 10

SQL> DELETE FROM EMPLOYEE_INFO;

2 rows deleted.

SQL> SELECT * FROM EMPLOYEE_INFO;

no rows selected

SQL> ROLL BACK;

Rollback complete.

SQL> SELECT * FROM EMPLOYEE_INFO;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 100 PAVAN CHAIRMAN 01-JAN-05 32000 10000 10 101 GAYATRI P.S 100 01-JAN-05 12000 1000 10

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

18

Page 19: Oracle Queries

ORACLESQL> DELETE FROM EMPLOYEE_INFO;

2 ROWS DELETED.

SQL> COMMIT;

COMMIT COMPLETE.

SQL> ROLL BACK;

ROLLBACK COMPLETE.

SQL> SELECT * FROM EMPLOYEE_INFO;

NO ROWS SELECTED

SQL> INSERT INTO EMPLOYEE_INFO

2 VALUES

3 (100,'PAVAN','CHAIRMAN',NULL,'01-JAN-05',32000,10000,10);

1 ROW CREATED.

SQL> COMMIT;

COMMIT COMPLETE.

SQL> SELECT * FROM EMPLOYEE_INFO;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------- ---------- ---------- --------- --------- --------- --------- --------- 100 PAVAN CHAIRMAN 01-JAN-05 32000 10000 10

SQL> TRUNCATE TABLE EMPLOYEE_INFO;

TABLE TRUNCATED.

SQL> ROLL BACK;

ROLLBACK COMPLETE.

SQL> SELECT * FROM EMPLOYEE_INFO;

NO ROWS SELECTED

IN TRUNCATE TABLE THE WHOLE INFORMATION WIIL BE DELETED PERMENENTLY. BUT IN CASE OF DELETE THE INFORMATION WILL BE GET BACK AFTER ROLL BACK.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

19

Page 20: Oracle Queries

ORACLEBUT AFTER DELETE IF YOU TYPE COMMIT. THEN INFORMATION WILL BE DELETED PERMENENTLY.

DELETE +COMMIT = TRUNCATE.

ORDER BY CLAUSE:

WE CAN RETRIVE DATA EITHER IN ASCENDING ORDER OR IN DESCENDING ORDER BY USING ORDER BY CLAUSE:

FOR RETRIVING DATA IN ASCENDING ORDER:

SELECT ENAME , SAL FROM EMP ORDER BY SAL ASC ;

SELECT ENAME , SAL FROM EMP ORDER BY SAL ; DEFAULT IS ASCENDING ORDER.

FOR RETRIVING DATA IN DESCENDING ORDER:

SELECT ENAME,SAL FROM EMP ORDER BY SAL DESC ;

WE CAN RETRIVE ONE PARTICULAR AND SPECIFIC TYPE OF DATA BY USING THE KEY WORD ‘LIKE’:

SELECT ENMAE ,JOB,SAL FROM EMP WHERE DEPTNO LIKE 10;

SELECT ENAME,SAL,DEPTNO FROM EMP WHERE JOB LIKE ‘ CLERK ‘ ;

WE CAN RETRIVE MORE SPECIFIC DATA BY USING LIKE AND SYMBOLS ‘ % ’ ,’ _ ’:

“ %” REPRESENTS GROUP OF CHARACTERS .

“ _ “ REPRESENTS SINGLE CHARACTER .

TO GET EMPLOYEES WITH S LETTER IN THE FIRST OF THEIR NAME:

SELECT * FROM EMP WHERE ENAME LIKE ‘ S% ’ ;

TO GET EMPLOYEES WITH S LETTER IN THE LAST OF THEIR NAME:

SELECT * FROM EMP WHERE JOB LIKE ‘ %S ’ ;TO GET EMPLOYEES WITH S LETTER IN THEIR NAME:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

20

Page 21: Oracle Queries

ORACLESELECT * FROM EMP WHERE ENAME LIKE ‘ %S% ‘ ;

TO GET EMPLOYEES WITH FOUR LETTERS:

SELECT * FROM EMP WHERE ENAME LIKE ‘____’ ;

TO GET EMPLOYEES WITH SECOND LETTER ‘A’:

SQL> SELECT * FROM EMP WHERE ENAME LIKE '_A___';

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7900 JAMES CLERK 7698 03-DEC-81 950 30

TO GET EMPLOYEES WITH THIRD LETTER ‘I’:

SQL> SELECT * FROM EMP WHERE ENAME LIKE '__I__';

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20

TO GET EMPLOYEES WITH THIRD AND FOURTH LETTERS AS ‘NE’:

SQL> SELECT * FROM EMP WHERE ENAME LIKE '__NE_';

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7566 JONES MANAGER 7839 02-APR-81 2975 20

TO GET EMPLOYEES WITH HIREDATE IN THE YEAR ‘81’:

1* SELECT * FROM EMP WHERE HIREDATE LIKE '%81'SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

21

Page 22: Oracle Queries

ORACLE 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20

10 ROWS SELECTED.

TO GET EMPLOYEES WITH HIREDATE IN THE MONTH ‘FEB’:

SELECT * FROM EMP WHERE HIREDATE LIKE '%FEB%';

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30

TO GET EMPLOYEES WITH HIREDATE ‘-‘ IN THEIR DATE:

1* SELECT * FROM EMP WHERE HIREDATE LIKE '%-%'SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

14 ROWS SELECTED.

TO GET EMPLOYEES WITH ‘ 8’ IN LAST IN THEIR EMPNO:

1* SELECT * FROM EMP WHERE EMPNO LIKE '%8'SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ----------

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

22

Page 23: Oracle Queries

ORACLE 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7788 SCOTT ANALYST 7566 19-APR-87 3000 20

DISTINCT:

WE CAN SUPPRESS DUPLICATE ROWS WHILE SELECTING DATA BY USING THE KEY WORD DISTINCT:

SELECT DISTINCT (JOB) FROM EMP;

HERE WE GET JOBS WITHOUT DUPLICATES.

SQL> SELECT JOB FROM EMP;

JOB --------- CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK

14 rows selected.

SQL> SELECT DISTINCT(JOB) FROM EMP;

JOB --------- ANALYST CLERK MANAGER PRESIDENT SALESMAN

CONSTRAINTS:

CONSTRAINTS MEAN RESTRICTIONS. IN ORACLE CONSTRAINTS PREVENT INVALID

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

23

Page 24: Oracle Queries

ORACLEDATA ENTRY INTO TABLES.

FOLLOWING ARE THE DIFFERENT TYPES OF CONSTRAINTS:-

NOT NULL.

UNIQUE.

PRIMARY KEY.

FOREIGN KEY.

CHECK.

NOT NULL:

IT DOES NOT ALLOW NULL VALUES INTO COLUMNS.

CONSTRAINT AT COLUMN LEVEL:

CREATE TABLE EMP( EMPNO NUMBER (9) NOT NULL,ENAME VARCHAR(9)) ;

SQL> CREATE TABLE EMPLOYEE 2 (EMPNO NUMBER(10), 3 ENAME VARCHAR2(10));

Table created.

SQL> INSERT INTO EMPLOYEE 2 VALUES 3 (1,'PAVAN');

1 row created.

1 INSERT INTO EMPLOYEE 2 VALUES 3* (NULL,'KUMAR')SQL> /

1 row created.

1 INSERT INTO EMPLOYEE 2 VALUES 3* (3,NULL)SQL> /

1 row created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

24

Page 25: Oracle Queries

ORACLESQL> SELECT * FROM EMPLOYEE;

EMPNO ENAME ---------- ---------- 1 PAVAN KUMAR 3

IN THE ABOVE OUTPUT ONCE EMPNO IS NULL FOR KUMAR AND ONCE ENAME IS NULL FOR EMPNO 3. THIS KIND FOR DATA WRONG DATA WE HAVE TO STOP WHILE INSERTING DATA IN TO THE TABLE.

FOR THIS WE USE NOT NULL CONSTRAINT ON COLUMNS WHERE U WANT STOP NULL VALUES. DROP TABLE EMPLOYEE;

Table dropped.

SQL> CREATE TABLE EMPLOYEE 2 (EMPNO NUMBER(10) NOT NULL, 3 ENAME VARCHAR2(10) NOT NULL);

Table created.

SQL> INSERT INTO EMPLOYEE 2 VALUES 3 (NULL,'KUMAR');INSERT INTO EMPLOYEE*ERROR at line 1:ORA-01400: cannot insert NULL into ("SCOTT"."EMPLOYEE"."EMPNO")

SQL> INSERT INTO EMPLOYEE 2 VALUES 3 (3,NULL);INSERT INTO EMPLOYEE*ERROR at line 1:ORA-01400: cannot insert NULL into ("SCOTT"."EMPLOYEE"."ENAME")

ABOVE WE KEPT NOT NULL FOR BOTH EMPNO,ENAME AND TRIED TO INSERT NULL VALUES IN TO BOTH COLUMNS BUT IT HAS NOT ACCEPTED.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

25

Page 26: Oracle Queries

ORACLEIF YOU WANT TO MAKE ANY COLUMN TO ENTER VALUE FOR THAT COLUMN COMPLUSORY THEN WE HAVE TO KEEP NOT NULL FOR THAT COLUMN.

WE CANNOT KEEP NOT NULL AT THE TIME OF TABLE CREATION AT TABLE LEVEL.

WE CAN ADD CONSTRAINT NOT NULL AFTER CREATION OF TABLE.

UNIQUE:

IT DOES NOT ALLOW DUPLICATE VALUES IN COLUMNS.

CONSTRAINT AT COLUMN LEVEL:

CREATE TABLE EMP( EMPNO NUMBER (9) UNIQUE ,ENAME VARCHAR(9)) ;

CONSTRAINT AT TABLE LEVEL:

CREATE TABLE EMPEMPNO NUMBER (9) ,ENAME VARCHAR2(9),CONSTRAINT EMP_UNI UNIQUE ( EMPNO) ;

SQL> DROP TABLE EMPLOYEE;

Table dropped.

SQL> CREATE TABLE EMPLOYEE 2 (EMPNO NUMBER(10), 3 ENAME VARCHAR2(10));

Table created.

SQL> INSERT INTO EMPLOYEE 2 VALUES 3 (1,'PAVAN');

1 row created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

26

Page 27: Oracle Queries

ORACLE 1 INSERT INTO EMPLOYEE 2 VALUES 3* (1,'PAVAN')

SQL> /

1 row created.

1 INSERT INTO EMPLOYEE 2 VALUES 3* (2,'KUMAR')SQL> /

1 row created.

1 INSERT INTO EMPLOYEE 2 VALUES 3* (3,'KUMAR')SQL> /

1 row created.

1 INSERT INTO EMPLOYEE 2 VALUES 3* (1,'PAVAN')SQL> /

1 row created.

1 INSERT INTO EMPLOYEE 2 VALUES 3* (1,'PAVAN')

SQL> /

1 row created.

SQL> SELECT * FROM EMPLOYEE;

EMPNO ENAME ---------- ---------- 1 PAVAN

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

27

Page 28: Oracle Queries

ORACLE 1 PAVAN 2 KUMAR 3 KUMAR 1 PAVAN 1 PAVAN

6 rows selected.

HERE IF YOU WANT SELECT ONLY PAVAN'S RECORD WE HAVE TO QUERY LIKE THIS

SQL> SELECT * FROM EMPLOYEE WHERE ENAME='PAVAN';

EMPNO ENAME ---------- ---------- 1 PAVAN 1 PAVAN 1 PAVAN 1 PAVAN

BUT WE WANT PARTICULAR PAVAN'S RECORD. HERE IT IS NOT POSSIBLE. THIS IS WRONG DATA ENTERED IN TO THE TABLE.IN REAL TIME WE HAVE SAME NAME EMPLOYEES IN AN ORAGANIZATION, THEN WHAT WE SHOULD DO IS WE GIVE EACH ONE ONE UNIQUE NUMBER THAT IS EMPLOYEE ID.

HERE ALSO WE MAKE EMPNO HAS UNIQUE, THAT IS EMPNO COLUMN SHOLD NOT ALLOW US TO ENTER DUPLICATE VALUES.

FOR DOING THAT WE USE UNIQUE CONSTRAINT.

SQL> DROP TABLE EMPLOYEE;

Table dropped.

SQL> CREATE TABLE EMPLOYEE 2 (EMPNO NUMBER(10) UNIQUE, 3 ENAME VARCHAR2(10));

Table created.

SQL> INSERT INTO EMPLOYEE 2 VALUES 3 (1,'PAVAN');

1 row created.

HERE 1 IS ASSIGNED TO PAVAN, IF FOR ANY EMPLOYEE IF U WANT TO GIVE EMPNO AS 1 IT WON'T ACCEPT.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

28

Page 29: Oracle Queries

ORACLESQL> INSERT INTO EMPLOYEE 2 VALUES 3 (1,'PAVAN');INSERT INTO EMPLOYEE*ERROR at line 1:ORA-00001: unique constraint (SCOTT.SYS_C002751) violated

HERE IF YOU TRIES TO ASSIGN SAME NUMBER FOR PAVAN THAT IS WRONG BECAUSE WE KEPT UNIQUE CONSTRAINT ON EMPNO.

IT ACCEPTS IF YOU GIVE 2 FOR NEXT PAVAN.

1 INSERT INTO EMPLOYEE 2 VALUES 3* (2,'PAVAN')SQL> /

1 row created.

HERE UNIQUE CONSTRAINT HAS PROBLEM. THAT IS IT ALLOWS NULL VALUES.

SQL> INSERT INTO EMPLOYEE 2 VALUES 3 (NULL,'PAVAN');

1 row created.

SQL> SELECT * FROM EMPLOYEE;

EMPNO ENAME ---------- ---------- 1 PAVAN 2 PAVAN PAVAN

SQL> THIS IS WRONG WITH UNIQUE.

TO DO ABOVE PROBLEM CORRECTLY WE GO FOR ANOTHER CONSTRAINT CALLED PRIMARY KEY.

WHICH ACTS AS BOTH NOT NULL AND UNIQUE.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

29

Page 30: Oracle Queries

ORACLE

PRIMARY KEY:

IT DOES NOT ALLOW EITHER NULL VALUES OR DUPLICATE VALUES IN TO THE COLUMNS ( IT SIMULTANEOUSLY FUNCTIONS BOTH AS “ NOT NULL “ AND “ UNIQUE “ )

CONSTRAINT AT COLUMN LEVEL:

CREATE TABLE EMP( EMPNO NUMBER (9) PRIMARY KEY,ENAME VARCHAR2(9)) ;

CONSTRAINT AT TABLE LEVEL:

CREATE TABLE EMP(EMPNO NUMBER(9),ENAME VARCHAR2(9),DEPTNO NUMBER(9),CONSTRAINT EMPW_PK PRIMARY KEY (EMPNO)) ;

SQL> DROP TABLE EMPLOYEE;Table dropped.SQL> CREATE TABLE EMPLOYEE 2 (EMPNO NUMBER(10) PRIMARY KEY, 3 ENAME VARCHAR2(10));

Table created.

SQL> INSERT INTO EMPLOYEE 2 VALUES 3 (1,'PAVAN');

1 row created.

1 INSERT INTO EMPLOYEE 2 VALUES 3* (1,'PAVAN')

SQL> /INSERT INTO EMPLOYEE*ERROR at line 1:ORA-00001: unique constraint (SCOTT.SYS_C002752) violated

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

30

Page 31: Oracle Queries

ORACLE ABOVE IT ACTED AS UNIQUE CONSTRAINT THAT MEANS IT STOPPED DUPLICATE VALUES.

SQL> INSERT INTO EMPLOYEE 2 VALUES 3 (NULL,'PAVAN');INSERT INTO EMPLOYEE*ERROR at line 1:ORA-01400: cannot insert NULL into ("SCOTT"."EMPLOYEE"."EMPNO")

OUR PROBLEM SLOVED.

HERE WE CAN GIVE NAME FOR CONSTRAINT,IF YOU DON'T GIVE NAME FOR CONSTRAINT SYSTEM WILL AUTOMATICALLY ASSIGNS A UNIQUE NUMBER CALLED SYS_UNIQUE NUMBER.

INSERT INTO EMPLOYEE 2 VALUES 3 (1,'PAVAN');INSERT INTO EMPLOYEE*ERROR at line 1:ORA-00001: unique constraint (SCOTT.SYS_C002752) violated

SQL> DROP TABLE EMPLOYEE;

Table dropped.

SQL> CREATE TABLE EMPLOYEE 2 (EMPNO NUMBER(10) CONSTRAINT EMPLOYEE_PK PRIMARY KEY, 3 ENAME VARCHAR2(10));

Table created.

SQL> INSERT INTO EMPLOYEE 2 VALUES 3 (1,'PAVAN');

1 row created.

SQL> INSERT INTO EMPLOYEE 2 VALUES 3 (1,'PAVAN');INSERT INTO EMPLOYEE*

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

31

Page 32: Oracle Queries

ORACLEERROR at line 1:ORA-00001: unique constraint (SCOTT.EMPLOYEE_PK) violated

WE CAN ALSO GIVE PRIMARY KEY FOR 2 COLUMNS:

CREATE TABLE EMP(EMPNO NUMBER(9),ENAME VARCHAR2(9),DEPTNO NUMBER(9),CONSTRAINT EMP_PK1 PRIMARY KEY (EMPNO,ENAME));

CHECK CONSTRAINT:

IT IS ALSO CALLED BUSINESS RULE CONSTRAINT.

CONSTRAINT AT COLOUMN LEVEL:

CREATE TABLE BANK(ACC_NO NUMBER(9),NAME VARCHAR2(9),BALANCE NUMBER(9) CHECK(BALANCE >=1000),ADDRESS VARCHAR2(9));

CONSTRAINT AT TABLE LEVEL:

CREATE TABLE BANK(ACC_NO NUMBER(9),NAME VARCHAR2(9),BALANCE NUMBER(9),ADDRESS VARCHAR2(9),CONSTRAINT BANK_CHEK CHECK(BALANCE >=1000));

SQL> CREATE TABLE BANK 2 (ACC_NO NUMBER(10), 3 BALANCE NUMBER(10));

Table created.

SQL> INSERT INTO BANK 2 VALUES 3 (1,1000);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

32

Page 33: Oracle Queries

ORACLE1 row created.

1 INSERT INTO BANK 2 VALUES 3* (2,2000)SQL> /

1 row created.

1 INSERT INTO BANK 2 VALUES 3* (3,500)SQL> /

1 row created.

HERE WE WANT STOP SOME ONE ENTERING BELOW 1000 IN BALANCE COLUMN, FOR THAT WE KEEP CHECK CONSTRAINT ON COLUMN BALANCE.

SQL> DROP TABLE BANK;

Table dropped.

SQL> CREATE TABLE BANK 2 (ACC_NO NUMBER(10), 3 BALANCE NUMBER(10) CHECK(BALANCE > 1000));

Table created.

SQL> INSERT INTO BANK 2 VALUES 3 (1,1000);INSERT INTO BANK*ERROR at line 1:ORA-02290: check constraint (SCOTT.SYS_C002758) violated

SQL> INSERT INTO BANK 2 VALUES 3 (2,2000);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

33

Page 34: Oracle Queries

ORACLE1 row created.

SQL> INSERT INTO BANK 2 VALUES 3 (3,500);INSERT INTO BANK*ERROR at line 1:ORA-02290: check constraint (SCOTT.SYS_C002758) violated

HERE CHECK CONSTRAINT STOPED US FROM ENTERING BELOW 1000.

SQL> DROP TABLE BANK;

Table dropped.

SQL> CREATE TABLE BANK 2 (ACC_NO NUMBER(10), 3 BALANCE NUMBER(10), 4 CONSTRAINT BANK_CK CHECK(BALANCE > 1000));

Table created.

SQL> DROP TABLE BANK;

Table dropped.

SQL> CREATE TABLE BANK 2 (ACC_NO NUMBER(10), 3 BALANCE NUMBER(10));

Table created.

SQL> ALTER TABLE BANK 2 ADD CONSTRAINT BANK_CK CHECK(BALANCE > 1000);

Table altered.

FOREIGN KEY:

FOREIGN KEY ESTABLISHES RELATIONSHIPS BETWEEN TABLES. A FOREIGN KEY IS A COLOUMN WHOSE VALUES ARE DERIVED FROM THE PRIMARY KEY OR UNIQUE KEY OF SOME OTHER TABLE.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

34

Page 35: Oracle Queries

ORACLECONSTRAINT AT COLOUMN LEVEL:

CREATE TABLE EMP(EMPNO NUMBER(9),ENAME VARCHAR2(9),DEPTNO NUMBER(9) REFERENCES DEPT(DEPTNO));

CONSTRAINT AT TABLE LEVEL:

CREATE TABLE EMP(EMPNO NUMBER(9),ENAME VARCHAR2(9),DEPTNO NUMBER(9),CONSTRAINT EMP_FK FOREIGN KEY(DEPTNO) REFERENCES DEPT(DEPTNO));

NOTE: THE DEPTNO OF DEPT TABLE MUST HAVE PRIMARY KEY OR UNIQUE KEY.

SQL> CREATE TABLE EMP1 2 AS 3 SELECT * FROM EMP;

Table created.

SQL> CREATE TABLE DEPT1 2 AS 3 SELECT * FROM DEPT;

Table created.

SQL> SELECT * FROM EMP1;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

14 rows selected.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

35

Page 36: Oracle Queries

ORACLEHERE IF I ENTER IN TO EMP1 EMPLOYEES IN DEPTNO 50,60,70 LIKE BELOW

1 INSERT INTO EMP1 2 VALUES 3* (1,'PAVAN','MANAGER',7369,'01-DEC-81',1000,1000,50)SQL> /

1 row created.

1 INSERT INTO EMP1 2 VALUES 3* (2,'KUMAR','MANAGER',7369,'01-DEC-81',1000,1000,60)SQL> /

1 row created.

1 INSERT INTO EMP1 2 VALUES 3* (3,'GAYATRI','MANAGER',7369,'01-DEC-81',1000,1000,70)SQL> /

1 row created.

SQL> SELECT * FROM EMP1;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 1 PAVAN MANAGER 7369 01-DEC-81 1000 1000 50 2 KUMAR MANAGER 7369 01-DEC-81 1000 1000 60 3 GAYATRI MANAGER 7369 01-DEC-81 1000 1000 70

17 rows selected.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

36

Page 37: Oracle Queries

ORACLEHERE IF U OBSERVE DEPTNO COLUMN IN EMP1 TABLE, IF ANY ONE ASKS WHAT IS THE NAME OFDEPARTMENT NUMBER 20, U WILL QUERY DEPT1 TABLE LIKE THIS

SQL> SELECT * FROM DEPT;

DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

AND SAYS RESEARCH IS NAME, NOW U TELL ME WHAT IS THE NAME OF DEPARTMENT 50.

HERE CLEALY U CAN SAY THERE IS NO DEPARTMENT NO 50 EXISTING IN DEPT1 TABLE. THAT IS WE CANNOT FIND OUT THE DNAME FOR DEPTNO 50. THAT IS THIS IS WRONG INFO U ENTERED IN TO EMP1 TABLE. U HAVE TO STOP THIS BY USING FOREIGN KEY.

THAT IS YOU HAVE TO TELL ORACLE THAT BEFORE ACCEPTING A VALUE IN EMP1 TABLE DEPTNO COLUMNYOU PLEASE KINDLY SEARCH DEPT1 TABLE DEPTNO COLUMN IF ENTERED NUMBER IS THERE IN DEPTNO COLUMN OF DEPT TABLE U ACCEPT THAT NUMBER TO ENTER IN TO EMP1 TABLE DEPTNO COLUMN OTHERWISE RAISE ERROR.

HERE WE ASKING ORACLE TO REFER DEPT1 TABLE DEPTNO THAT IS WHY DEPT1 TABLE IS PARENT TABLE AND EMP1 IS CHILD TABLE.

FOR DOING ABOVE THING WE HAVE TO KEEP FOREIGN KEY FOR EMP1 TABLE DEPTNO AND PRIMARY KEY FOR DEPT1 TABLE DEPTNO COLUMN.

FIRST U HAVE TO KEEP PRIMARY KEY FOR DEPT1 TABLE DEPTNO AND THEN FOREIGN KEY FOR EMP TABLEDEPTNO LIKE BELOW.

SQL> ALTER TABLE DEPT1 2 ADD CONSTRAINT DEPT1_PK PRIMARY KEY(DEPTNO);

Table altered.

SQL> ALTER TABLE EMP1 2 ADD CONSTRAINT EMP1_FK FOREIGN KEY(DEPTNO) REFERENCES DEPT1(DEPTNO);

Table altered.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

37

Page 38: Oracle Queries

ORACLESQL> INSERT INTO EMP1 2 (EMPNO,DEPTNO) 3 VALUES 4 (1,50);INSERT INTO EMP1*ERROR at line 1:ORA-02291: integrity constraint (SCOTT.EMP1_FK) violated - parent key not found

1 INSERT INTO EMP1 2 (EMPNO,DEPTNO) 3 VALUES 4* (1,60)SQL> /INSERT INTO EMP1*ERROR at line 1:ORA-02291: integrity constraint (SCOTT.EMP1_FK) violated - parent key not found

HERE IF YOU ENTER OTHER THAN DEPTNO THAT IS EXISTING IN DEPT TABLE WE GET ERROR.IT WON'T BE ENTERED IN TO EMP1 TABLE.

1 CREATE TABLE EMP1 2 (EMPNO NUMBER(10), 3 ENAME VARCHAR2(10), 4* DEPTNO NUMBER(10) REFERENCES DEPT1(DEPTNO))SQL> /

Table created.

1 CREATE TABLE EMP11 2 (EMPNO NUMBER(10), 3 ENAME VARCHAR2(10), 4 DEPTNO NUMBER(10), 5* CONSTRAINT EMP2_FK FOREIGN KEY(DEPTNO) REFERENCES DEPT1(DEPTNO))SQL> /

Table created.

IF YOU DON’T GIVE NAMES TO THE CONSTRAINTS SYSTEM WILL AUTOMATICALLY GIVE NAMES EX: SYS_UNIQUE NUMBER. IT IS ALWAYS GOOD PRACTICE TO GIVE NAMES TO CONSTRAINTS.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

38

Page 39: Oracle Queries

ORACLEWE CAN GIVE CONSTRAINTS AFTER THE CREATION OF THE TABLE ALSO.

UNIQUE:

ALTER TABLE EMP

ADD CONSTRAINT EMP_UK UNIQUE(EMPNO);

PRIMARY KEY:

ALTER TABLE EMP

ADD CONSTRAINT EMP_PK PRIMARY KEY(EMPNO);

FOREIGN KEY:

ALTER TABLE EMP

ADD CONSTRAINT EMP_FK FOREIGN KEY(DEPTNO) REFERENCES DEPT(DEPTNO);

CHECK:

ALTER TABLE BANK

ADD CONSTRAINT BANK_CH CHECK(BALANCE >=1000) ;

VIEWING CONSTRAINTS:

YOU CAN SEE THE CONSTRAINTS THAT ARE CREATED ON TABLES IN THE ORACLE TABLE CALLEDUSER_CONSTRAINTS

SELECT TABLE_NAME,CONSTRAINT_NAME,CONSTRAINT_TYPE FROM USER_CONSTRAINTS

WHERE TABLE_NAME=’EMP’;

IF YOU WANT TO SEE COLUMNS ASSOCIATED WITH CONSTRAINTS THEN YOU HAVE TO SEE INUSER_CONS_COLUMNS

SELECT TABLE_NAME,CONSTRAINT_NAME,COLUMN_NAME FROM USER_CONS_COLUMNS

WHERE TABLE_NAME=’EMP’;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

39

Page 40: Oracle Queries

ORACLESQL> CREATE TABLE EMPLOYEE 2 (EMPNO NUMBER(10) CONSTRAINT EMPLOYEE_NN NOT NULL, 3 ENAME VARCHAR2(10) CONSTRAINT EMPLOYEE_UK UNIQUE, 4 JOB VARCHAR2(10) CONSTRAINT EMPLOYEE_PK PRIMARY KEY, 5 SAL NUMBER(10) CONSTRAINT EMPLOYEE_CK CHECK(SAL > 1000), 6 DEPTNO NUMBER(10) CONSTRAINT EMPLOYEE_FK REFERENCES DEPT(DEPTNO));

Table created.

1 SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME FROM USER_CONSTRAINTS 2* WHERE TABLE_NAME='EMPLOYEE'SQL> /

CONSTRAINT_NAME C TABLE_NAME ------------------------------ - ------------------------------ EMPLOYEE_NN C EMPLOYEE EMPLOYEE_CK C EMPLOYEE EMPLOYEE_PK P EMPLOYEE EMPLOYEE_UK U EMPLOYEE EMPLOYEE_FK R EMPLOYEE

1 SELECT CONSTRAINT_NAME,COLUMN_NAME,TABLE_NAME FROM USER_CONS_COLUMNS 2* WHERE TABLE_NAME='EMPLOYEE'SQL> /

CONSTRAINT_NAME ------------------------------ COLUMN_NAME ----------------------------------------------------------------------------------------------------TABLE_NAME ------------------------------ EMPLOYEE_CK SAL EMPLOYEE EMPLOYEE_FK DEPTNO EMPLOYEE EMPLOYEE_NN EMPNO EMPLOYEE EMPLOYEE_PK JOB EMPLOYEE

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

40

Page 41: Oracle Queries

ORACLEEMPLOYEE_UK ENAME EMPLOYEE

WE CAN ENABLE AND DISABLE CONSTRAINTS:

ALTER TABLE EMPDISABLE CONSTRAINT EMP_PK;

ALTER TABLE EMPDISABLE CONSTRAINT EMP_UK;

ALTER TABLE EMPDISABLE CONSTRAINT EMP_FK;

ALTER TABLE BANKDISABLE CONSTRAINT BANK_CH;

IF YOU ENTER CONSTRAINT AGAINST INFORMATION IN TO THE TABLE THEN YOU HAVE TO DELETE THAT INFORMATION THEN ONLY YOU CAN ENABLE THE CONSTRAINT.

ALTER TABLE EMPENABLE CONSTRAINT EMP_PK;

ALTER TABLE EMPENABLE CONSTRAINT EMP_UK;

ALTER TABLE EMPENABLE CONSTRAINT EMP_FK;

ALTER TABLE BANKENABLE CONSTRAINT BANK_CH;

SQL> CREATE TABLE EMPLOYEE 2 (EMPNO NUMBER(10), 3 ENAME VARCHAR2(10));

Table created.

SQL> ALTER TABLE EMPLOYEE 2 ADD CONSTRAINT EMPLOYEE_PK PRIMARY KEY(EMPNO);

Table altered.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

41

Page 42: Oracle Queries

ORACLESQL> INSERT INTO EMPLOYEE 2 VALUES 3 (1,'PAVAN');

1 row created.

1 INSERT INTO EMPLOYEE 2 VALUES 3* (1,'KUMAR')SQL> /INSERT INTO EMPLOYEE*ERROR at line 1:ORA-00001: unique constraint (SCOTT.EMPLOYEE_PK) violated

HERE CONSTRAINT STOPED US ENTERING IN TO TABLE 1 AGAIN FOR EMPNO COLUMN FOR KUMAR. HERE TABLE HAS NOT ACCEPTED 1 AGAIN FOR EMPNO COLUMN WHICH IS ALREADY ASSIGNED TO PAVAN.NOW I WILL DISABLE PRIMARY KEY.

ALTER TABLE EMPLOYEEDISABLE CONSTRAINT EMPLOYEE_PK;

Table altered.

SQL> INSERT INTO EMPLOYEE 2 VALUES 3 (1,'KUMAR');

1 row created.

1 INSERT INTO EMPLOYEE 2 VALUES 3* (1,'GAYATRI')SQL> /

1 row created.

SQL> SELECT * FROM EMPLOYEE;

EMPNO ENAME ---------- ---------- 1 PAVAN 1 KUMAR 1 GAYATRI

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

42

Page 43: Oracle Queries

ORACLEHERE WHEN EVER I DISABLED CONSTRAINT PRIMARY KEY ON TABLE IT ALLOWED WRONG INFO.HERE IF I WANT TO ENABLE PRIMARY NOW LIKE THIS

SQL> ALTER TABLE EMPLOYEE 2 ENABLE CONSTRAINT EMPLOYEE_PK;ALTER TABLE EMPLOYEE*ERROR at line 1:ORA-02437: cannot validate (SCOTT.EMPLOYEE_PK) - primary key violated

HERE WHAT HAPPENED IS THE TABLE CONTAINED WRONG INFO UNLESS YOU DELETE THAT IT WON'T ALLOW YOU TO ENABLE PRIMARY KEY CONSTRAINT ON TABLE.

SQL> SELECT * FROM EMPLOYEE;

EMPNO ENAME ---------- ---------- 1 PAVAN 1 KUMAR 1 GAYATRI

SQL> DELETE FROM EMPLOYEE 2 WHERE ENAME IN ('KUMAR','GAYATRI');

2 rows deleted.

SQL> ALTER TABLE EMPLOYEE 2 ENABLE CONSTRAINT EMPLOYEE_PK;

Table altered.

SQL> SELECT * FROM EMPLOYEE;

EMPNO ENAME ---------- ---------- 1 PAVAN

SQL> INSERT INTO EMPLOYEE 2 VALUES 3 (1,'PAVAN');INSERT INTO EMPLOYEE*ERROR at line 1:ORA-00001: unique constraint (SCOTT.EMPLOYEE_PK) violated

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

43

Page 44: Oracle Queries

ORACLE

DROPING CONSTRAINTS:

ALTER TABLE EMPDROP CONSTRAINT EMP_PK;

ALTER TABLE EMPDROP CONSTRAINT EMP_UK;

ALTER TABLE EMPDROP CONSTRAINT EMP_FK;

ALTER TABLE BANKDROP CONSTRAINT BANK_CH;

FOREIGN KEY CONSTRAINT DEFINED WITH ON DELETE CASCADE :

GENRALLY IF CHILD TABLE HAS FOREIGN KEY CONSTRAINT,THEN PARENT TABLE DOES NOT ALLOW US TO DELETE THE ROW. BUT IF FKC IS GIVEN WITH ODC,THEN IF WE DELETE THE ROWS IN PARENT TABLE SIMULTANESOLY RESPECTIVE RECORDS IN THE CHILD TABLE ALSO DELETED.ALTER TABLE EMP

ADD CONSTRAINT EMP_FK FOREIGN KEY( DEPTNO ) REFERENCES DEPT ( DEPTNO ) ON DELETE CASCADE ;

FOREIGN KEY CONSTRAINT DEFINED WITH ON DELETE SET NULL :

GENRALLY IF CHILD TABLE HAS FOREIGN KEY CONSTRAINT,THEN PARENT TABLE DOES NOT ALLOW US TO DELETE THE ROW. BUT IF FKC IS GIVEN WITH ON DELETE SET NULL, THEN IF WE DELETE THE ROWS IN PARENT TABLE SIMULTANESOLY RECORDS IN THE CHILD TABLE WILL NOT BE DELETED ONLY RESPECTIVE COLUMN WILL BE KEPT NULL.

ALTER TABLE EMPADD CONSTRAINT EMP_FK FOREIGN KEY (DEPTNO) REFERENCES DEPT (DEPTNO) ON DELETE SET NULL;

SQL> CREATE TABLE EMP100 2 AS

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

44

Page 45: Oracle Queries

ORACLE 3 SELECT * FROM EMP;

Table created.

SQL> CREATE TABLE DEPT100 2 AS 3 SELECT * FROM DEPT;

Table created.

SQL> ALTER TABLE DEPT100 2 ADD CONSTRAINT DEPT100_PK PRIMARY KEY(DEPTNO);

Table altered.

SQL> ALTER TABLE EMP100 2 ADD CONSTRAINT EMP100_FK FOREIGN KEY(DEPTNO) REFERENCES DEPT100(DEPTNO);

Table altered.

NOW IF YOU WANT TO DELETE FROM DEPT100 TABLE IT WON'T ALLOW YOU TO DELETE THE INFO BCOZ WHENEVER YOU WANT TO DELETE FROM TABLE IF IT ACCEPTS THE DELETION THERE ARE SOME PEOPLE WHO ARE WORKING IN EMP100 TABLE IN THAT PARTICULAR DEPARTMENT.

THEN FOR THOSE EMPLOYEE NO DEPARTMENT NAME.THE WHOLE CONCEPT OF FOREIGN KEY GOES WRONG.IF YOU WANT TO DELETE ANY INFO FROM DEPT100 TABLE YOU HAVE TO ALTER FOREIGN KEY ON EMP100 TABLE.

SQL> ALTER TABLE EMP100 2 DROP CONSTRAINT EMP100_FK;

Table altered.

SQL> ALTER TABLE EMP100 2 ADD CONSTRAINT EMP_FK FOREIGN KEY(DEPTNO) REFERENCES DEPT100(DEPTNO) ON DELETE CASCADE;

Table altered.

NOW IF YOU DELETE 10 IN DEPT100 TABLE THE EMPLOYEES WROKING IN DEPARTMENT 10 IN EMP100 TABLE ALSO DELETED THEN THERE IS NO PROBLEM.

SQL> SELECT * FROM DEPT100;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

45

Page 46: Oracle Queries

ORACLE DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

SQL> DELETE FROM DEPT100 2 WHERE DEPTNO=10;

1 row deleted.

SQL> SELECT * FROM DEPT100;

DEPTNO DNAME LOC ---------- -------------- ------------- 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

SQL> SELECT * FROM EMP100;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20

11 rows selected.

1 ALTER TABLE EMP100 2* DROP CONSTRAINT EMP_FKSQL> /

Table altered.

SQL> ALTER TABLE EMP100

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

46

Page 47: Oracle Queries

ORACLE 2 ADD CONSTRAINT EMP_FK FOREIGN KEY(DEPTNO) REFERENCES DEPT100(DEPTNO) ON DELETE SET NULL;

Table altered.

SQL> SELECT * FROM DEPT100;

DEPTNO DNAME LOC ---------- -------------- ------------- 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

SQL> DELETE FROM DEPT100 2 WHERE DEPTNO=20;

1 row deleted.

SQL> SELECT * FROM DEPT100;

DEPTNO DNAME LOC ---------- -------------- ------------- 30 SALES CHICAGO 40 OPERATIONS BOSTON

SQL> SELECT * FROM EMP100;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7788 SCOTT ANALYST 7566 19-APR-87 3000 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000

11 rows selected.

HERE ALL THE INFO OF 20 DEPARTMENT WAS NOT DELETED ONLY DEPTNO 20 WAS SET TO NULL.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

47

Page 48: Oracle Queries

ORACLEADDING NOT NULL AFTER CREATION OF THE TABLE:

ALTER TABLE EMPMODIFY EMPNO NUMBER(10) CONSTRAINT EMP_NTN NOT NULL;

DROPING NOT NULL AFTER CREATION OF THE TABLE:

ALTER TABLE EMPMODIFY EMPNO NUMBER(10) CONSTRAINT EMP_NTN NULL;

ADDING COLUMNS AFTER CREATION OF TABLE:

ALTER TABLE EMP ADD (ADDRESS VARCHAR2(10),CITY VARCHAR2(10));SQL> CREATE TABLE EMP1 2 AS 3 SELECT * FROM EMP;

Table created.

SQL> DESC EMP1 Name Null? Type ----------------------------------------------------- -------- ------------------------------------ EMPNO NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2)

SQL> ALTER TABLE EMP1 2 ADD ADDRESS VARCHAR2(10);

Table altered.

SQL> DESC EMP1 Name Null? Type ----------------------------------------------------- -------- ------------------------------------ EMPNO NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4)

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

48

Page 49: Oracle Queries

ORACLE HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) ADDRESS VARCHAR2(10)

SQL> ALTER TABLE EMP1 2 ADD (ADDRESS1 VARCHAR2(10), ADDRESS2 VARCHAR2(10));

Table altered.

SQL> DESC EMP1 Name Null? Type ----------------------------------------------------- -------- ------------------------------------ EMPNO NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) ADDRESS VARCHAR2(10) ADDRESS1 VARCHAR2(10) ADDRESS2 VARCHAR2(10)

MODIFYING DATATYPES OF COLUMNS:

ALTER TABLE EMP MODIFY EMPNO NUMBER(30);

WE CANNOT DECREASE DATATYPE OF COLUMNS IF DATA EXSITS.

ALTER TABLE EMP MODIFY EMPNO NUMBER(1);

SQL> ALTER TABLE EMP1 2 MODIFY EMPNO NUMBER(20);

Table altered.

SQL> DESC EMP1 Name Null? Type ----------------------------------------------------- -------- ------------------------------------ EMPNO NUMBER(20) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

49

Page 50: Oracle Queries

ORACLE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2)

1 ALTER TABLE EMP1 2* MODIFY EMPNO NUMBER(4)SQL> /MODIFY EMPNO NUMBER(4) *ERROR at line 2:ORA-01440: column to be modified must be empty to decrease precision or scale

DROPING COLUMNS:

SQL> ALTER TABLE EMP1 2 DROP COLUMN ADDRESS;

Table altered.

SQL> ALTER TABLE EMP1 2 DROP COLUMN ADDRESS1;

Table altered.

SQL> ALTER TABLE EMP1 2 DROP COLUMN ADDRESS2;

Table altered.

SQL> DESC EMP1 Name Null? Type ----------------------------------------------------- -------- ------------------------------------ EMPNO NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2)

GROUP FUNCTIONS:

SELECT MAX(SAL), MIN(SAL),AVG(SAL),SUM(SAL),STDDEV(SAL),VARIANCE(SAL) FROM EMP;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

50

Page 51: Oracle Queries

ORACLESELECT COUNT ( * ) FROM EMP;SELECT COUNT ( DISTINCT DEPTNO ) FROM EMP;

DUAL TABLE:

DUAL IS A SYTEM TABLE.

WHICH WILL HAVE ONE COLUMN AND ONE ROW.

SELECT * FROM DUAL;

SELECT SYSDATE FROM DUAL;

SELECT 20*20 FROM DUAL;

SELECT USER FROM DUAL;

SELECT USERID FROM DUAL;

1* SELECT MAX(SAL), MIN(SAL), AVG(SAL) , SUM(SAL) FROM EMPSQL> /

MAX(SAL) MIN(SAL) AVG(SAL) SUM(SAL) ---------- ---------- ---------- ---------- 5000 800 2073.21429 29025

SQL> SELECT JOB FROM EMP;

JOB --------- CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK

14 rows selected.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

51

Page 52: Oracle Queries

ORACLESQL> SELECT DISTINCT(JOB) FROM EMP;

JOB --------- ANALYST CLERK MANAGER PRESIDENT SALESMAN

SQL> SELECT COUNT(*) FROM EMP;

COUNT(*) ---------- 14

SQL> SELECT COUNT(DISTINCT(JOB)) FROM EMP;

COUNT(DISTINCT(JOB)) -------------------- 5

SQL> SELECT SYSDATE FROM DUAL;

SYSDATE --------- 19-JUL-05

SQL> SELECT SYSTIMESTAMP FROM DUAL;

SYSTIMESTAMP --------------------------------------------------------------------------- 19-JUL-05 12.08.11.000001 AM +05:30

SQL> SELECT USER FROM DUAL;

USER ------------------------------ SCOTT

SQL> SELECT UID FROM DUAL;

UID ---------- 66

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

52

Page 53: Oracle Queries

ORACLESQL> SELECT * FROM DUAL;

D - X

SQL> DESC DUAL; Name Null? Type ----------------------------------------------------- -------- ------------------------------------ DUMMY VARCHAR2(1)

DUAL IS A SYSTEM TABLE.

SQL> SELECT 23* 23 FROM DUAL;

23*23 ---------- 529

SQL> SELECT 2*2 FROM DUAL;

2*2 ---------- 4

GROUP FUNCTIONS:

AVG , MAX , MIN , SUM , COUNT , STDDEV( STANDERD DEVIATION ) , VARIANCE .

COLUMN HEADING DEFAULTS IN SQL* PLUS:

DEFAULT JUSTIFICATION:

----LEFT : DATE AND CHARACTER DATA

----RIGHT : NUMERIC DATA.

DEFAULT DISPLAY :UPPERCASE

ARITHMETIC EXPRESSIONS:

+ ADD-- SUBTRACT

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

53

Page 54: Oracle Queries

ORACLE* MULTIPLY/ DIVIDE

SELECT ENAME,SAL,SAL+300,SAL-300,SAL*300,SAL/300 FROM EMP;

SQL> SELECT SAL,SAL+300,SAL-300,SAL*300,SAL/300 FROM EMP;

SAL SAL+300 SAL-300 SAL*300 SAL/300 ---------- ---------- ---------- ---------- ---------- 800 1100 500 240000 2.66666667 1600 1900 1300 480000 5.33333333 1250 1550 950 375000 4.16666667 2975 3275 2675 892500 9.91666667 1250 1550 950 375000 4.16666667 2850 3150 2550 855000 9.5 2450 2750 2150 735000 8.16666667 3000 3300 2700 900000 10 5000 5300 4700 1500000 16.6666667 1500 1800 1200 450000 5 1100 1400 800 330000 3.66666667 950 1250 650 285000 3.16666667 3000 3300 2700 900000 10 1300 1600 1000 390000 4.33333333

14 rows selected.

OPERATOR PRECEDENCE:

* / + -

MULTIPLICATION AND DIVISION TAKE PRIORITY OVER ADDITION AND SUBTRACTION.

OPERATORS OF THE SAME PRIORITY ARE EVALUATED FROM LEFT TO RIGHT.

PARENTHESESES ARE USED TO FORCE PRIORITIZED EVALUTION.

NULL FUNCTION:

A NULL IS A VALUE THIS IS UNAVAILABLE,UNASSIGNED,UNKNOWN OR INAPPLICABLE.

A NULL IS NOT THE SAME AS ZERO OR A BLANKSPACE.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

54

Page 55: Oracle Queries

ORACLEARITHMETIC EXPRESSIONS CONTAINING A NULL VALUE EVALUATE TO NULL;

SQL> SELECT * FROM EMP WHERE MGR IS NULL;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7839 KING PRESIDENT 17-NOV-81 5000

10

1* SELECT * FROM EMP WHERE MGR IS NOT NULLSQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

13 rows selected.

ANNAUAL SALARY:

HERE 12 IS FIRST MULTIPLIED BY 100 THEN IT IS ADDED TO SAL THAT IS WRONG.

SQL> SELECT SAL,SAL+100 *12 FROM EMP;

SAL SAL+100*12 ---------- ---------- 800 2000

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

55

Page 56: Oracle Queries

ORACLE 1600 2800 1250 2450 2975 4175 1250 2450 2850 4050 2450 3650 3000 4200 5000 6200 1500 2700 1100 2300 950 2150 3000 4200 1300 2500

14 rows selected.

HERE BY PUTTING PARANTHESIS THAT OUT IS CORRECT.

1* SELECT SAL,(SAL+100) *12 FROM EMP

SQL> /

SAL (SAL+100)*12 ---------- ------------ 800 10800 1600 20400 1250 16200 2975 36900 1250 16200 2850 35400 2450 30600 3000 37200 5000 61200 1500 19200 1100 14400 950 12600 3000 37200 1300 16800

14 rows selected.

SQL> SELECT ENAME,SAL,SAL+COMM FROM EMP;

ENAME SAL SAL+COMM ---------- ---------- ---------- SMITH 800 ALLEN 1600 1900 WARD 1250 1750

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

56

Page 57: Oracle Queries

ORACLEJONES 2975 MARTIN 1250 2650 BLAKE 2850 CLARK 2450 SCOTT 3000 KING 5000 TURNER 1500 1500 ADAMS 1100 JAMES 950 FORD 3000 MILLER 1300

14 rows selected.

HERE THE SAL + COMM IS NULL FOR THE EMPLOYEES WHO HAS COMM IS NULL.

THAT MEANS WHEN EVER WE DO ANY ADDITION WITH NULL WHOLE RESULT IS NULL.

TO AVOID THAT WE USE NULL.

SQL> SELECT ENAME,SAL,COMM,SAL+COMM FROM EMP;ENAME SAL COMM SAL+COMM ---------- ---------- ---------- ---------- SMITH 800 ALLEN 1600 300 1900 WARD 1250 500 1750 JONES 2975 MARTIN 1250 1400 2650 BLAKE 2850 CLARK 2450 SCOTT 3000 KING 5000 TURNER 1500 0 1500 ADAMS 1100 JAMES 950 FORD 3000 MILLER 1300

14 rows selected.

HERE WHENEVER WE USED NVL IT SUBSTITUED ‘0’ IN PLACE OF NULL VALUES. THEN ADDTION WITH 0 RESULTS CORRECT VALUE.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

57

Page 58: Oracle Queries

ORACLESQL> SELECT ENAME,SAL,NVL(COMM,0),SAL+NVL(COMM,0) FROM EMP;

ENAME SAL NVL(COMM,0) SAL+NVL(COMM,0) ---------- ---------- ----------- --------------- SMITH 800 0 800 ALLEN 1600 300 1900 WARD 1250 500 1750 JONES 2975 0 2975 MARTIN 1250 1400 2650 BLAKE 2850 0 2850 CLARK 2450 0 2450 SCOTT 3000 0 3000 KING 5000 0 5000 TURNER 1500 0 1500 ADAMS 1100 0 1100 JAMES 950 0 950 FORD 3000 0 3000 MILLER 1300 0 1300

14 rows selected.

HERE BECAUSE OF ORDER OF PRECEDENCE THE CONCEPT OF ANNUAL SALARY WAS CAME WRONG. HERE FIRST 12 IS MULTIPLIED BY COMM THAT IS WHY FOR FIRST RWO THE ANNUAL SALARY IS 800 ONLY.

1* SELECT ENAME,SAL,NVL(COMM,0),SAL+NVL(COMM,0)*12 FROM EMPSQL> /

ENAME SAL NVL(COMM,0) SAL+NVL(COMM,0)*12 ---------- ---------- ----------- ------------------ SMITH 800 0 800 ALLEN 1600 300 5200 WARD 1250 500 7250 JONES 2975 0 2975 MARTIN 1250 1400 18050 BLAKE 2850 0 2850 CLARK 2450 0 2450 SCOTT 3000 0 3000 KING 5000 0 5000 TURNER 1500 0 1500 ADAMS 1100 0 1100 JAMES 950 0 950 FORD 3000 0 3000 MILLER 1300 0 1300

14 rows selected.

WE HAVE TO KEEP PARANTHESIS FOR CORRECT ANNUAL SALARY.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

58

Page 59: Oracle Queries

ORACLE

1* SELECT ENAME,SAL,NVL(COMM,0),(SAL+NVL(COMM,0))*12 FROM EMPSQL> /

ENAME SAL NVL(COMM,0) (SAL+NVL(COMM,0))*12 ---------- ---------- ----------- -------------------- SMITH 800 0 9600 ALLEN 1600 300 22800 WARD 1250 500 21000 JONES 2975 0 35700 MARTIN 1250 1400 31800 BLAKE 2850 0 34200 CLARK 2450 0 29400 SCOTT 3000 0 36000 KING 5000 0 60000 TURNER 1500 0 18000 ADAMS 1100 0 13200 JAMES 950 0 11400 FORD 3000 0 36000 MILLER 1300 0 15600

14 rows selected.

IN THE ABOVE OUTPUT THE HEADING FOR ANNUAL SALARY COLUMN IS NOT MEANING FULL.TO ACHIVE COEERCT OUTPUT WE GO FOR COLUMN ALIASING.

COLUMN ALIASES:

SELECT ENAME AS NAME ,SAL SALARY FROM EMP;

SELECT ENAME “NAME”, SAL*12 “ANNUAL SALARY” FROM EMP;

SELECT ENAME NAME FROM EMP;

1* SELECT ENAME,SAL,NVL(COMM,0),(SAL+NVL(COMM,0))*12 "ANNUAL SALARY" FROM EMPSQL> /

ENAME SAL NVL(COMM,0) ANNUAL SALARY ---------- ---------- ----------- ------------- SMITH 800 0 9600 ALLEN 1600 300 22800 WARD 1250 500 21000 JONES 2975 0 35700 MARTIN 1250 1400 31800 BLAKE 2850 0 34200

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

59

Page 60: Oracle Queries

ORACLECLARK 2450 0 29400 SCOTT 3000 0 36000 KING 5000 0 60000 TURNER 1500 0 18000 ADAMS 1100 0 13200 JAMES 950 0 11400 FORD 3000 0 36000 MILLER 1300 0 15600

14 rows selected.SQL> SELECT ENAME,SAL AS SALARY FROM EMP;

ENAME SALARY ---------- ---------- SMITH 800 ALLEN 1600 WARD 1250 JONES 2975 MARTIN 1250 BLAKE 2850 CLARK 2450 SCOTT 3000 KING 5000 TURNER 1500 ADAMS 1100 JAMES 950 FORD 3000 MILLER 1300

14 rows selected.

SQL> SELECT ENAME,SAL SALARY FROM EMP;

ENAME SALARY ---------- ---------- SMITH 800 ALLEN 1600 WARD 1250 JONES 2975 MARTIN 1250 BLAKE 2850 CLARK 2450 SCOTT 3000 KING 5000 TURNER 1500 ADAMS 1100 JAMES 950 FORD 3000 MILLER 1300

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

60

Page 61: Oracle Queries

ORACLE14 rows selected.

HERE WE HAD GIVEN GAP FOR COLUMN ALIASING. THAT IS WRONG. FOR CORRECT OUTPUTWE HAVE TO GIVE “ “ FOR COLUMN ALIASING.

SQL> SELECT ENAME,SAL SALARY OF EMPLOYEE FROM EMP;

SELECT ENAME,SAL SALARY OF EMPLOYEE FROM EMP *ERROR at line 1:ORA-00923: FROM keyword not found where expected

1* SELECT ENAME,SAL "SALARY OF EMPLOYEE" FROM EMPSQL> /

ENAME SALARY OF EMPLOYEE ---------- ------------------ SMITH 800 ALLEN 1600 WARD 1250 JONES 2975 MARTIN 1250 BLAKE 2850 CLARK 2450 SCOTT 3000 KING 5000 TURNER 1500 ADAMS 1100 JAMES 950 FORD 3000 MILLER 1300

14 rows selected.

CONCATINATION OPERATOR:

SELECT ENAME||JOB AS “EMPLOYEES” FROM EMP;

SELECT ENAME || ‘IS A ’ || JOB AS “EMPLOYEE DETAILS” FROM EMP;

SQL> SELECT ENAME,JOB FROM EMP;

ENAME JOB ---------- ---------

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

61

Page 62: Oracle Queries

ORACLESMITH CLERK ALLEN SALESMAN WARD SALESMAN JONES MANAGER MARTIN SALESMAN BLAKE MANAGER CLARK MANAGER SCOTT ANALYST KING PRESIDENT TURNER SALESMAN ADAMS CLERK JAMES CLERK FORD ANALYST MILLER CLERK

14 rows selected.

SQL> SELECT ENAME||JOB FROM EMP;ENAME||JOB ------------------- SMITHCLERK ALLENSALESMAN WARDSALESMAN JONESMANAGER MARTINSALESMAN BLAKEMANAGER CLARKMANAGER SCOTTANALYST KINGPRESIDENT TURNERSALESMAN ADAMSCLERK JAMESCLERK FORDANALYST MILLERCLERK

14 rows selected.

1* SELECT ENAME||' HAS A '||JOB FROM EMPSQL> /

ENAME||'HASA'||JOB -------------------------- SMITH HAS A CLERK ALLEN HAS A SALESMAN WARD HAS A SALESMAN JONES HAS A MANAGER

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

62

Page 63: Oracle Queries

ORACLEMARTIN HAS A SALESMAN BLAKE HAS A MANAGER CLARK HAS A MANAGER SCOTT HAS A ANALYST KING HAS A PRESIDENT TURNER HAS A SALESMAN ADAMS HAS A CLERK JAMES HAS A CLERK FORD HAS A ANALYST MILLER HAS A CLERK

14 rows selected.

1* SELECT ENAME||' JOB NAME IS '||JOB FROM EMPSQL> /

ENAME||'JOBNAMEIS'||JOB -------------------------------- SMITH JOB NAME IS CLERK ALLEN JOB NAME IS SALESMAN WARD JOB NAME IS SALESMAN JONES JOB NAME IS MANAGER MARTIN JOB NAME IS SALESMAN BLAKE JOB NAME IS MANAGER CLARK JOB NAME IS MANAGER SCOTT JOB NAME IS ANALYST KING JOB NAME IS PRESIDENT TURNER JOB NAME IS SALESMAN ADAMS JOB NAME IS CLERK JAMES JOB NAME IS CLERK FORD JOB NAME IS ANALYST MILLER JOB NAME IS CLERK

14 rows selected.COMPARISON OPERATORS:

= EQUAL TO

> GREATER THAN

>= GREATER THAN OR EQUAL TO

< LESS THAN

<= LESS THAN OR EQUAL TO

<> NOT EQUAL TO

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

63

Page 64: Oracle Queries

ORACLESELECT * FROM EMP WHERE SAL<=2000;

SELECT * FROM EMP WHERE SAL>=2000;

SELECT * FROM EMP WHERE SAL <> 2000;

SELECT ENAME,SAL FROM EMP WHERE SAL BETWEEN 1000 AND 1500;

SQL> SELECT * FROM EMP WHERE SAL < 1000;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7900 JAMES CLERK 7698 03-DEC-81 950 30

1* SELECT * FROM EMP WHERE SAL <= 1000 2 /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7900 JAMES CLERK 7698 03-DEC-81 950 30

1* SELECT * FROM EMP WHERE SAL > 1000SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

12 rows selected.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

64

Page 65: Oracle Queries

ORACLE 1* SELECT * FROM EMP WHERE SAL >= 1000SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

12 rows selected.

1* SELECT * FROM EMP WHERE SAL <> 1000SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

14 rows selected.

1* SELECT * FROM EMP WHERE SAL =950SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7900 JAMES CLERK 7698 03-DEC-81 950 30

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

65

Page 66: Oracle Queries

ORACLESQL> SELECT * FROM EMP WHERE SAL BETWEEN 1000 AND 2000;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

6 rows selected.

HERE BOTH 1000 AND 2000 INCLUSIVE IN THE OUTPUT IF THEY EXIST IN THE OUPUT.

IN OPERATOR:

IF YOU WANT TO SELECT INFO FOR MORE THAN ONE EMPLOYEE YOU CANNOT USE THE FOLLOWING QUERY:

SELECT * FROM EMP WHERE EMPNO=7369,7788,7566;

THE ABOVE QUERY WON’T WORK.TO SLOVE THE ABOVE PROBLEM WE HAVE TO WRITE QUERY LIKE BELOW:

SELECT EMPNO,ENAME,SAL,MGR FROM EMP WHERE MGR IN (7902,7566,7788);

THE ABOVE QUERY WILL GIVE THE INFO OF THREE EMPLOYEES.

SQL> SELECT * FROM EMP WHERE EMPNO=7788;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7788 SCOTT ANALYST 7566 19-APR-87 3000 20

1* SELECT * FROM EMP WHERE EMPNO=7788,7369,7566 2 /SELECT * FROM EMP WHERE EMPNO=7788,7369,7566 *

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

66

Page 67: Oracle Queries

ORACLEERROR at line 1:ORA-00933: SQL command not properly ended

1* SELECT * FROM EMP WHERE EMPNO IN (7788,7369,7566) 2 /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7566 JONES MANAGER 7839 02-APR-81 2975 20 7369 SMITH CLERK 7902 17-DEC-80 800 20 7788 SCOTT ANALYST 7566 19-APR-87 3000 20

NOT IN OPERATOR:

IF YOU DON’T WANT TO SEE THOSE EMPLOYEES INFO,YOU KEEP THEM IN NOT IN CLAUSE.

SELECT EMPNO,ENAME,SAL,MGR FROM EMP WHERE MGR NOT IN (7902,7566,7788);

1* SELECT * FROM EMP WHERE EMPNO NOT IN (7788,7369,7566)SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

11 rows selected.

AND OPERATOR:

REQUIRES BOTH CONDITIONS TO BE TRUE:

IN ADD OPERATOR IF BOTH CONDITIONS ARE TRUE THEN ONLY RESULT COMES.

HERE WE GET INFO ABOUT CLERKS AND WHOSE SALARY >=THAN 1100;

SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE SAL>1100 AND JOB=’CLERK’;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

67

Page 68: Oracle Queries

ORACLESQL> SELECT * FROM EMP 2 WHERE SAL > 1000 AND JOB = 'CLERK';

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

AND TRUE FALSETRUE TRUE FALSEFALSE FALSE FALSEOR OPERATOR:

REQUIRES EITHER CONDITION TO BE TRUE.

IN OR OPERATOR IF ONE CONDITION IS TRUE THEN ALSO RESULT COMES.

HERE WE GET INFO ABOUT CLERKS AND ALL THE INFO ABOUT EMPLOYEES WHOSE SALARY >=1100.

SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE SAL>=1100 OR JOB=’CLERK’;

1 SELECT * FROM EMP 2* WHERE SAL > 1000 OR JOB = 'CLERK' 3 /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

14 rows selected.OR TRUE FALSETRUE TRUE TRUEFALSE TRUE FALSE

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

68

Page 69: Oracle Queries

ORACLE

SORTING BY COLUMN ALIAS:

TILL NOW WE HAVE SORTED OUTPUT ASC OR DESC ACCORDING TO COLUMN THAT ARE PRESENT IN THE TABLE.

NOW WE CAN SORT THE OUTPUT IN EITHER WAY ACCORDING TO COLUMN ALIASES.

SELECT EMPNO,ENAME,SAL*12 ANNSAL FROM EMP ORDER BY ANNSAL;

SQL> SELECT EMPNO,ENAME,JOB,SAL,(SAL+NVL(COMM,0)*12) ANSAL FROM EMP;

EMPNO ENAME JOB SAL ANSAL ---------- ---------- --------- ---------- ---------- 7369 SMITH CLERK 800 800 7499 ALLEN SALESMAN 1600 5200 7521 WARD SALESMAN 1250 7250 7566 JONES MANAGER 2975 2975 7654 MARTIN SALESMAN 1250 18050 7698 BLAKE MANAGER 2850 2850 7782 CLARK MANAGER 2450 2450 7788 SCOTT ANALYST 3000 3000 7839 KING PRESIDENT 5000 5000 7844 TURNER SALESMAN 1500 1500 7876 ADAMS CLERK 1100 1100 7900 JAMES CLERK 950 950 7902 FORD ANALYST 3000 3000 7934 MILLER CLERK 1300 1300

14 rows selected.

1* SELECT EMPNO,ENAME,JOB,SAL,(SAL+NVL(COMM,0)*12) ANSAL FROM EMP ORDER BY ANSALSQL> /

EMPNO ENAME JOB SAL ANSAL ---------- ---------- --------- ---------- ---------- 7369 SMITH CLERK 800 800 7900 JAMES CLERK 950 950 7876 ADAMS CLERK 1100 1100 7934 MILLER CLERK 1300 1300 7844 TURNER SALESMAN 1500 1500 7782 CLARK MANAGER 2450 2450 7698 BLAKE MANAGER 2850 2850 7566 JONES MANAGER 2975 2975 7788 SCOTT ANALYST 3000 3000

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

69

Page 70: Oracle Queries

ORACLE 7902 FORD ANALYST 3000 3000 7839 KING PRESIDENT 5000 5000 7499 ALLEN SALESMAN 1600 5200 7521 WARD SALESMAN 1250 7250 7654 MARTIN SALESMAN 1250 18050

14 rows selected.

1* SELECT EMPNO,ENAME,JOB,SAL,(SAL+NVL(COMM,0)*12) ANSAL FROM EMP ORDER BY ANSAL DESCSQL> /

EMPNO ENAME JOB SAL ANSAL ---------- ---------- --------- ---------- ---------- 7654 MARTIN SALESMAN 1250 18050 7521 WARD SALESMAN 1250 7250 7499 ALLEN SALESMAN 1600 5200 7839 KING PRESIDENT 5000 5000 7788 SCOTT ANALYST 3000 3000 7902 FORD ANALYST 3000 3000 7566 JONES MANAGER 2975 2975 7698 BLAKE MANAGER 2850 2850 7782 CLARK MANAGER 2450 2450 7844 TURNER SALESMAN 1500 1500 7934 MILLER CLERK 1300 1300 7876 ADAMS CLERK 1100 1100 7900 JAMES CLERK 950 950 7369 SMITH CLERK 800 800

14 rows selected.

WHEN EVER IN INTERVIEW WHEN THEY ASK ABOUT JOINS U HAVE TO EXPLAIN ANSWER WITH EMP,DEPT,SALGRADE TABLES.

IT IS VERY DIFFICULT IF YOU TRY TO ANSWER WITH OTHER TABLES.

JOINS:

USE A JOIN TO QUERY DATA FROM MORE THAN ONE TABLE.WRITE THE JOIN CONDITION IN THE WHERE CLAUSE.PREFIX THE COLUMN NAME WITH THE TABLE NAME WHEN THE SAME COLUMN NAME APPEARS IN MORE THAN ONE TABLE.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

70

Page 71: Oracle Queries

ORACLETHERE ARE FIVE TYPES OF JOINS EXISTS IN ORACLE.

CARTESIAN PRODUCT

EQUI-JOIN

NON-EQUI JOIN

OUTER-JOIN.

SELF-JOIN.

CARTESIAN PRODUCT:

CARTESIAN PRODUCT IS FORMED WHEN A JOIN CONDITION IS OMITTED.TO AVOID A CARTESIAN PRODUCT, ALWAYS INCLUDE A VALID CONDITION IN A WHERE CLAUSE.

HERE FIRST TABLE EMP ROWS COMPLETELY MULTIPLIED BY FIRST ROW IN SECOND TABLE DEPT AND SO ON

SQL> SELECT EMPNO,ENAME,EMP.DEPTNO,DNAME,LOC FROM EMP,DEPT;

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7369 SMITH 20 ACCOUNTING NEW YORK 7499 ALLEN 30 ACCOUNTING NEW YORK 7521 WARD 30 ACCOUNTING NEW YORK 7566 JONES 20 ACCOUNTING NEW YORK 7654 MARTIN 30 ACCOUNTING NEW YORK 7698 BLAKE 30 ACCOUNTING NEW YORK 7782 CLARK 10 ACCOUNTING NEW YORK 7788 SCOTT 20 ACCOUNTING NEW YORK 7839 KING 10 ACCOUNTING NEW YORK 7844 TURNER 30 ACCOUNTING NEW YORK 7876 ADAMS 20 ACCOUNTING NEW YORK 7900 JAMES 30 ACCOUNTING NEW YORK 7902 FORD 20 ACCOUNTING NEW YORK 7934 MILLER 10 ACCOUNTING NEW YORK 7369 SMITH 20 RESEARCH DALLAS 7499 ALLEN 30 RESEARCH DALLAS 7521 WARD 30 RESEARCH DALLAS 7566 JONES 20 RESEARCH DALLAS 7654 MARTIN 30 RESEARCH DALLAS 7698 BLAKE 30 RESEARCH DALLAS 7782 CLARK 10 RESEARCH DALLAS 7788 SCOTT 20 RESEARCH DALLAS 7839 KING 10 RESEARCH DALLAS 7844 TURNER 30 RESEARCH DALLAS

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

71

Page 72: Oracle Queries

ORACLE 7876 ADAMS 20 RESEARCH DALLAS 7900 JAMES 30 RESEARCH DALLAS 7902 FORD 20 RESEARCH DALLAS

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7934 MILLER 10 RESEARCH DALLAS 7369 SMITH 20 SALES CHICAGO 7499 ALLEN 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 7566 JONES 20 SALES CHICAGO 7654 MARTIN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7782 CLARK 10 SALES CHICAGO 7788 SCOTT 20 SALES CHICAGO 7839 KING 10 SALES CHICAGO 7844 TURNER 30 SALES CHICAGO 7876 ADAMS 20 SALES CHICAGO 7900 JAMES 30 SALES CHICAGO 7902 FORD 20 SALES CHICAGO 7934 MILLER 10 SALES CHICAGO 7369 SMITH 20 OPERATIONS BOSTON 7499 ALLEN 30 OPERATIONS BOSTON 7521 WARD 30 OPERATIONS BOSTON 7566 JONES 20 OPERATIONS BOSTON 7654 MARTIN 30 OPERATIONS BOSTON 7698 BLAKE 30 OPERATIONS BOSTON 7782 CLARK 10 OPERATIONS BOSTON 7788 SCOTT 20 OPERATIONS BOSTON 7839 KING 10 OPERATIONS BOSTON 7844 TURNER 30 OPERATIONS BOSTON 7876 ADAMS 20 OPERATIONS BOSTON 7900 JAMES 30 OPERATIONS BOSTON

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7902 FORD 20 OPERATIONS BOSTON 7934 MILLER 10 OPERATIONS BOSTON

56 rows selected.

HERE WE GET NO OF ROWS IN FIRST TABLE * NO OF ROWS IN SECOND TABLE AS OUTPUT.

WHEN EVER IN INTERVIEW IF THEY ASK ABOUT EXPLAIN OUTPUT U HAVE TO EXPLAIN LIKE THIS:

HERE FIRST TABLE WHOLE ROWS ARE MULTIPLIED BY FIRST ROW N SECOND ROW AND AGAIN FIRST TABLE WHOLE ROWS ARE THEN MULTIPLIED BY SECOND TABLE SECOND ROW AND SO ON.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

72

Page 73: Oracle Queries

ORACLEEQUI-JOIN:SIMPLE JOINS OR INNER JOINS:

THE RELATIONSHIP BETWEEN EMP AND DEPT TABLE IS A EQUI-JOIN.THAT IS VALUES IN DEPTNO COLUMN ON BOTH TABLES ARE EQUAL.

HERE WE GET INFO THAT IS COMMON IN BOTH TABLES.

SQL> SELECT EMPNO,ENAME,DEPTNO,DNAME,LOC FROM EMP,DEPT 2 WHERE EMP.DEPTNO=DEPT.DEPTNO;SELECT EMPNO,ENAME,DEPTNO,DNAME,LOC FROM EMP,DEPT *ERROR at line 1:ORA-00918: column ambiguously defined

TO SLOVE THAT WE HAVE KEEP DEPT OR EMP BEFORE DEPTNO,BCOZ BOTH TABLES HAVE DEPTNO COLUMN.

SQL> SELECT EMPNO,ENAME,EMP.DEPTNO,DNAME,LOC FROM EMP,DEPT 2 WHERE EMP.DEPTNO=DEPT.DEPTNO;

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7369 SMITH 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 7566 JONES 20 RESEARCH DALLAS 7654 MARTIN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7782 CLARK 10 ACCOUNTING NEW YORK 7788 SCOTT 20 RESEARCH DALLAS 7839 KING 10 ACCOUNTING NEW YORK 7844 TURNER 30 SALES CHICAGO 7876 ADAMS 20 RESEARCH DALLAS 7900 JAMES 30 SALES CHICAGO 7902 FORD 20 RESEARCH DALLAS 7934 MILLER 10 ACCOUNTING NEW YORK

14 rows selected.

TABLE NAME ALIASING:

SELECT EMPNO,ENAME,SAL,E.DEPTNO,DNAME,LOC

FROM EMP E,DEPT D

WHERE E.DEPTNO=D.DEPTNO;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

73

Page 74: Oracle Queries

ORACLE 1 SELECT EMPNO,ENAME,E.DEPTNO,DNAME,LOC FROM EMP E,DEPT D 2* WHERE E.DEPTNO=D.DEPTNOSQL> /

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7369 SMITH 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 7566 JONES 20 RESEARCH DALLAS 7654 MARTIN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7782 CLARK 10 ACCOUNTING NEW YORK 7788 SCOTT 20 RESEARCH DALLAS 7839 KING 10 ACCOUNTING NEW YORK 7844 TURNER 30 SALES CHICAGO 7876 ADAMS 20 RESEARCH DALLAS 7900 JAMES 30 SALES CHICAGO 7902 FORD 20 RESEARCH DALLAS 7934 MILLER 10 ACCOUNTING NEW YORK 14 rows selected.

NON-EQUI JOIN:

THE RELATIONSHIP BETWEEN THE EMP TABLE AND THE SALGRADE TABLE IS A NON-EQUIJOIN,MEANING THAT NO COLUMN IN THE EMP TABLE CORRESPONDS DIRECTLY TO A COLUMN IN THE SALGRADE TABLE.

SELECT ENAME,SAL,GRADE

FROM EMP,SALGRADE

WHERE SAL BETWEEN LOSAL AND HISAL.

SELECT ENAME,SAL,GRADE

FROM EMP E ,SALGRADE S

WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;

SQL> SELECT EMPNO,ENAME,SAL,GRADE FROM EMP,SALGRADE 2 WHERE SAL BETWEEN LOSAL AND HISAL;

EMPNO ENAME SAL GRADE ---------- ---------- ---------- ---------- 7369 SMITH 800 1

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

74

Page 75: Oracle Queries

ORACLE 7876 ADAMS 1100 1 7900 JAMES 950 1 7521 WARD 1250 2 7654 MARTIN 1250 2 7934 MILLER 1300 2 7499 ALLEN 1600 3 7844 TURNER 1500 3 7566 JONES 2975 4 7698 BLAKE 2850 4 7782 CLARK 2450 4 7788 SCOTT 3000 4 7902 FORD 3000 4 7839 KING 5000 5

14 rows selected.

OUTER-JOIN:

WE USE AN OUTER JOIN TO ALSO SEE ROWS THAT DO NOT USUALLY MEET THE JOIN CONDITION.THE OUTER JOIN OPERATOR IS THE PLUS SIGN(+).

HERE WE GET EXTRA INFORMATION IN DEPT TABLE.

THIS IS RIGHT OUTER JOIN.

SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME

FROM EMP E,DEPT D

WHERE E.DEPTNO(+) = D.DEPTNO

HERE WE GET EXTRA INFORMATION IN EMP TABLE.

THIS LEFT OUTER JOIN.

SELECT E.EMPNO,E.ENAME,E.DEPTNO,D.DNAME

FROM EMP E,DEPT D

WHERE E.DEPTNO = D.DEPTNO(+)

YOU CANNOT PLACE (+) SIGN ON BOTH SIDES.

THIS IS RIGHT OUTER JOIN.

SQL> SELECT EMPNO,ENAME,EMP.DEPTNO,DNAME,LOC FROM EMP,DEPT

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

75

Page 76: Oracle Queries

ORACLE 2 WHERE EMP.DEPTNO(+) = DEPT.DEPTNO;

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7782 CLARK 10 ACCOUNTING NEW YORK 7839 KING 10 ACCOUNTING NEW YORK 7934 MILLER 10 ACCOUNTING NEW YORK 7369 SMITH 20 RESEARCH DALLAS 7876 ADAMS 20 RESEARCH DALLAS 7902 FORD 20 RESEARCH DALLAS 7788 SCOTT 20 RESEARCH DALLAS 7566 JONES 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7654 MARTIN 30 SALES CHICAGO 7900 JAMES 30 SALES CHICAGO 7844 TURNER 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO OPERATIONS BOSTON

15 rows selected.

1 SELECT EMPNO,ENAME,DEPT.DEPTNO,DNAME,LOC FROM EMP,DEPT 2* WHERE EMP.DEPTNO(+) = DEPT.DEPTNOSQL> /

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7782 CLARK 10 ACCOUNTING NEW YORK 7839 KING 10 ACCOUNTING NEW YORK 7934 MILLER 10 ACCOUNTING NEW YORK 7369 SMITH 20 RESEARCH DALLAS 7876 ADAMS 20 RESEARCH DALLAS 7902 FORD 20 RESEARCH DALLAS 7788 SCOTT 20 RESEARCH DALLAS 7566 JONES 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7654 MARTIN 30 SALES CHICAGO 7900 JAMES 30 SALES CHICAGO 7844 TURNER 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 40 OPERATIONS BOSTON

15 rows selected.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

76

Page 77: Oracle Queries

ORACLETHIS IS LEFT OUTER JOIN.

1 SELECT EMPNO,ENAME,DEPT.DEPTNO,DNAME,LOC FROM EMP,DEPT 2* WHERE EMP.DEPTNO=DEPT.DEPTNO(+)SQL> /

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7369 SMITH 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 7566 JONES 20 RESEARCH DALLAS 7654 MARTIN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7782 CLARK 10 ACCOUNTING NEW YORK 7788 SCOTT 20 RESEARCH DALLAS 7839 KING 10 ACCOUNTING NEW YORK 7844 TURNER 30 SALES CHICAGO 7876 ADAMS 20 RESEARCH DALLAS 7900 JAMES 30 SALES CHICAGO 7902 FORD 20 RESEARCH DALLAS 7934 MILLER 10 ACCOUNTING NEW YORK

14 rows selected.

HERE WE DON'T HAVE ANY EXTRA INFO IN EMP TABLE BECAUSE OF FOREIGN KEY RELATION.

THAT IS WE SHOULD NOT ENTER OTHER DEPARTMENT NUMBERS THAT ARE NOT PRESENT IN THE DEPT TABLE

SQL> CREATE TABLE EMP1 2 AS 3 SELECT * FROM EMP;

Table created.

SQL> CREATE TABLE DEPT1 2 AS 3 SELECT * FROM DEPT;

Table created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

77

Page 78: Oracle Queries

ORACLEHERE BOTH THE TABLES HAVE NO RELATION WITH FOREIGN KEY AND PRIMARY KEY.

HERE I AM INSERTING IN TO EMP1 TABLE DEPARTMENT 50,60,70 THAT ARE NOT THERE IN DEPT1 TABLE

1 INSERT INTO EMP1 2 VALUES 3* (2,'KUMAR','MANAGER',7369,'01-JAN-90',1000,100,60)SQL> /

1 row created.

1 INSERT INTO EMP1 2 VALUES 3* (3,'GAYATRI','MANAGER',7369,'01-JAN-90',1000,100,70)SQL> /

1 row created.

SQL> COMMIT;

Commit complete.

SQL> SELECT EMPNO,ENAME,EMP1.DEPTNO,DNAME,LOC FROM EMP1,DEPT1 2 WHERE EMP1.DEPTNO=DEPT1.DEPTNO(+);

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7782 CLARK 10 ACCOUNTING NEW YORK 7839 KING 10 ACCOUNTING NEW YORK 7934 MILLER 10 ACCOUNTING NEW YORK 7369 SMITH 20 RESEARCH DALLAS 7876 ADAMS 20 RESEARCH DALLAS 7902 FORD 20 RESEARCH DALLAS 7788 SCOTT 20 RESEARCH DALLAS 7566 JONES 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7654 MARTIN 30 SALES CHICAGO 7900 JAMES 30 SALES CHICAGO 7844 TURNER 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

78

Page 79: Oracle Queries

ORACLE 1 PAVAN 50 2 KUMAR 60 3 GAYATRI 70

17 rows selected.

1 SELECT EMPNO,ENAME,EMP1.DEPTNO,DNAME,LOC FROM EMP1,DEPT1 2* WHERE EMP1.DEPTNO(+)=DEPT1.DEPTNOSQL> /

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7782 CLARK 10 ACCOUNTING NEW YORK 7839 KING 10 ACCOUNTING NEW YORK 7934 MILLER 10 ACCOUNTING NEW YORK 7369 SMITH 20 RESEARCH DALLAS 7876 ADAMS 20 RESEARCH DALLAS 7902 FORD 20 RESEARCH DALLAS 7788 SCOTT 20 RESEARCH DALLAS 7566 JONES 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7654 MARTIN 30 SALES CHICAGO 7900 JAMES 30 SALES CHICAGO 7844 TURNER 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO OPERATIONS BOSTON

15 rows selected.

1 SELECT EMPNO,ENAME,DEPT1.DEPTNO,DNAME,LOC FROM EMP1,DEPT1 2* WHERE EMP1.DEPTNO(+)=DEPT1.DEPTNOSQL> /

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7782 CLARK 10 ACCOUNTING NEW YORK 7839 KING 10 ACCOUNTING NEW YORK 7934 MILLER 10 ACCOUNTING NEW YORK 7369 SMITH 20 RESEARCH DALLAS 7876 ADAMS 20 RESEARCH DALLAS 7902 FORD 20 RESEARCH DALLAS 7788 SCOTT 20 RESEARCH DALLAS 7566 JONES 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7654 MARTIN 30 SALES CHICAGO

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

79

Page 80: Oracle Queries

ORACLE 7900 JAMES 30 SALES CHICAGO 7844 TURNER 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 40 OPERATIONS BOSTON

15 rows selected.

1 SELECT EMPNO,ENAME,DEPT1.DEPTNO,DNAME,LOC FROM EMP1,DEPT1 2* WHERE EMP1.DEPTNO(+)=DEPT1.DEPTNO(+)SQL> /WHERE EMP1.DEPTNO(+)=DEPT1.DEPTNO(+) *ERROR at line 2:ORA-01468: a predicate may reference only one outer-joined table

YOU CAN NOT KEEP + SIGN ON BOTH SIDES.

UPDATING ROWS:

UPDATE EMPSET SAL = SAL+100,DEPTNO=10,JOB=’CLERK’;

UPDATE EMPSET SAL = SAL+100,DEPTNO=10,JOB=’CLERK’;WHERE <CONDITION>

YOU CAN UPDATE MORE THAN ONE COLUMN IN A TABLE AT A TIME.

SQL> CREATE TABLE EMPLOYEE 2 AS 3 SELECT * FROM EMP;

Table created.

SQL> UPDATE EMPLOYEE 2 SET SAL =1000, JOB = 'MANAGER';

14 rows updated.

THE ABOVE STATEMENT UPDATED WHOLE TABLE.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

80

Page 81: Oracle Queries

ORACLESQL> UPDATE EMPLOYEE 2 SET SAL =2000, JOB='CLERK' 3 WHERE DEPTNO=10;

3 rows updated.

IN THE ABOVE TABLE THE ONLY DEPTNO 10 ROWS ARE UPDATED.

WHAT NOT WITH ALTER:

WE CANNOT DECREASE COLUMN SIZE IF DATA EXISTS.WE CANNOT CHANGE NAME OF TABLE USING ALTER.WE CANNOT CHANGE COLUMN NAME.

RENAMING THE TABLE :

RENAME EMP TO EMP1 ;

SQL> RENAME EMPLOYEE TO EMP_INFO;

Table renamed.

IN THE ABOVE STATEMENT EMPLOYEE WAS RENAMED TO EMP_INFO;IF YOU QUERY EMPLOYEE NOW U WILL GET ERROR.

SQL> SELECT * FROM EMPLOYEE;

SELECT * FROM EMPLOYEE *ERROR at line 1:ORA-00942: table or view does not exist

SAL> SELECT * FROM EMP_INFO;

THE ABOVE STATEMENT WILL WORK.

DEFAULT:

SQL> CREATE TABLE EMPLOYEE 2 (EMPNO NUMBER(10), 3 ENAME VARCHAR2(10), 4 DEPTNO NUMBER(10) DEFAULT 10);

Table created.

SQL> INSERT INTO EMPLOYEE 2 VALUES

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

81

Page 82: Oracle Queries

ORACLE 3 (1,'PAVAN',10);

1 row created.

1 INSERT INTO EMPLOYEE 2 VALUES 3* (2,'KUMAR',20)SQL> /

1 row created.

HERE WE HAD NOT GIVEN VALUE FOR DEPTNO.THEN IT HAD TAKEN 20 FOR DEPTNO, BCOZ WE HAD GIVEN DEFAULT 20 FOR DEPTNO.

1 INSERT INTO EMPLOYEE 2 (EMPNO,ENAME) 3 VALUES 4* (2,'KUMAR') 5 /

1 row created.

1 INSERT INTO EMPLOYEE 2 VALUES 3* (2,'KUMAR') 4 /INSERT INTO EMPLOYEE *ERROR at line 1:ORA-00947: not enough values

SQL> SELECT * FROM EMPLOYEE;

EMPNO ENAME DEPTNO ---------- ---------- ---------- 1 PAVAN 10 2 KUMAR 20 2 KUMAR 10

IN THE ABOVE QUERY WHENEVER YOU DON'T GIVE VALUE FOR DEPTNO THERE DEFAULT VALUE WILL BE TAKEN.

ADDING COMMENTS TO A TABLE .

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

82

Page 83: Oracle Queries

ORACLEYOU CAN ADD COMMENTS TO A TABLE USING THE COMMENT STATEMENT .

COMMENT ON TABLE EMP IS ‘ EMPLOYEE INFORMATION ‘ ;

IN THE REALTIME ENVIRONMENT WE WILL CREATING SO MANY TABLES THERE IT IS VERY HARD TO FIND WHICH TABLE WILL HAVE WHAT INFO AT THAT TIME WE CREATE COMMENTS ON TABLES.

NOW I AM CREATING COMMENTS ON THE TABLE EMP THAT IT SORES ALL THE EMPLOYEE INFO.

COMMENT ON TABLE EMP IS ' IT STORES EMPLOYEE INFO '

SQL> /

Comment created.

VIEWING COMMENTS:

ALL_TAB_COMMENTS,USER_TAB_COMMENTS ;

SELECT * FROM USER_TAB_COMMENTS;

1* SELECT * FROM USER_TAB_COMMENTS WHERE TABLE_NAME='EMP'SQL> /

TABLE_NAME TABLE_TYPE ------------------------------ ----------- COMMENTS ----------------------------------------------------------------------------------------------------EMP TABLE IT STORES EMPLOYEE INFO

TO SEE WHAT TABLE HAVE WHAT COMMENT WE HAVE TO QUERY USER_TAB_COMMENTS.

DROP COMMENTS:

COMMENT ON TABLE EMP IS ‘ ‘ ;TO DELETE THE COMMENT ON TABLE WE WRITE QUERY LIKE BELOW.

COMMENT ON TABLE EMP IS ' ' ;

Comment created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

83

Page 84: Oracle Queries

ORACLE 1 SELECT * FROM USER_TAB_COMMENTS 2* WHERE TABLE_NAME='EMP'

SQL> /

TABLE_NAME TABLE_TYPE ------------------------------ ----------- COMMENTS ----------------------------------------------------------------------------------------------------EMP TABLE

REMOVE THE PRIMARY KEY CONSTRAINT ON THE DEPT TABLE AND DEPTNO THE ASSOCIATED FOREIGN KEY CONSTRAINT ON THE EMP(DEPTN0) COLUMN:

WHEN EVER YOU RELATE BOTH EMP AND DEPT TABLES WITH FOREIGN KEY THEN U PRETTY WELL KNOW DEPT TABLE DEPTNO SHOULD HAVE PRIMARY KEY. NOW IF YOU WANT TO DROP PRIMARY KEY CONSTRAINT ON DEPT TABLE IT WON'T ALLOW YOU TO DROP BECAUSE IT IS CONNECTED WITH FOREIGN KEY OF EMP TABLE DEPTNO COLUMN THEN IF YOU WANT TO DROP PRIMARY KEY WHAT U SHOULD DO IS TYPE BELOW QUERY.

ALTER TABLE DEPT1DROP CONSTRAINT DEPT1_PK CASCADE;

SQL> CREATE TABLE EMP1 2 AS 3 SELECT * FROM EMP;

Table created.

SQL> CREATE TABLE DEPT1 2 AS 3 SELECT * FROM DEPT;

Table created.

SQL> ALTER TABLE DEPT1 2 ADD CONSTRAINT DEPT1_PK PRIMARY KEY(DEPTNO);

Table altered.

SQL> ALTER TABLE EMP1 2 ADD CONSTRAINT EMP1_FK FOREIGN KEY(DEPTNO) REFERENCES DEPT1(DEPTNO);

Table altered.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

84

Page 85: Oracle Queries

ORACLESQL> ALTER TABLE DEPT1 2 DROP CONSTRAINT DEPT1_PK;

DROP CONSTRAINT DEPT1_PK *ERROR at line 2:ORA-02273: this unique/primary key is referenced by some foreign keys

SQL> ALTER TABLE DEPT1 2 DROP CONSTRAINT DEPT1_PK CASCADE;

Table altered.

NOW BOTH PRIMARY KEY FOR DEPT1 AND FOREIGN KEY FOR EMP1 BOTH ARE DELETED.

IF YOU WANT TO SEE WHAT COULMNS HAVE CONSTRAINTS,WE USE BELOW TABLE.

SELECT * FROM USER_CONS_COLUMNS WHERE TABLE_NAME='DEPT1';

SET OPERATORS:

UNION ALL

UNION

INTERSECT

MINUS

SET OPERATORS ARE USED TO COMBINE INFORMATION OF SIMILAR TYPE FROM ONE OR MORE THAN ONE TABLE.DATATYPES OF CORRESPONDING COLUMNS MUST BE SAME.

UNION: ROWS OF FIRST QUERY + ROWS OF SECOND QUERY LESS DUPLICATE ROWS

LIST OF JOBS IN DEPTNO=10 AND 20 LESS DUPLICATION.

SELECT JOB FROM EMP WHERE DEPTNO=10UNIONSELECT JOB FROM EMP WHERE DEPTNO=20 ;

1 SELECT JOB FROM EMP WHERE DEPTNO=10 2 UNION

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

85

Page 86: Oracle Queries

ORACLE 3* SELECT JOB FROM EMP WHERE DEPTNO=20

SQL> /

JOB --------- ANALYST CLERK MANAGER PRESIDENT

UNION ALL: ROWS OF FIRST QUERY + ROWS OF SECOND QUERY WITH DUPLICATE ROWS:

LIST OF JOBS IN DEPTNO=10 AND 20.

SELECT JOB FROM EMP WHERE DEPTNO=10UNION ALLSELECT JOB FROM EMP WHERE DEPTNO=20 ;

SQL> SELECT JOB FROM EMP WHERE DEPTNO=10 2 UNION ALL 3 SELECT JOB FROM EMP WHERE DEPTNO=20;

JOB --------- MANAGER PRESIDENT CLERK CLERK MANAGER ANALYST CLERK ANALYST

8 rows selected.

INTERSECT : COMMON ROWS FROM 2 QUERIES.

LIST OF JOBS COMMON IN DEPTNO=10 AND 20.

SELECT JOB FROM EMP WHERE DEPTNO=10INTERSECTSELECT JOB FROM EMP WHERE DEPTNO=20 ;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

86

Page 87: Oracle Queries

ORACLE 1 SELECT JOB FROM EMP WHERE DEPTNO=10 2 INTERSECT 3* SELECT JOB FROM EMP WHERE DEPTNO=20

SQL> /

JOB --------- CLERK MANAGER

MINUS: WHICH GIVES UNIQUE ROWS:

LIST OFJOBS UNIQUE IN DEPTNO=20

SELECT JOB FROM EMP WHERE DEPTNO=20MINUSSELECT JOB FROM EMP WHERE DEPTNO=10 MINUS SELECT JOB FROM EMP WHERE DEPTNO=30;

WITH IN OPERATOR:

SELECT JOB FROM EMP WHERE DEPTNO=20MINUSSELECT JOB FROM EMP WHERE DEPTNO IN(10,30);

1 SELECT JOB FROM EMP WHERE DEPTNO=10 2 MINUS 3* SELECT JOB FROM EMP WHERE DEPTNO=20SQL> /

JOB --------- PRESIDENT

1 SELECT JOB FROM EMP WHERE DEPTNO=10 2 MINUS 3 SELECT JOB FROM EMP WHERE DEPTNO=20 4 MINUS 5* SELECT JOB FROM EMP WHERE DEPTNO=30SQL> /

JOB --------- PRESIDENT

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

87

Page 88: Oracle Queries

ORACLE

1 SELECT JOB FROM EMP WHERE DEPTNO=10 2 MINUS 3* SELECT JOB FROM EMP WHERE DEPTNO IN (20,30)SQL> /

JOB --------- PRESIDENT

1* SELECT JOB FROM EMP WHERE DEPTNO IN (10,20) – THIS IS UNION ALLSQL> /

JOB --------- CLERK MANAGER MANAGER ANALYST PRESIDENT CLERK ANALYST CLERK

8 rows selected.

SQL> SELECT DISTINCT(JOB) FROM EMP WHERE DEPTNO IN (10,20); - THIS IS UNION.

JOB --------- ANALYST CLERK MANAGER PRESIDENT

CREATING GROUPS OF DATA: GROUP BY

DIVIDE ROWS IN A TABLE INTO SMALLER GROUPS BY USING THE GROUP BY CLAUSE.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

88

Page 89: Oracle Queries

ORACLETHE BELOW STATEMENTS DOES NOT WORK:

SQL> SELECT DEPTNO,SUM(SAL) FROM EMP;

SELECT DEPTNO,SUM(SAL) FROM EMP *ERROR at line 1:ORA-00937: not a single-group group function

THE ABOVE QUERY DOES NOT WORK BECAUSE DEPTNO WILL GIVES 14 ROWS AND SUM(SAL) WILL GIVES ONE ROW. THERE IS NO MATCHING OF ROWS.

ALL COLUMNS IN THE SELECT LIST THAT ARE NOT IN GROUP FUNCTIONS MUST BE IN THE GROUP BY CLAUSE.

ANY COLUMN OR EXPRESSION IN THE SELECT LIST THST IS NOT AN AGGREGATE FUNCTION MUST BE IN THE GROUP BY CLAUSE.

IF IT HAS TO WORK WE HAVE TO GIVE LIKE THIS.

SQL> SELECT DEPTNO,SUM(SAL) FROM EMP 2 GROUP BY DEPTNO;

DEPTNO SUM(SAL) ---------- ---------- 10 8750 20 10875 30 9400

WHENEVER WE SEE NON AGGREGATE COLUMN IN SELECT LIST THAT HAS TO BE THERE AFTER GROUP BY CLAUSE

LIKE ABOVE BELOW QUERIES WON’T WORK:

SQL> SELECT DEPTNO,COUNT(DEPTNO) FROM EMP;SELECT DEPTNO,COUNT(DEPTNO) FROM EMP *ERROR at line 1:ORA-00937: not a single-group group function

SQL> SELECT DEPTNO,AVG(DEPTNO) FROM EMP 2 /SELECT DEPTNO,AVG(DEPTNO) FROM EMP *ERROR at line 1:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

89

Page 90: Oracle Queries

ORACLEORA-00937: not a single-group group function

SQL> SELECT DEPTNO,MAX(DEPTNO) FROM EMP;SELECT DEPTNO,MAX(DEPTNO) FROM EMP *ERROR at line 1:ORA-00937: not a single-group group function

SQL> SELECT DEPTNO,MIN(DEPTNO) FROM EMP;SELECT DEPTNO,MIN(DEPTNO) FROM EMP *ERROR at line 1:ORA-00937: not a single-group group function

WE HAVE TO GIVE NON AGGREGATE COLUMNS THAT ARE IN THE SELECT LIST IN GROUP BY CLAUSE.

SQL> SELECT DEPTNO,SUM(SAL) FROM EMP 2 GROUP BY DEPTNO;

DEPTNO SUM(SAL) ---------- ---------- 10 8750 20 10875 30 9400

SQL> SELECT DEPTNO,COUNT(ENAME) 2 FROM EMP 3 GROUP BY DEPTNO;

DEPTNO COUNT(ENAME) ---------- ------------ 10 3 20 5 30 6

SQL> SELECT DEPTNO,AVG(SAL) 2 FROM EMP 3 GROUP BY DEPTNO;

DEPTNO AVG(SAL) ---------- ---------- 10 2916.66667 20 2175 30 1566.66667

SQL> SELECT DEPTNO,SUM(SAL) 2 FROM EMP

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

90

Page 91: Oracle Queries

ORACLE 3 GROUP BY DEPTNO;

DEPTNO SUM(SAL) ---------- ---------- 10 8750 20 10875 30 9400

THE GROUP BY COLUMN DOES NOT HAVE TO BE IN THE SELECT LIST:

SELECT AVG(SAL)FROM EMP

GROUP BY DEPTNO;

SQL> SELECT AVG(SAL) 2 FROM EMP 3 GROUP BY DEPTNO;

AVG(SAL) ---------- 2916.66667 2175 1566.66667

YOU CAN USE THE GROUP FUCTIONS IN THE ORDER BY CLAUSE:

SELECT DEPTNO,AVG(SAL)FROM EMP

GROUP BY DEPTNOORDER BY AVG(SAL);

SQL> SELECT DEPTNO,AVG(SAL) 2 FROM EMP 3 GROUP BY DEPTNO 4 ORDER BY AVG(SAL);

DEPTNO AVG(SAL) ---------- ---------- 30 1566.66667 20 2175 10 2916.66667

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

91

Page 92: Oracle Queries

ORACLEUSING THE GROUP BY CLAUSE ON MULTIPLE COLUMNS:

SELECT DEPTNO,JOB,SUM(SAL) FROM EMP

GROUP BY DEPTNO,JOB;

SQL> SELECT DEPTNO,JOB,SUM(SAL) 2 FROM EMP 3 GROUP BY DEPTNO,JOB;

DEPTNO JOB SUM(SAL) ---------- --------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600

9 rows selected.

USING WHERE CLAUSE FOR THE QUERY:

SELECT DEPTNO,AVG(SAL) FROM EMP

WHERE DEPTNO=10 GROUP BY DEPTNO

HAVING AVG(SAL) >2000;

SQL> SELECT DEPTNO,SUM(SAL) FROM EMP 2 WHERE DEPTNO=10 3 GROUP BY DEPTNO 4 HAVING SUM(SAL) > 9000;

no rows selected

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

92

Page 93: Oracle Queries

ORACLE 1 SELECT DEPTNO,SUM(SAL) FROM EMP 2 WHERE DEPTNO=10 3 GROUP BY DEPTNO 4* HAVING SUM(SAL) > 8000SQL> /

DEPTNO SUM(SAL) ---------- ---------- 10 8750

REMEMBER ONE THING WHENEVER YOU SEE AGGREGATE COLUMN IN WHERE CLAUSE IT WON'T WORK. BUT WHENEVER YOU SEE NON-AGGREGATE COLUMN IN WHERE CLAUSE IT WILL WORK.

YOU CANNOT USE THE WHERE CLAUSE TO RESTRICT GROUPS:

SELECT DEPTNO,AVG(SAL) FROM EMP

WHERE AVG(SAL) >2000GROUP BY DEPTNO;

SQL> SELECT DEPTNO,SUM(SAL) FROM EMP 2 WHERE SUM(SAL) > 9000 3 GROUP BY DEPTNO;WHERE SUM(SAL) > 9000 *ERROR at line 2:ORA-00934: group function is not allowed here

HERE WHENEVER ORACLE EXECUTES THIS QUERY IT EXECUTES WHERE FIRST AND THEN GROUP BY HERE IT IS NOT POSSIBLE TO FIND SUM(SAL) FOR ALL DEPARTMENTS BEFORE GROUP BY CLAUSE.

WHENEVER YOU SEE AGGREGATE COLUMN IN WHERE CLAUSE IT WON'T WORK.

YOU USE THE HAVING CLAUSE TO RESTRICT GROUPS:

SELECT DEPTNO,AVG(SAL)FROM EMP

GROUP BY DEPTNOHAVING AVG(SAL) >2000;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

93

Page 94: Oracle Queries

ORACLESQL> SELECT DEPTNO,SUM(SAL) FROM EMP 2 GROUP BY DEPTNO 3 HAVING SUM(SAL) > 9000;

DEPTNO SUM(SAL) ---------- ---------- 20 10875 30 9400

HERE WE HAVE TO USE HAVING CLAUSE. THE ORDER OF EXECUTION FOR THE GROUP BY QUERIES IS LIKE THIS FIRST WHERE CLAUSE,GROUP BY, HAVING CLAUSE.

THE ORDER OF EVALUATION OF THE CLAUSES.

WHERE,GROUP BY,HAVING CLAUSE.

DISPLAY MAXIMUM AVAERAGE SALARY:

SELECT MAX(AVG(SAL)) FROM EMP GROUP BY DEPTNO;

SQL> SELECT MAX(AVG(SAL)) FROM EMP GROUP BY DEPTNO;

MAX(AVG(SAL)) ------------- 2916.66667

CHARACTER FUNCTIONS:

SELECT LOWER(‘PAVAN’) FROM DUAL;

SELECT UPPER(‘pavan’) FROM DUAL;

SELECT INITCAP(‘pavan’) FROM DUAL;

SELECT CONCAT('GOOD','BOY') FROM DUAL;

SELECT SUBSTR('PAVAN',1,3) FROM DUAL;

SELECT LENGTH('PAVAN') FROM DUAL;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

94

Page 95: Oracle Queries

ORACLESELECT INSTR('PAVAN','V') FROM DUAL;

SQL> SELECT LOWER('PAVAN') FROM DUAL;

LOWER ----- pavan

SQL> SELECT UPPER('pavan') FROM DUAL;

UPPER ----- PAVAN

SQL> SELECT INITCAP('pavan') FROM DUAL;

INITC ----- Pavan

SQL> SELECT CONCAT('GOOD','BOY') FROM DUAL;

CONCAT( ------- GOODBOY

SQL> SELECT SUBSTR('PAVAN',1,3) FROM DUAL;

SUB --- PAV

SQL> SELECT LENGTH('PAVAN') FROM DUAL;

LENGTH('PAVAN') --------------- 5

SQL> SELECT INSTR('PAVAN','V') FROM DUAL;

INSTR('PAVAN','V') ------------------ 3

DATE FUNCTIONS:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

95

Page 96: Oracle Queries

ORACLEMONTHS_BETWEEN NUMBER OF MONTHS BETWEEN DATES

SELECT MONTHS_BETWEEN('01-SEP-95','11-JAN-94' )FROM DUAL;

SELECT MONTHS_BETWEEN('11-JAN-94' ,'01-SEP-95')FROM DUAL;

SQL> SELECT MONTHS_BETWEEN('01-SEP-95','11-JAN-94' )FROM DUAL;

MONTHS_BETWEEN('01-SEP-95','11-JAN-94') --------------------------------------- 19.6774194

SQL> SELECT MONTHS_BETWEEN('11-JAN-94' ,'01-SEP-95')FROM DUAL;

MONTHS_BETWEEN('11-JAN-94','01-SEP-95') --------------------------------------- -19.677419

ADD_MONTHS ADD MONTHS TO DATE.

SELECT ADD_MONTHS('11-JAN-94',6) FROM DUAL;

SQL> SELECT ADD_MONTHS('11-JAN-94',6) FROM DUAL;

ADD_MONTH --------- 11-JUL-94

NEXT_DAY NEXT DAY OF THE DATE SPECIFIED .

SELECT NEXT_DAY('01-SEP-96','FRIDAY') FROM DUAL;

SQL> SELECT NEXT_DAY('01-SEP-96','FRIDAY') FROM DUAL;

NEXT_DAY( --------- 06-SEP-96

LAST_DAY LAST DAY OF THE MONTH .

SELECT LAST_DAY('01-SEP-96') FROM DUAL;

SQL> SELECT LAST_DAY('01-SEP-96') FROM DUAL;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

96

Page 97: Oracle Queries

ORACLELAST_DAY( --------- 30-SEP-96

SQL *PLUS FILE COMMANDS:

SAVE FILENAME : SAVES CURRENT CONTENTS OF SQL BUFFER TO FILE,THE DEFAULT FILE EXTENSION IS .SQL

GET FILENAME:WRITES THE CONTENTS OF THE FILE.

STARTFILENAME:RUNS THE FILE.

@FILENAME:RUNS THE FILE,

EDIT FILENAME:INVOKES EDITOR TO EDIT CONTENTS OF A SAVED FILE.

SPOOL C:\PAVAN : IT IS USED FOR SAVING OUTPUT OF THE QUERY IN THE FILE.THE FILE EXTENSION IS .LST.

EXIT:LEAVES THE SQL* PLUS.

SQL> SELECT * FROM EMP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

97

Page 98: Oracle Queries

ORACLE14 rows selected.

SQL> SAVE PAVANCreated file PAVAN.sqlIT SAVES THE QUERY WHICH IS THERE IN EDITOR.

SQL> GET PAVAN 1* SELECT * FROM EMP

IT DISPLAYS THE QUERY IN THE FILE.

SQL> START PAVAN IT EXECUTES THE QUERY THAT IS THERE IN FILE PAVAN.

SQL> SELECT * FROM EMP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 14 rows selected.

SQL> @PAVANIT EXECUTES THE QUERY THAT IS THERE IN FILE PAVAN.

SQL> SELECT * FROM EMP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

98

Page 99: Oracle Queries

ORACLE 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

SQL> RUN PAVAN

IT EXECUTES THE QUERY THAT IS THERE IN FILE PAVAN.

1* SELECT * FROM EMP

SQL> SELECT * FROM EMP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 14 rows selected.

SQL> EDIT PAVAN

IT OPENS THE FILE FOR EDITING.

DIFFERENCE BETWEEN SQL AND SQL*PLUS:

SQL : STRUCTURED QUERY LANGUAGE.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

99

Page 100: Oracle Queries

ORACLESQL SQL*PLUSIS A LANGUAGE FOR COMMUNICATING WITH THE ORACLE SERVER TO ACCESS DATA.

RECOGNIZES SQL STATEMENTS AND SENDS THEM TO THE SERVER.

IS BASED ON AMERICAN NATIONAL STANDARDS INSTITUTE.

IS THE ORACLE PROPRIETARY INTERFACE FOR EXECUTING SQL STATEMENTS.

MANIPULATES DATA AND TABLE DEFINITIONS IN THE DATABASE.

DOES NOT ALLOWMANIPULATION OF VALUES IN THE DATABASE.

OPERATORS PRECEDENCE:

ORDER EVALUATED OPERATOR1 ALL COMPARISON OPERATORS2 NOT3 AND4 OR

OVERRIDE RULES OF PRECEDENCE BY USING PARENTHESES.

USING TWO COLUMNS IN ORDER BY:

SELECT ENAME,DEPTNO,SAL FROM EMPORDER BY DEPTNO DESC,SAL DESC;

SELECT ENAME,DEPTNO,SAL FROM EMPORDER BY DEPTNO,SAL;

SELECT ENAME,DEPTNO,SAL FROM EMPORDER BY DEPTNO DESC,SAL;

SQL> SELECT ENAME,DEPTNO,SAL FROM EMP 2 ORDER BY DEPTNO DESC,SAL DESC;

ENAME DEPTNO SAL ---------- ---------- ---------- BLAKE 30 2850 ALLEN 30 1600 TURNER 30 1500 WARD 30 1250 MARTIN 30 1250 JAMES 30 950 SCOTT 20 3000 FORD 20 3000 JONES 20 2975 ADAMS 20 1100 SMITH 20 800 KING 10 5000 CLARK 10 2450 MILLER 10 1300

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

100

Page 101: Oracle Queries

ORACLE14 rows selected.

SQL> SELECT ENAME,DEPTNO,SAL FROM EMP 2 ORDER BY DEPTNO,SAL;

ENAME DEPTNO SAL ---------- ---------- ---------- MILLER 10 1300 CLARK 10 2450 KING 10 5000 SMITH 20 800 ADAMS 20 1100 JONES 20 2975 SCOTT 20 3000 FORD 20 3000 JAMES 30 950 WARD 30 1250 MARTIN 30 1250 TURNER 30 1500 ALLEN 30 1600 BLAKE 30 2850

14 rows selected.

SQL> SELECT ENAME,DEPTNO,SAL FROM EMP 2 ORDER BY DEPTNO DESC,SAL;

ENAME DEPTNO SAL ---------- ---------- ---------- JAMES 30 950 WARD 30 1250 MARTIN 30 1250 TURNER 30 1500 ALLEN 30 1600 BLAKE 30 2850 SMITH 20 800 ADAMS 20 1100 JONES 20 2975 SCOTT 20 3000 FORD 20 3000 MILLER 10 1300 CLARK 10 2450 KING 10 5000

14 rows selected.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

101

Page 102: Oracle Queries

ORACLEYOU CAN SORT BY A COLUMN THAT IS NOT IN THE SELECT LIST.

USE A VARIABLE PREFIXED WITH AN AMPERSAND (&) TO PROMPT THE USER FO A VALUE:

SET VERIFY OFF

SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMPWHERE EMPNO=&EMPLOYEE_NUMBER;

SET VERIFY ON

SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMPWHERE EMPNO=&EMPLOYEE_NUMBER;

SQL> SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP 2 WHERE EMPNO=&EMPLOYEE_NUMBER;

Enter value for employee_number: 7788old 2: WHERE EMPNO=&EMPLOYEE_NUMBERnew 2: WHERE EMPNO=7788

EMPNO ENAME SAL DEPTNO ---------- ---------- ---------- ---------- 7788 SCOTT 3000 20

SQL> SET VERIFY OFF

SQL> /Enter value for employee_number: 7369

EMPNO ENAME SAL DEPTNO ---------- ---------- ---------- ---------- 7369 SMITH 800 20

SQL> SET VERIFY ON

SQL> /Enter value for employee_number: 7566

old 2: WHERE EMPNO=&EMPLOYEE_NUMBERnew 2: WHERE EMPNO=7566

EMPNO ENAME SAL DEPTNO ---------- ---------- ---------- ---------- 7566 JONES 2975 20

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

102

Page 103: Oracle Queries

ORACLEUSING SINGLE QUOTATION MARKS FOR DATE AND CHARACTER VALUES:

SELECT ENAME,DEPTNO,SAL*2 FROM EMPWHERE JOB='&JOB_TITLE'

SELECT ENAME,DEPTNO,SAL*2 FROM EMPWHERE JOB=UPPER('&JOB_TITLE')

SQL> SELECT ENAME,DEPTNO,SAL*2 FROM EMP 2 WHERE JOB='&JOB_TITLE' 3 /

Enter value for job_title: MANAGERold 2: WHERE JOB='&JOB_TITLE'new 2: WHERE JOB='MANAGER'

ENAME DEPTNO SAL*2 ---------- ---------- ---------- JONES 20 5950 BLAKE 30 5700 CLARK 10 4900

SQL> SELECT ENAME,DEPTNO,SAL*2 FROM EMP 2 WHERE JOB=UPPER('&JOB_TITLE') SQL> /

Enter value for job_title: clerk

old 2: WHERE JOB=UPPER('&JOB_TITLE')new 2: WHERE JOB=UPPER('clerk')

ENAME DEPTNO SAL*2 ---------- ---------- ---------- SMITH 20 1600 ADAMS 20 2200 JAMES 30 1900 MILLER 10 2600

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

103

Page 104: Oracle Queries

ORACLEUSE SUBSTITUTION VARIABLES TO SUPPLEMENT THE FOLLOWING:

WHERE CONDITION

ORDER BY

COLUMN EXPRESSION

TABLE ENTIRE SELECT STATEMENT

SELECT & REMENNING_SELECT_STATEMENT;

SELECT EMPNO,ENAME,&COLUMN_NAMEFROM &TABLE_NAMEWHERE &WHERE_CONDITINORDER BY & COL_NAME

SQL> SELECT & REMENNING_SELECT_STATEMENT;

Enter value for remenning_select_statement: * from emp

old 1: SELECT & REMENNING_SELECT_STATEMENTnew 1: SELECT * from emp

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

14 rows selected.

SQL> SELECT EMPNO,ENAME,&COLUMN_NAME 2 FROM &TABLE_NAME 3 WHERE &WHERE_CONDITIN 4 ORDER BY & COL_NAME 5 /

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

104

Page 105: Oracle Queries

ORACLEEnter value for column_name: SALold 1: SELECT EMPNO,ENAME,&COLUMN_NAMEnew 1: SELECT EMPNO,ENAME,SAL

Enter value for table_name: EMPold 2: FROM &TABLE_NAMEnew 2: FROM EMP

Enter value for where_conditin: SAL > 2000old 3: WHERE &WHERE_CONDITINnew 3: WHERE SAL > 2000

Enter value for col_name: SALold 4: ORDER BY & COL_NAMEnew 4: ORDER BY SAL

EMPNO ENAME SAL ---------- ---------- ---------- 7782 CLARK 2450 7698 BLAKE 2850 7566 JONES 2975 7788 SCOTT 3000 7902 FORD 3000 7839 KING 5000

6 rows selected.

WE USE ‘&’ FOR INSERTING VALUES IN THE TABLE:

INSERT INTO DEPT VALUES (&DEPARTMENT_NO,’&DEPARTMENT NAME’,’&LOCATION’);

SQL> CREATE TABLE DEPT_DUP 2 AS 3 SELECT * FROM DEPT;

Table created.

1* INSERT INTO DEPT_DUP VALUES (&DEPARTMENT_NO,'&DEPARTMENT NAME','&LOCATION')SQL> /

Enter value for department_no: 50Enter value for department: COMPUTERS

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

105

Page 106: Oracle Queries

ORACLEEnter value for location: NEW YORKold 1: INSERT INTO DEPT_DUP VALUES (&DEPARTMENT_NO,'&DEPARTMENT NAME','&LOCATION')new 1: INSERT INTO DEPT_DUP VALUES (50,'COMPUTERS NAME','NEW YORK')

1 row created.

SQL STATEMENTS:

SELECT DATA RETRIVAL

INSERTUPDATEDELETE

DATA MANIPULATION LANGUAGE(DML STATEMENTS)

CREATEALTERDROP RENAMETRUNCATE

DATA DEFINITION LANGUAGE(DDL STATEMENTS)

COMMITROLLBACKSAVEPOINT

TRANSACTION CONTROL

GRANTREVOKE

DATA CONTROL LANGUAGE(DCL)

SYNONYMS: SQL> CREATE SYNONYM D FOR DEPT;

Synonym created.

SQL> SELECT * FROM D;

SQL> DROP SYNONYM D;Synonym dropped.

SQL> CREATE SYNONYM DEPARTMENT FOR DEPT;

Synonym created.

SQL> SELECT * FROM DEPT;

DEPTNO DNAME LOC ---------- -------------- -------------

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

106

Page 107: Oracle Queries

ORACLE 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

SQL> SELECT * FROM DEPARTMENT;

DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

RENAME IS DIFFERENT FROM SYNONYM.

SUBQUERIES:

QUERY INSIDE A QUERY IS CALLED SUBQUERY.

THE SUBQUERY (INNER QUERY)EXECUTES ONCE BEFORE THE MAIN QUERY.

THE RESULT OF THE SUBQUERY IS USED BY THE MAIN QUERY(OUTER QUERY).

SINGLE-ROW SUBQUERIES:

RETURN ONLY ONE ROW.

USE SINGLE ROW COMPARISON OPERATORS =,>,>=,<,<=,<>

SELECT MINIMUM SALARY OF THE EMPLOYEE.

SELECT ENAME,JOB,SAL FROM EMP WHERE SAL = (SELECT MIN(SAL) FROM EMP)

SELECT MAXIMUM SALARY OF THE EMPLOYEE.

SELECT ENAME,JOB,SAL FROM EMP

WHERE SAL = (SELECT MAX(SAL) FROM EMP)

SQL> SELECT MAX(SAL) FROM EMP;

MAX(SAL)

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

107

Page 108: Oracle Queries

ORACLE---------- 5000

SQL> SELECT * FROM EMP WHERE SAL = 5000;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7839 KING PRESIDENT 17-NOV-81 5000 10

SQL> SELECT * FROM EMP WHERE SAL = (SELECT MAX(SAL) FROM EMP);

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7839 KING PRESIDENT 17-NOV-81 5000 10

1* SELECT * FROM EMP WHERE SAL = (SELECT MIN(SAL) FROM EMP)

SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20

NULL VALUE SUBQUERY:

SQL> SELECT * FROM EMP WHERE JOB=(SELECT JOB FROM EMP WHERE ENAME='SMYTHE');

no rows selected

MULTI-ROW SUBQURIES:

SELECT * FROM EMPWHERE SAL =(SELECT SAL FROM EMP);

WHERE SAL =(SELECT SAL FROM EMP)*ERROR at line 2:ORA-01427: single-row sub query returns more than one row

RETURN MORE THAN ONE ROW.USE MULTIPLE-ROW COMPARISON OPERATORS.

IN , ANY , ALL OPERATORS.

SELECT * FROM EMP

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

108

Page 109: Oracle Queries

ORACLEWHERE SAL IN (SELECT SAL FROM EMP);

WHICH DISPLAYS ALL THE ROWS OF EMP, THAT IS IT IS SAME AS SELECT * FROM EMP;

=ANY OPERATOR AND = SOME:

SELECT * FROM EMPWHERE SAL = ANY (SELECT SAL FROM EMP);

HERE ‘IN’ IS SAME AS ‘= ANY’ AND ‘= SOME’.

WHICH DISPLAYS ALL THE ROWS OF EMP. THAT IS ‘= ANY’ MEANS ‘IN’

SQL> SELECT * FROM EMP

2 WHERE SAL IN (SELECT SAL FROM EMP);

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7934 MILLER CLERK 7782 23-JAN-82 1300 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10

14 rows selected.

1 SELECT * FROM EMP 2* WHERE SAL = ANY (SELECT SAL FROM EMP)SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7934 MILLER CLERK 7782 23-JAN-82 1300 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

109

Page 110: Oracle Queries

ORACLE 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10

14 rows selected.

1 SELECT * FROM EMP 2* WHERE SAL = SOME (SELECT SAL FROM EMP)SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7934 MILLER CLERK 7782 23-JAN-82 1300 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10

14 rows selected.

<ANY OR < SOME OPERATOR:

SELECT * FROM EMPWHERE SAL < ANY (SELECT SAL FROM EMP);

< ANY MEANS LESS THAN THE MAXIMUM.HERE MAX SALARY IS 5000. EXCEPT THAT EVERY SAL DISPALYED.

1 SELECT * FROM EMP 2* WHERE SAL < ANY (SELECT SAL FROM EMP)SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

110

Page 111: Oracle Queries

ORACLE 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

13 rows selected.

1 SELECT * FROM EMP 2* WHERE SAL < SOME (SELECT SAL FROM EMP)SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

13 rows selected.

2 ND HIGHEST:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

111

Page 112: Oracle Queries

ORACLE 1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MAX(SAL) FROM EMP 3* WHERE SAL < ANY (SELECT SAL FROM EMP))SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7902 FORD ANALYST 7566 03-DEC-81 3000 20

3RD HIGHEST:

1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MAX(SAL) FROM EMP 3 WHERE SAL < ANY (SELECT SAL FROM EMP 4 WHERE SAL < ANY (SELECT SAL FROM EMP 5* ))) 6 /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7566 JONES MANAGER 7839 02-APR-81 2975 20

4TH HIGHEST:

1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MAX(SAL) FROM EMP 3 WHERE SAL < ANY (SELECT SAL FROM EMP 4 WHERE SAL < ANY (SELECT SAL FROM EMP 5 WHERE SAL < ANY (SELECT SAL FROM EMP 6* )))) 7 /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30

5TH HIGHEST:

1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MAX(SAL) FROM EMP 3 WHERE SAL < ANY (SELECT SAL FROM EMP 4 WHERE SAL < ANY (SELECT SAL FROM EMP 5 WHERE SAL < ANY (SELECT SAL FROM EMP

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

112

Page 113: Oracle Queries

ORACLE 6 WHERE SAL < ANY (SELECT SAL FROM EMP 7* ))))) 8 /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7782 CLARK MANAGER 7839 09-JUN-81 2450 10

AND SO ON……………………………………

2 ND HIGHEST:

1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MAX(SAL) FROM EMP 3 WHERE SAL < SOME (SELECT SAL FROM EMP 4* ))

SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7902 FORD ANALYST 7566 03-DEC-81 3000 20

3RD HIGHEST:

1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MAX(SAL) FROM EMP 3 WHERE SAL < SOME (SELECT SAL FROM EMP 4 WHERE SAL < SOME (SELECT SAL FROM EMP 5* ))) 6 /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7566 JONES MANAGER 7839 02-APR-81 2975 20

4TH HIGHEST:

1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MAX(SAL) FROM EMP 3 WHERE SAL < SOME (SELECT SAL FROM EMP 4 WHERE SAL < SOME (SELECT SAL FROM EMP

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

113

Page 114: Oracle Queries

ORACLE 5 WHERE SAL < SOME (SELECT SAL FROM EMP 6* )))) 7 /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 5TH HIGHEST:

1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MAX(SAL) FROM EMP 3 WHERE SAL < SOME (SELECT SAL FROM EMP 4 WHERE SAL < SOME (SELECT SAL FROM EMP 5 WHERE SAL < SOME (SELECT SAL FROM EMP 6 WHERE SAL < SOME (SELECT SAL FROM EMP 7* ))))) 8 /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7782 CLARK MANAGER 7839 09-JUN-81 2450 10

>ANY OR > SOME OPERATOR:

SELECT * FROM EMPWHERE SAL > ANY (SELECT SAL FROM EMP) ;

> ANY MEANS MORE THAN THE MINIMUM.HERE MIN SALARY IS 800. EXCEPT THAT EVERY SAL DISPALYED

1 SELECT * FROM EMP 2* WHERE SAL > ANY (SELECT SAL FROM EMP)SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

114

Page 115: Oracle Queries

ORACLE 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

13 rows selected.

1 SELECT * FROM EMP 2* WHERE SAL > SOME (SELECT SAL FROM EMP)SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

13 rows selected.

2 ND LEAST:

1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MIN(SAL) FROM EMP 3* WHERE SAL > ANY (SELECT SAL FROM EMP)) 4 /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7900 JAMES CLERK 7698 03-DEC-81 950 30

1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MIN(SAL) FROM EMP 3* WHERE SAL > SOME (SELECT SAL FROM EMP))SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7900 JAMES CLERK 7698 03-DEC-81 950 30

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

115

Page 116: Oracle Queries

ORACLE3RD LEAST:

1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MIN(SAL) FROM EMP 3 WHERE SAL > ANY (SELECT SAL FROM EMP 4 WHERE SAL > ANY (SELECT SAL FROM EMP 5* ))) 6 /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7876 ADAMS CLERK 7788 23-MAY-87 1100 20

1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MIN(SAL) FROM EMP 3 WHERE SAL > SOME (SELECT SAL FROM EMP 4 WHERE SAL > SOME (SELECT SAL FROM EMP 5* )))

SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7876 ADAMS CLERK 7788 23-MAY-87 1100 20

4TH LEAST:

1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MIN(SAL) FROM EMP 3 WHERE SAL > ANY (SELECT SAL FROM EMP 4 WHERE SAL > ANY (SELECT SAL FROM EMP 5 WHERE SAL > ANY (SELECT SAL FROM EMP 6* ))))SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30

1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MIN(SAL) FROM EMP

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

116

Page 117: Oracle Queries

ORACLE 3 WHERE SAL > SOME (SELECT SAL FROM EMP 4 WHERE SAL > SOME (SELECT SAL FROM EMP 5 WHERE SAL > SOME (SELECT SAL FROM EMP 6* )))) 7 /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30

AND SO ON………………………………….

<ALL OPERATOR:

< ALL MEANS LESS THAN MINIMUM.

SELECT * FROM EMPWHERE SAL < ALL (SELECT SAL FROM EMP);

no rows selected

SQL> SELECT * FROM EMP 2 WHERE SAL < ALL (SELECT SAL FROM EMP);

no rows selected

SQL> SELECT * FROM EMP 2 WHERE SAL < ALL (SELECT MAX(SAL) FROM EMP);

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

117

Page 118: Oracle Queries

ORACLE13 rows selected.

2 ND HIGHEST:

1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MAX(SAL) FROM EMP 3* WHERE SAL < ALL (SELECT MAX(SAL) FROM EMP))SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7902 FORD ANALYST 7566 03-DEC-81 3000 20

3RD HIGHEST:

1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MAX(SAL) FROM EMP 3 WHERE SAL < ALL (SELECT MAX(SAL) FROM EMP 4 WHERE SAL < ALL (SELECT MAX(SAL) FROM EMP 5* ))) 6 /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7566 JONES MANAGER 7839 02-APR-81 2975 20

4TH HIGHEST:

1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MAX(SAL) FROM EMP 3 WHERE SAL < ALL (SELECT MAX(SAL) FROM EMP 4 WHERE SAL < ALL (SELECT MAX(SAL) FROM EMP 5 WHERE SAL < ALL (SELECT MAX(SAL) FROM EMP 6* )))) 7 /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30

AND SO ON…………………

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

118

Page 119: Oracle Queries

ORACLE>ALL OPERATOR:

> ALL MEANS GREATER THAN MAXIMUM.

SELECT * FROM EMPWHERE SAL > ALL (SELECT SAL FROM EMP);

no rows selected

SELECT * FROM EMPWHERE SAL > ALL (SELECT MIN(SAL) FROM EMP);

HERE EXCEPT MIN SALARY ALL SALARIES DISPLAYS.

SQL> SELECT * FROM EMP 2 WHERE SAL > ALL (SELECT SAL FROM EMP);

no rows selected

1 SELECT * FROM EMP 2* WHERE SAL > ALL (SELECT MIN(SAL) FROM EMP) 3 /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

13 rows selected.

2 ND LEAST:

1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MIN(SAL) FROM EMP 3* WHERE SAL > ALL (SELECT MIN(SAL) FROM EMP))

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

119

Page 120: Oracle Queries

ORACLESQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7900 JAMES CLERK 7698 03-DEC-81 950 30

3RD LEAST:

1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MIN(SAL) FROM EMP 3 WHERE SAL > ALL (SELECT MIN(SAL) FROM EMP 4 WHERE SAL > ALL (SELECT MIN(SAL) FROM EMP 5* ))) 6 /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7876 ADAMS CLERK 7788 23-MAY-87 1100 20

4TH LEAST:

1 SELECT * FROM EMP 2 WHERE SAL = (SELECT MIN(SAL) FROM EMP 3 WHERE SAL > ALL (SELECT MIN(SAL) FROM EMP 4 WHERE SAL > ALL (SELECT MIN(SAL) FROM EMP 5 WHERE SAL > ALL (SELECT MIN(SAL) FROM EMP 6* ))))SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30

AND SO ON…………….

YOU CAN USE SUBQUERY IN FROM CLAUSE:

SELECT * FROM (SELECT * FORM SAL);

SELECT * FROM (SELECT * FORM SAL ORDER BY SAL DESC );

SQL> SELECT * FROM (SELECT * FROM EMP);

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

120

Page 121: Oracle Queries

ORACLE---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

14 rows selected.

1* SELECT * FROM (SELECT * FROM EMP ORDER BY SAL DESC )SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7839 KING PRESIDENT 17-NOV-81 5000 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7566 JONES MANAGER 7839 02-APR-81 2975 20 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7934 MILLER CLERK 7782 23-JAN-82 1300 10 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7369 SMITH CLERK 7902 17-DEC-80 800 20

14 rows selected.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

121

Page 122: Oracle Queries

ORACLE

JOINS: ORACLE 9I:

CARTESIAN PRODUCT:CATERSIAN PRODUCT WILL BE FORMED WHEN EVER WE OMIT THE JOIN CONDITION OR IF YOU DON’T WRITE JOIN CONDITIONWHEN WE ARE RETRIVING INFO FROM TWO OR MORE TABLES.

HERE WE GET OUTPUT LIKE THIS ALL THE ROWS IN THE FIRST TABLE WILL BE MULTIPLIED BY FIRST ROW IN THE SECOND TABLE,AND ONCE AGAIN ALL ROWS IN THE FIRST TABLE WILL BE MULTIPLIED BY SECOND ROW AND SO ON.

WE GET FIRST TABLE NO OF ROWS MULTIPLIED BY SECOND TABLE NO OF ROWS AS OUTPUT.

PRIOR TO ORACLE 9I:

SELECT ENAME,DNAME FROM EMP,DEPT;

ORACLE 9I:

SELECT ENAME,DNAME FROM EMP CROSS JOIN DEPT;

EQUI JOIN IN PRIOR TO ORACLE 9I:

WHEN EVER WE DO EQUI JOIN WE GET COMMON INFO WHICH IS THERE IN TWO TABLES.

PRIOR TO ORACLE 9I:

SELECT EMPNO,ENAME,DEPT.DEPTNO,DNAME,LOC

FROM EMP,DEPT

WHERE EMP.DEPTNO=DEPT.DEPTNO;

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7369 SMITH 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 7566 JONES 20 RESEARCH DALLAS 7654 MARTIN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7782 CLARK 10 ACCOUNTING NEW YORK 7788 SCOTT 20 RESEARCH DALLAS 7839 KING 10 ACCOUNTING NEW YORK 7844 TURNER 30 SALES CHICAGO

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

122

Page 123: Oracle Queries

ORACLE 7876 ADAMS 20 RESEARCH DALLAS 7900 JAMES 30 SALES CHICAGO 7902 FORD 20 RESEARCH DALLAS 7934 MILLER 10 ACCOUNTING NEW YORK

14 rows selected.

ORACLE 9I:

NATURAL JOIN:THIS IS ALSO EQUI JOIN HERE NO NEED GIVE JOIN CONDITION.

SQL> SELECT EMPNO,ENAME,DEPTNO,DNAME 2 FROM EMP NATURAL JOIN DEPT;

EMPNO ENAME DEPTNO DNAME ---------- ---------- ---------- -------------- 7369 SMITH 20 RESEARCH 7499 ALLEN 30 SALES 7521 WARD 30 SALES 7566 JONES 20 RESEARCH 7654 MARTIN 30 SALES 7698 BLAKE 30 SALES 7782 CLARK 10 ACCOUNTING 7788 SCOTT 20 RESEARCH 7839 KING 10 ACCOUNTING 7844 TURNER 30 SALES 7876 ADAMS 20 RESEARCH 7900 JAMES 30 SALES 7902 FORD 20 RESEARCH 7934 MILLER 10 ACCOUNTING INNER JOIN IN ORACLE 9I

SELECT EMPNO,ENAME,EMP.DEPTNO,DNAME,LOC

FROM EMP INNER JOIN DEPT

ON EMP.DEPTNO=DEPT.DEPTNO ;

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7369 SMITH 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 7566 JONES 20 RESEARCH DALLAS 7654 MARTIN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7782 CLARK 10 ACCOUNTING NEW YORK 7788 SCOTT 20 RESEARCH DALLAS

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

123

Page 124: Oracle Queries

ORACLE 7839 KING 10 ACCOUNTING NEW YORK 7844 TURNER 30 SALES CHICAGO 7876 ADAMS 20 RESEARCH DALLAS 7900 JAMES 30 SALES CHICAGO 7902 FORD 20 RESEARCH DALLAS 7934 MILLER 10 ACCOUNTING NEW YORK

14 rows selected.

JOIN-USING: SQL> SELECT E.EMPNO,E.ENAME,D.LOC FROM

2 EMP E JOIN DEPT D

3 USING(DEPTNO);

EMPNO ENAME LOC ---------- ---------- ------------- 7369 SMITH DALLAS 7499 ALLEN CHICAGO 7521 WARD CHICAGO 7566 JONES DALLAS 7654 MARTIN CHICAGO 7698 BLAKE CHICAGO 7782 CLARK NEW YORK 7788 SCOTT DALLAS 7839 KING NEW YORK 7844 TURNER CHICAGO 7876 ADAMS DALLAS 7900 JAMES CHICAGO 7902 FORD DALLAS 7934 MILLER NEW YORK WITHOUT ALIASING:

1 SELECT EMPNO,ENAME,LOC FROM 2 EMP JOIN DEPT 3* USING(DEPTNO) 4 /

EMPNO ENAME LOC ---------- ---------- ------------- 7369 SMITH DALLAS 7499 ALLEN CHICAGO 7521 WARD CHICAGO 7566 JONES DALLAS

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

124

Page 125: Oracle Queries

ORACLE 7654 MARTIN CHICAGO 7698 BLAKE CHICAGO 7782 CLARK NEW YORK 7788 SCOTT DALLAS 7839 KING NEW YORK 7844 TURNER CHICAGO 7876 ADAMS DALLAS 7900 JAMES CHICAGO 7902 FORD DALLAS 7934 MILLER NEW YORK

1 SELECT EMPNO,ENAME,DEPTNO,DNAME,LOC FROM 2 EMP JOIN DEPT

3* USING(DEPTNO)

SQL> /

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7369 SMITH 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 7566 JONES 20 RESEARCH DALLAS 7654 MARTIN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7782 CLARK 10 ACCOUNTING NEW YORK 7788 SCOTT 20 RESEARCH DALLAS 7839 KING 10 ACCOUNTING NEW YORK 7844 TURNER 30 SALES CHICAGO 7876 ADAMS 20 RESEARCH DALLAS 7900 JAMES 30 SALES CHICAGO 7902 FORD 20 RESEARCH DALLAS 7934 MILLER 10 ACCOUNTING NEW YORK JOIN – ON:

SELECT EMPNO,ENAME,EMP.DEPTNO,DNAME,LOCFROM EMP JOIN DEPTON EMP.DEPTNO=DEPT.DEPTNO

SQL> /

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7369 SMITH 20 RESEARCH DALLAS

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

125

Page 126: Oracle Queries

ORACLE 7499 ALLEN 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 7566 JONES 20 RESEARCH DALLAS 7654 MARTIN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7782 CLARK 10 ACCOUNTING NEW YORK 7788 SCOTT 20 RESEARCH DALLAS 7839 KING 10 ACCOUNTING NEW YORK 7844 TURNER 30 SALES CHICAGO 7876 ADAMS 20 RESEARCH DALLAS 7900 JAMES 30 SALES CHICAGO 7902 FORD 20 RESEARCH DALLAS 7934 MILLER 10 ACCOUNTING NEW YORK

RIGHT OUTER JOIN: IN ORACLE 9I

IN RIGHT OUTER JOIN WE GET THE EXTRA INFORMATION IN DEPT. THAT IS DEPTNO=40.BECAUSE NO BODY WORKING IN DEPTNO 40.

WHEN EVER WE DO EQUI JOIN WE GET COMMON INFO WHICH IS THERE IN TWO TABLES.

SELECT EMPNO,ENAME,EMP.DEPTNO,DNAME,LOC

FROM EMP RIGHT OUTER JOIN DEPT

ON EMP.DEPTNO=DEPT.DEPTNO;

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7369 SMITH 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 7566 JONES 20 RESEARCH DALLAS 7654 MARTIN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7782 CLARK 10 ACCOUNTING NEW YORK 7788 SCOTT 20 RESEARCH DALLAS 7839 KING 10 ACCOUNTING NEW YORK 7844 TURNER 30 SALES CHICAGO 7876 ADAMS 20 RESEARCH DALLAS 7900 JAMES 30 SALES CHICAGO 7902 FORD 20 RESEARCH DALLAS 7934 MILLER 10 ACCOUNTING NEW YORK OPERATIONS BOSTON

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

126

Page 127: Oracle Queries

ORACLE15 rows selected.

SELECT EMPNO,ENAME,DEPT.DEPTNO,DNAME,LOC

FROM EMP RIGHT OUTER JOIN DEPT

ON EMP.DEPTNO=DEPT.DEPTNO;

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7369 SMITH 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 7566 JONES 20 RESEARCH DALLAS 7654 MARTIN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7782 CLARK 10 ACCOUNTING NEW YORK 7788 SCOTT 20 RESEARCH DALLAS 7839 KING 10 ACCOUNTING NEW YORK 7844 TURNER 30 SALES CHICAGO 7876 ADAMS 20 RESEARCH DALLAS 7900 JAMES 30 SALES CHICAGO 7902 FORD 20 RESEARCH DALLAS 7934 MILLER 10 ACCOUNTING NEW YORK 40 OPERATIONS BOSTON

15 rows selected.

RIGHT OUTER JOIN IN PRIOR TO ORACLE 9I

SELECT EMPNO,ENAME,EMP2.DEPTNO,DNAME,LOC FROM EMP2,DEPTWHERE EMP2.DEPTNO(+)=DEPT.DEPTNO;

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7369 SMITH 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 7566 JONES 20 RESEARCH DALLAS 7654 MARTIN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7782 CLARK 10 ACCOUNTING NEW YORK 7788 SCOTT 20 RESEARCH DALLAS 7839 KING 10 ACCOUNTING NEW YORK 7844 TURNER 30 SALES CHICAGO 7876 ADAMS 20 RESEARCH DALLAS

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

127

Page 128: Oracle Queries

ORACLE 7900 JAMES 30 SALES CHICAGO 7902 FORD 20 RESEARCH DALLAS 7934 MILLER 10 ACCOUNTING NEW YORK

OPERATIONS BOSTON

15 rows selected.

1 SELECT EMPNO,ENAME,DEPT.DEPTNO,DNAME,LOC

2 FROM EMP2,DEPT

3* WHERE EMP2.DEPTNO(+)=DEPT.DEPTNO;

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7369 SMITH 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 7566 JONES 20 RESEARCH DALLAS 7654 MARTIN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7782 CLARK 10 ACCOUNTING NEW YORK 7788 SCOTT 20 RESEARCH DALLAS 7839 KING 10 ACCOUNTING NEW YORK 7844 TURNER 30 SALES CHICAGO 7876 ADAMS 20 RESEARCH DALLAS 7900 JAMES 30 SALES CHICAGO 7902 FORD 20 RESEARCH DALLAS 7934 MILLER 10 ACCOUNTING NEW YORK

40 OPERATIONS BOSTON

15 rows selected.

LEFT OUTER JOIN: IN ORACLE 9I

IN THE ABOVE QUERY NO EXTRA ROWS WERE SELECTED BECAUSE THERE NO BODY WHO IS WORKING OTHER THAN DEPTNOS WHICH ARE THERE IN DEPT TABLE.THAT IS BECAUSE OF FOREIGN KEY.

SELECT EMPNO,ENAME,DEPT.DEPTNO,DNAME,LOC

FROM EMP LEFT OUTER JOIN DEPT

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

128

Page 129: Oracle Queries

ORACLEON EMP.DEPTNO=DEPT.DEPTNO;

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7369 SMITH 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 7566 JONES 20 RESEARCH DALLAS 7654 MARTIN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7782 CLARK 10 ACCOUNTING NEW YORK 7788 SCOTT 20 RESEARCH DALLAS 7839 KING 10 ACCOUNTING NEW YORK 7844 TURNER 30 SALES CHICAGO 7876 ADAMS 20 RESEARCH DALLAS 7900 JAMES 30 SALES CHICAGO 7902 FORD 20 RESEARCH DALLAS 7934 MILLER 10 ACCOUNTING NEW YORK

14 rows selected.

HERE WE CREATE EMP2 TABLE AND INSERT 50,60,70 VALUES IN TO THE TABLE.

SQL> CREATE TABLE EMP2 2 AS 3 SELECT * FROM EMP;

Table created.

SQL> SELECT * FROM EMP2;

EMPNO ENAMEJOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 207499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 307521 WARD SALESMAN 7698 22-FEB-81 1250 500 307566 JONES MANAGER 7839 02-APR-81 2975 207654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 307698 BLAKE MANAGER 7839 01-MAY-81 2850 307782 CLARK MANAGER 7839 09-JUN-81 2450 107788 SCOTT ANALYST 7566 19-APR-87 3000 207839 KING PRESIDENT 17-NOV-81 5000 107844 TURNER SALESMAN 7698 08-SEP-81 1500 0 307876 ADAMS CLERK 7788 23-MAY-87 1100 207900 JAMES CLERK 7698 03-DEC-81 950 30

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

129

Page 130: Oracle Queries

ORACLE7902 FORD ANALYST 7566 03-DEC-81 3000 207934 MILLER CLERK 7782 23-JAN-82 1300 10

14 rows selected.

SQL> INSERT INTO EMP2 2 VALUES 3 (1,'PAVAN','MANAGER',123,'01-DEC-05',1000,100,50);

1 row created.

1 INSERT INTO EMP2 2 VALUES 3* (2,'KUMAR','MANAGER',123,'01-DEC-05',1000,100,60);

1 row created.

1 INSERT INTO EMP2 2 VALUES 3* (3,'GAYATRI','MANAGER',123,'01-DEC-05',1000,100,70);

1 row created.

SELECT EMPNO,ENAME,EMP2.DEPTNO,DNAME,LOC

FROM EMP2 LEFT OUTER JOIN DEPT

ON EMP2.DEPTNO=DEPT.DEPTNO;

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7369 SMITH 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 7566 JONES 20 RESEARCH DALLAS 7654 MARTIN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7782 CLARK 10 ACCOUNTING NEW YORK 7788 SCOTT 20 RESEARCH DALLAS 7839 KING 10 ACCOUNTING NEW YORK 7844 TURNER 30 SALES CHICAGO 7876 ADAMS 20 RESEARCH DALLAS 7900 JAMES 30 SALES CHICAGO

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

130

Page 131: Oracle Queries

ORACLE 7902 FORD 20 RESEARCH DALLAS 7934 MILLER 10 ACCOUNTING NEW YORK 1 PAVAN 50 2 KUMAR 60 3 GAYATRI 70

LEFT OUTER JOIN IN PRIOR TO ORACLE 9I

1 SELECT EMPNO,ENAME,EMP2.DEPTNO,DNAME,LOC

2 FROM EMP2,DEPT

3* WHERE EMP2.DEPTNO=DEPT.DEPTNO(+)

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7369 SMITH 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 7566 JONES 20 RESEARCH DALLAS 7654 MARTIN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7782 CLARK 10 ACCOUNTING NEW YORK 7788 SCOTT 20 RESEARCH DALLAS 7839 KING 10 ACCOUNTING NEW YORK 7844 TURNER 30 SALES CHICAGO 7876 ADAMS 20 RESEARCH DALLAS 7900 JAMES 30 SALES CHICAGO 7902 FORD 20 RESEARCH DALLAS 7934 MILLER 10 ACCOUNTING NEW YORK

1 PAVAN 50 2 KUMAR 60 3 GAYATRI 70

17 rows selected.

FULL OUTER JOIN: IN ORACLE 9I

SELECT EMPNO,ENAME,EMP2.DEPTNO,DNAME,LOC

FROM EMP2 FULL OUTER JOIN DEPT ON EMP2.DEPTNO=DEPT.DEPTNO;

EMPNO ENAME DEPTNO DNAME LOC

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

131

Page 132: Oracle Queries

ORACLE---------- ---------- ---------- -------------- ------------- 7369 SMITH 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 7566 JONES 20 RESEARCH DALLAS 7654 MARTIN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7782 CLARK 10 ACCOUNTING NEW YORK 7788 SCOTT 20 RESEARCH DALLAS 7839 KING 10 ACCOUNTING NEW YORK 7844 TURNER 30 SALES CHICAGO 7876 ADAMS 20 RESEARCH DALLAS 7900 JAMES 30 SALES CHICAGO 7902 FORD 20 RESEARCH DALLAS 7934 MILLER 10 ACCOUNTING NEW YORK 1 PAVAN 50 2 KUMAR 60 3 GAYATRI 70

OPERATIONS BOSTON

18 rows selected.

SELECT EMPNO,ENAME,EMP2.DEPTNO,DEPT.DEPTNO,DNAME,LOC

FROM EMP2 FULL OUTER JOIN DEPTON EMP2.DEPTNO=DEPT.DEPTNO

EMPNO ENAME DEPTNO DEPTNO DNAME LOC ---------- ---------- ---------- ---------- -------------- ------------- 7934 MILLER 10 10 ACCOUNTING NEW YORK 7839 KING 10 10 ACCOUNTING NEW YORK 7782 CLARK 10 10 ACCOUNTING NEW YORK 7902 FORD 20 20 RESEARCH DALLAS 7876 ADAMS 20 20 RESEARCH DALLAS 7788 SCOTT 20 20 RESEARCH DALLAS 7566 JONES 20 20 RESEARCH DALLAS 7369 SMITH 20 20 RESEARCH DALLAS 7900 JAMES 30 30 SALES CHICAGO 7844 TURNER 30 30 SALES CHICAGO 7698 BLAKE 30 30 SALES CHICAGO 7654 MARTIN 30 30 SALES CHICAGO 7521 WARD 30 30 SALES CHICAGO 7499 ALLEN 30 30 SALES CHICAGO 1 PAVAN 50 2 KUMAR 60 3 GAYATRI 70 40 OPERATIONS BOSTON

18 rows selected.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

132

Page 133: Oracle Queries

ORACLEFULL OUTER JOIN IN PRIOR TO ORACLE 9I

SQL> SELECT EMPNO,ENAME,DEPT.DEPTNO,DNAME,LOC

2 FROM EMP2,DEPT

3 WHERE EMP2.DEPTNO(+)=DEPT.DEPTNO

4 UNION

5 SELECT EMPNO,ENAME,EMP2.DEPTNO,DNAME,LOC

6 FROM EMP2,DEPT

7 WHERE EMP2.DEPTNO=DEPT.DEPTNO(+);

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 1 PAVAN 50 2 KUMAR 60 3 GAYATRI 70 7369 SMITH 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 7566 JONES 20 RESEARCH DALLAS 7654 MARTIN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7782 CLARK 10 ACCOUNTING NEW YORK 7788 SCOTT 20 RESEARCH DALLAS 7839 KING 10 ACCOUNTING NEW YORK 7844 TURNER 30 SALES CHICAGO 7876 ADAMS 20 RESEARCH DALLAS 7900 JAMES 30 SALES CHICAGO 7902 FORD 20 RESEARCH DALLAS 7934 MILLER 10 ACCOUNTING NEW YORK

40 OPERATIONS BOSTON

18 rows selected.

1 SELECT EMPNO,ENAME,DEPT.DEPTNO D_DEPTNO,EMP2.DEPTNO E_DEPTNO, DNAME,LOC 2 FROM EMP2,DEPT

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

133

Page 134: Oracle Queries

ORACLE 3 WHERE EMP2.DEPTNO(+)=DEPT.DEPTNO

4 UNION

5 SELECT EMPNO,ENAME,DEPT.DEPTNO D_DEPTNO, EMP2.DEPTNO E_DEPTNO,DNAME,LOC

6 FROM EMP2,DEPT

7 WHERE EMP2.DEPTNO=DEPT.DEPTNO(+)

EMPNO ENAME D_DEPTNO E_DEPTNO DNAME LOC ---------- ---------- ---------- ---------- -------------- ------------- 1 PAVAN 50 2 KUMAR 60 3 GAYATRI 70 7369 SMITH 20 20 RESEARCH DALLAS 7499 ALLEN 30 30 SALES CHICAGO 7521 WARD 30 30 SALES CHICAGO 7566 JONES 20 20 RESEARCH DALLAS 7654 MARTIN 30 30 SALES CHICAGO 7698 BLAKE 30 30 SALES CHICAGO 7782 CLARK 10 10 ACCOUNTING NEW YORK 7788 SCOTT 20 20 RESEARCH DALLAS 7839 KING 10 10 ACCOUNTING NEW YORK 7844 TURNER 30 30 SALES CHICAGO 7876 ADAMS 20 20 RESEARCH DALLAS 7900 JAMES 30 30 SALES CHICAGO 7902 FORD 20 20 RESEARCH DALLAS 7934 MILLER 10 10 ACCOUNTING NEW YORK

40 OPERATIONS BOSTON

18 rows selected.

SELF JOIN:

1 SELECT W.EMPNO,W.ENAME,M.EMPNO,M.ENAME FROM 2 EMP W, EMP M 3* WHERE W.MGR=M.EMPNO

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

134

Page 135: Oracle Queries

ORACLESQL> /

EMPNO ENAME EMPNO ENAME ---------- ---------- ---------- ---------- 7369 SMITH 7902 FORD 7499 ALLEN 7698 BLAKE 7521 WARD 7698 BLAKE 7566 JONES 7839 KING 7654 MARTIN 7698 BLAKE 7698 BLAKE 7839 KING 7782 CLARK 7839 KING 7788 SCOTT 7566 JONES 7844 TURNER 7698 BLAKE 7876 ADAMS 7788 SCOTT 7900 JAMES 7698 BLAKE 7902 FORD 7566 JONES 7934 MILLER 7782 CLARK

JOIN -ON

1 SELECT W.EMPNO,W.ENAME,M.EMPNO,M.ENAME FROM 2 EMP W JOIN EMP M 3* ON W.MGR=M.EMPNO 4 /

EMPNO ENAME EMPNO ENAME ---------- ---------- ---------- ---------- 7369 SMITH 7902 FORD 7499 ALLEN 7698 BLAKE 7521 WARD 7698 BLAKE 7566 JONES 7839 KING 7654 MARTIN 7698 BLAKE 7698 BLAKE 7839 KING 7782 CLARK 7839 KING 7788 SCOTT 7566 JONES 7844 TURNER 7698 BLAKE 7876 ADAMS 7788 SCOTT 7900 JAMES 7698 BLAKE 7902 FORD 7566 JONES 7934 MILLER 7782 CLARK

SEQUENCES:

DEFINE A SEQUENCE TO GENERATE SEQUENTIAL NUMBERS AUTOMATICALLY.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

135

Page 136: Oracle Queries

ORACLEWHAT IS A SEQUENCE?

A SEQUENCE:

AUTOMATICALLY GENERATES UNIQUE NUMBERS.

IS A SHARABLE OBJECT.(MULTIPLE USERS CAN SHARE SEQUENCE BECAUSE

SEQUENCE NUMBERS ARE STORED AND GENERATED INDEPENDENTLY OF

TABLES.)

IT IS TYPICALLY USED TO CREATE A PRIMARY KEY VALUE.

REPLACES APPLICATION CODE.(THIS IS TIME SAVING OBJECT BECAUSE IT

CAN REDUCE THE AMOUNT OF APPLICATION CODE NEEDED TO WRITE A

SEQUENCE-GENERATING ROUTINE).

SPEEDS UP THE EFFICIENCY OF ACCESSING SEQUENCE VALUES WHEN

CACHED IN MEMORY.

CREATE SEQUENCE SEQUENCE_NAME

[INCREMENT BY N]

[START WITH N]

[{MAXVALUE N | NOMAXVALUE}]

[{MINVALUE N | NOMINVALUE}]

[{CYCLE | NOCYCLE}]

[{CACHE N | NOCACHE}];

IN SYNTAX:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

136

Page 137: Oracle Queries

ORACLESEQUENCE_NAME SEQUENCE NAME

INCREMENT BY N SPECIFIES THE INTERVAL BETWEEN SEQUENCE NUMBERS WHERE N IS AN

INTEGER.(IF THIS CLAUSE IS OMMITED , THE SEQUENCE INCREMENTS BY 1.)

STARTWITH N SPECIFIES THE FIRST SEQUENCE NUMBER TO BE GENERATED.

(IF THIS CLAUSE IS OMMITED , THE SEQUENCE STARTS WITH 1.)

MAXVALUE N SPECIFIES MAXVALUE THE SEQUENCE CAN GENERATE.

NOMAXVALUE SPECIFIES A MAXIMUM VALUE OF 10 ^ 27 FOR ASENDING SEQUENCE AND -1 FOR DESENDING SEQUENCE.(THIS IS DEFAULT OPTION)

MINVALUE N SPECIFIES MINVALUE THE SEQUENCE CAN GENERATE.

NOMINVALUE SPECIFIES A MAXIMUM VALUE OF 1 FOR AN ASCENDING SEQUENCE AND -1 FOR DESCENDING SEQUENCE.(THIS IS DEFAULT OPTION)

CYCLE | NOCYCLE SPECIFIES WHETHER THE SEQUENCE CONTINUES TO GENERATE VALUE AFTER REACHING ITS MAXIMUM OR MINIMUM VALUE(NO CYCLE IS DEFAULT OPTION)

CACHE N | NO CACHE SPECIFIES HOW MANY VALUES THE ORACLE SERVER PREALLOCATES AND KEEP IN MEMORY.(BY DEFAULT ORACLE SERVER CACHES 20 VALUES)

CREATION OF SEQUENCE:

SQL> CREATE SEQUENCE DEPT_DUP_SEQ 2 INCREMENT BY 10

3 START WITH 10

4 MAXVALUE 100

5 NOCACHE

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

137

Page 138: Oracle Queries

ORACLE 6 NOCYCLE;

Sequence created.

SQL> SELECT * FROM USER_SEQUENCES;

SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER ------------------------------ ---------- ---------- ------------ - - ---------- ----------- DEPT_DUP_SEQ 1 100 10 N N 0 10

NEXTVAL AND CURRVAL PSEUDOCOLUMNS;

1* SELECT DEPT_DUP_SEQ.CURRVAL FROM DUALSQL> /SELECT DEPT_DUP_SEQ.CURRVAL FROM DUAL *ERROR at line 1:ORA-08002: sequence DEPT_DUP_SEQ.CURRVAL is not yet defined in this session

INSERTING THE VALUES OF SEQUENCES IN TO THE TABLE:

SQL> INSERT INTO DEPT_DUP 2 VALUES 3 (DEPT_DUP_SEQ.NEXTVAL,'COM','NY');

1 row created.

1 INSERT INTO DEPT_DUP 2 VALUES 3* (DEPT_DUP_SEQ.NEXTVAL,'SALES','NY')SQL> /

1 row created.

1 INSERT INTO DEPT_DUP 2 VALUES 3* (DEPT_DUP_SEQ.NEXTVAL,'OPR','NY')SQL> /

1 row created.

SQL> SELECT * FROM DEPT_DUP;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

138

Page 139: Oracle Queries

ORACLE DEPTNO DNAME LOC ---------- -------------- ------------- 10 COM NY 20 SALES NY 30 OPR NY

SQL> SELECT DEPT_DUP_SEQ.CURRVAL FROM DUAL;

CURRVAL ---------- 30 VIEWING SEQUENCES IN DATABASE:

SQL> SELECT * FROM USER_SEQUENCES;

SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER ------------------------------ ---------- ---------- ------------ - - ---------- ----------- DEPT_DUP_SEQ 1 100 10 N N 0 40

HERE IN LAST_NUMBER COLUMN WE CAN SEE NEXT AVALIABLE NUMBER.

DON'T SEE NEXT AVALIABLE NUMBER BY SELECTING LIKE THIS

SELECT DEPT_DUP_SEQ.NEXTVAL FROM DUAL;

NEXTVAL ---------- 40

SQL> INSERT INTO DEPT_DUP 2 VALUES 3 (DEPT_DUP_SEQ.NEXTVAL,'AA','NY');

1 row created.

SQL> SELECT * FROM DEPT_DUP;

DEPTNO DNAME LOC ---------- -------------- ------------- 10 COM NY 20 SALES NY 30 OPR NY 50 AA NY

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

139

Page 140: Oracle Queries

ORACLEHERE WE ARE SUPPOSED TO GET 40 BUT WE GOT 50. THAT MEANS WHEN WE SAW NEXT AVALIABLENUMBER BY USING SEQUENCE_NAME.NEXTVAL. IT GENERATED THAT NUMBER.IT CANNOT BE REVOKED BACK.IT IS ALWAYS ADVISED TO SEE NEXT AVALIABLE NUMBER IN USER_SEQUENCES TABLES LAST_NUMBER COLUMN.

1* SELECT DEPT_DUP_SEQ.NEXTVAL FROM DUALSQL> /

NEXTVAL ---------- 60

SQL> /

NEXTVAL ---------- 70

SQL> /

NEXTVAL ---------- 80

SQL> /

NEXTVAL ---------- 90

SQL> /

NEXTVAL ---------- 100

SQL> /SELECT DEPT_DUP_SEQ.NEXTVAL FROM DUAL*ERROR at line 1:ORA-08004: sequence DEPT_DUP_SEQ.NEXTVAL exceeds MAXVALUE and cannot be instantiated

HERE SEQUENCE REACHED MAXVALUE.IT CANNOT GENERATE NUMBER. WE CAN ALTER SEQUENCE

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

140

Page 141: Oracle Queries

ORACLEALTERING A SEQUENCE:

SQL> ALTER SEQUENCE DEPT_DUP_SEQ 2 MAXVALUE 150;

Sequence altered.

SQL> SELECT DEPT_DUP_SEQ.NEXTVAL FROM DUAL;

NEXTVAL ---------- 110

SQL> SELECT * FROM USER_SEQUENCES;

SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER ------------------------------ ---------- ---------- ------------ - - ---------- ----------- DEPT_DUP_SEQ 1 150 10 N N 0

A120

WE CAN CHANGE INCREMENT VALUE,MAXVALUE,MINVALUE,CYCLE,CACHE OPTIONS IN ALTER.

WE CANNOT CHNAGE START WITH OPTION IN ALTER.TO START SEQUENCE WITH NEW NUMBER IT SHOULD BE DROPPED AND RECREATED.

SOME VALIDATION IS IMPOSED WHEN ALTER A SEQUENCE.

SQL> ALTER SEQUENCE DEPT_DUP_SEQ 2 MAXVALUE 100;ALTER SEQUENCE DEPT_DUP_SEQ*ERROR at line 1:ORA-04009: MAXVALUE cannot be made to be less than the current value

SQL> ALTER SEQUENCE DEPT_DUP_SEQ 2 CYCLE;

Sequence altered.

1* SELECT DEPT_DUP_SEQ.NEXTVAL FROM DUALSQL> /

NEXTVAL ---------- 120

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

141

Page 142: Oracle Queries

ORACLESQL> SELECT * FROM USER_SEQUENCES;

SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER ------------------------------ ---------- ---------- ------------ - - ---------- ----------- DEPT_DUP_SEQ 1 150 10 Y N 0 130

SQL> SELECT DEPT_DUP_SEQ.NEXTVAL FROM DUAL;

NEXTVAL ---------- 130

SQL> /

NEXTVAL ---------- 140

SQL> /

NEXTVAL ---------- 150

SQL> /

NEXTVAL ---------- 1

SQL> /

NEXTVAL ---------- 11

HERE BECAUSE OF CYCLE OPTION WE GOT NUMBER FROM MINVALUE OF THE SEQUENCE.

SQL> CREATE SEQUENCE DEPT_DUP_SEQ1 2 INCREMENT BY 1 3 START WITH 100 4 CACHE 30;

Sequence created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

142

Page 143: Oracle Queries

ORACLESQL> SELECT * FROM USER_SEQUENCES;

SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER ------------------------------ ---------- ---------- ------------ - - ---------- ----------- DEPT_DUP_SEQ1 1 1.0000E+27 1 N N 30 100

1* SELECT DEPT_DUP_SEQ1.NEXTVAL FROM DUAL 2 /

NEXTVAL ---------- 100

SQL> SELECT * FROM USER_SEQUENCES;

SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER ------------------------------ ---------- ---------- ------------ - - ---------- ----------- DEPT_DUP_SEQ1 1 1.0000E+27 1 N N 30 130

HERE U CANNOT DEPEND ON LAST_NUMBER COLUMN FOR NEXT NUMBER.

DROPING SEQUENCES:

SQL> DROP SEQUENCE DEPT_DUP_SEQ1Sequence dropped.

HERE CACHE MEANS ORACLE KEEPS 30 VALUES IN THE CACHE MEMORY.DEFAULT IS 20.CYCLE MEANS IF THE NUMBER GENERATES MAX NUMBER THEN ONCE AGAIN IT START FROM MIN VALUE.

CREATING SEQUENCE WITHOUT ANY PARAMETERS:

SQL> CREATE SEQUENCE DEPT_DEPT2;Sequence created.

ORACLE FUNCTIONS:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

143

Page 144: Oracle Queries

ORACLESQL> SELECT ABS(-20) FROM DUAL;

ABS(-20) ---------- 20

SQL> SELECT POWER(3,2) FROM DUAL;

POWER(3,2) ---------- 9

SQL> SELECT ROUND(15.19,1) FROM DUAL;

ROUND(15.19,1) -------------- 15.2

SQL> SELECT SQRT(25) FROM DUAL;

SQRT(25) ---------- 5

1 SELECT EXTRACT(YEAR FROM DATE '2004-07-02') "YEAR", 2* EXTRACT(MONTH FROM DATE '2004-07-02')"MONTH" FROM DUALSQL> /

YEAR MONTH ---------- ---------- 2004 7

SQL> SELECT MOD(15,7) "MOD1",MOD(15.7,7) "MOD2" FROM DUAL;

MOD1 MOD2 ---------- ---------- 1 1.7

SQL> SELECT FLOOR(24.8),FLOOR(13.15) FROM DUAL;

FLOOR(24.8) FLOOR(13.15) ----------- ------------ 24 13

SQL> SELECT CEIL(24.8),CEIL(13.15) FROM DUAL;

CEIL(24.8) CEIL(13.15)

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

144

Page 145: Oracle Queries

ORACLE---------- ----------- 25 14

SQL> SELECT TRANSLATE('1PAVAV523','123','7A9') FROM DUAL;

TRANSLATE --------- 7PAVAV5A9

SQL> SELECT LENGTH('PAVAN') FROM DUAL;

LENGTH('PAVAN') --------------- 5

SQL> SELECT LTRIM('NISHA','N') FROM DUAL;

LTRI ---- ISHA

SQL> SELECT RTRIM('NISHA','A') FROM DUAL;

RTRI ---- NISH

SQL> SELECT TRIM(' PAVAN ') FROM DUAL;

TRIM( ----- PAVAN

SQL> SELECT TRIM(LEADING 'X' FROM 'XXXHANSELXXX') FROM DUAL;

TRIM(LEAD --------- HANSELXXX

SQL> SELECT TRIM(BOTH 'X' FROM 'XXXHANSELXXX') FROM DUAL;

TRIM(B ------ HANSEL

SQL> SELECT TRIM(BOTH '1' FROM '123HANSEL12111') FROM DUAL;

TRIM(BOTH' ---------- 23HANSEL12

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

145

Page 146: Oracle Queries

ORACLE SQL> SELECT LPAD('PAGE 1',10,'*') "LPAD" FROM DUAL;

LPAD ---------- ****PAGE 1

SQL> SELECT RPAD(ENAME,10,'X') "RPAD" FROM EMP WHERE ENAME = 'SMITH';

RPAD ---------- SMITHXXXXX

SQL> SELECT ROUND(45.923,2),ROUND(45.923,0),ROUND(45.923,-1) FROM DUAL;

ROUND(45.923,2) ROUND(45.923,0) ROUND(45.923,-1) --------------- --------------- ---------------- 45.92 46 50

SQL> SELECT TRUNC(45.923,2),TRUNC(45.923,0),TRUNC(45.923,-1) FROM DUAL;

TRUNC(45.923,2) TRUNC(45.923,0) TRUNC(45.923,-1) --------------- --------------- ---------------- 45.92 45 40

SQL> SELECT HIREDATE,ROUND(HIREDATE,'MONTH'),TRUNC(HIREDATE,'MONTH') FROM EMP;

HIREDATE ROUND(HIR TRUNC(HIR --------- --------- --------- 17-DEC-80 01-JAN-81 01-DEC-80 20-FEB-81 01-MAR-81 01-FEB-81 22-FEB-81 01-MAR-81 01-FEB-81 02-APR-81 01-APR-81 01-APR-81 28-SEP-81 01-OCT-81 01-SEP-81 01-MAY-81 01-MAY-81 01-MAY-81 09-JUN-81 01-JUN-81 01-JUN-81 19-APR-87 01-MAY-87 01-APR-87 17-NOV-81 01-DEC-81 01-NOV-81 08-SEP-81 01-SEP-81 01-SEP-81 23-MAY-87 01-JUN-87 01-MAY-87 03-DEC-81 01-DEC-81 01-DEC-81 03-DEC-81 01-DEC-81 01-DEC-81 23-JAN-82 01-FEB-82 01-JAN-82

14 rows selected.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

146

Page 147: Oracle Queries

ORACLESQL> SELECT HIREDATE,ROUND(HIREDATE,'YEAR'),TRUNC(HIREDATE,'YEAR') FROM EMP;

HIREDATE ROUND(HIR TRUNC(HIR --------- --------- --------- 17-DEC-80 01-JAN-81 01-JAN-80 20-FEB-81 01-JAN-81 01-JAN-81 22-FEB-81 01-JAN-81 01-JAN-81 02-APR-81 01-JAN-81 01-JAN-81 28-SEP-81 01-JAN-82 01-JAN-81 01-MAY-81 01-JAN-81 01-JAN-81 09-JUN-81 01-JAN-81 01-JAN-81 19-APR-87 01-JAN-87 01-JAN-87 17-NOV-81 01-JAN-82 01-JAN-81 08-SEP-81 01-JAN-82 01-JAN-81 23-MAY-87 01-JAN-87 01-JAN-87 03-DEC-81 01-JAN-82 01-JAN-81 03-DEC-81 01-JAN-82 01-JAN-81 23-JAN-82 01-JAN-82 01-JAN-82

14 rows selected.

TO_NUMBER:

CONVERTS CHARACTER VALUE EXPRESSING A NUMBER TO A NUMBER DATA TYPE.

SELECT TO_NUMBER(SUBSTR('$100',2,3)) FROM DUAL;

SQL> SELECT TO_NUMBER(SUBSTR('$100',2,3)) FROM DUAL;

TO_NUMBER(SUBSTR('$100',2,3)) ----------------------------- 100

TO_CHAR:

CONVERTS A VALUE OF NUMBER DATATYPE TO A CHARACTER DATA TYPE.

SQL> SELECT TO_CHAR(1234,'$9,999') FROM DUAL;

TO_CHAR ------- $1,234

CONVERTS A DATE DATATYPE TO A CHARACTER DATA TYPE.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

147

Page 148: Oracle Queries

ORACLESQL> SELECT TO_CHAR(SYSDATE,'MONTH DD,YYYY') FROM DUAL;

TO_CHAR(SYSDATE,' ----------------- JULY 28,2005

SQL> SELECT TO_CHAR(SYSDATE,'MONTH DAY,YYYY') FROM DUAL;

TO_CHAR(SYSDATE,'MONTHDA ------------------------ JULY THURSDAY ,2005

SQL> SELECT TO_CHAR(SYSDATE,'MONTH DAY YEAR') FROM DUAL;

TO_CHAR(SYSDATE,'MONTHDAYYEAR') -------------------------------------------------------------- JULY THURSDAY TWO THOUSAND FIVE

SQL> SELECT TO_CHAR(SYSDATE,'MM DD YY') FROM DUAL;

TO_CHAR( -------- 07 28 05

SQL> SELECT TO_CHAR(SYSDATE,'DD MM YY') FROM DUAL;

TO_CHAR( -------- 28 07 05

TO_DATE:

CONVERTS A CHARACTER DATATYPE TO A DATE DATA TYPE.

SQL> SELECT TO_DATE('06/07/02','DD/MM/YY') FROM DUAL;

TO_DATE(' --------- 06-JUL-02

SPECIAL DATE FORMATS USING TO_CHAR :

SQL> SELECT ENAME,TO_CHAR(HIREDATE,'DDTH-MON-YY') FROM EMP;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

148

Page 149: Oracle Queries

ORACLEENAME TO_CHAR(HIR ---------- ----------- SMITH 17TH-DEC-80 ALLEN 20TH-FEB-81 WARD 22ND-FEB-81 JONES 02ND-APR-81 MARTIN 28TH-SEP-81 BLAKE 01ST-MAY-81 CLARK 09TH-JUN-81 SCOTT 19TH-APR-87 KING 17TH-NOV-81 TURNER 08TH-SEP-81 ADAMS 23RD-MAY-87 JAMES 03RD-DEC-81 FORD 03RD-DEC-81 MILLER 23RD-JAN-82

14 rows selected.

SQL> SELECT ENAME,TO_CHAR(HIREDATE,'DDSP-MON-YY') FROM EMP;

ENAME TO_CHAR(HIREDATE,'D ---------- ------------------- SMITH SEVENTEEN-DEC-80 ALLEN TWENTY-FEB-81 WARD TWENTY-TWO-FEB-81 JONES TWO-APR-81 MARTIN TWENTY-EIGHT-SEP-81 BLAKE ONE-MAY-81 CLARK NINE-JUN-81 SCOTT NINETEEN-APR-87 KING SEVENTEEN-NOV-81 TURNER EIGHT-SEP-81 ADAMS TWENTY-THREE-MAY-87 JAMES THREE-DEC-81 FORD THREE-DEC-81 MILLER TWENTY-THREE-JAN-82

14 rows selected.

SQL> SELECT ENAME,TO_CHAR(HIREDATE,'DDSPTH-MON-YY') FROM EMP;

ENAME TO_CHAR(HIREDATE,'DDS ---------- --------------------- SMITH SEVENTEENTH-DEC-80

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

149

Page 150: Oracle Queries

ORACLEALLEN TWENTIETH-FEB-81 WARD TWENTY-SECOND-FEB-81 JONES SECOND-APR-81 MARTIN TWENTY-EIGHTH-SEP-81 BLAKE FIRST-MAY-81 CLARK NINTH-JUN-81 SCOTT NINETEENTH-APR-87 KING SEVENTEENTH-NOV-81 TURNER EIGHTH-SEP-81 ADAMS TWENTY-THIRD-MAY-87 JAMES THIRD-DEC-81 FORD THIRD-DEC-81 MILLER TWENTY-THIRD-JAN-82

14 rows selected.

TURNING NUMERICS TO ALPHABETS:

THERE ARE TIMES WHEN AMOUNTS IN AN APPLICATION HAVE TO BE REPRESENTED BY ALPHABETICALLY.THIS CAN BE DONE BY JULIAN DATE CONVERSIONS.

SQL> SELECT TO_CHAR(TO_DATE(34654,'J'),'JSP') FROM DUAL;

TO_CHAR(TO_DATE(34654,'J'),'JSP') ------------------------------------------- THIRTY-FOUR THOUSAND SIX HUNDRED FIFTY-FOUR

SQL> SELECT TO_CHAR(TO_DATE(34654,'J'),'JsP') FROM DUAL;

TO_CHAR(TO_DATE(34654,'J'),'JSP') ------------------------------------------- Thirty-Four Thousand Six Hundred Fifty-Four

SQL> SELECT TO_CHAR(TO_DATE(34654,'J'),'jSP') FROM DUAL;

TO_CHAR(TO_DATE(34654,'J'),'JSP') ------------------------------------------- thirty-four thousand six hundred fifty-four

ADDING LINE FEEDS TO SELECT STATEMENT OUTPUT:

SQL> SELECT 'EMPLOYEE NAME:' ||ENAME||CHR(10) 2 || 'JOB:'|| JOB || CHR(10) || 3 'JOINING DATE:' || HIREDATE "EMPLOYEE DETAILS" FROM EMP;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

150

Page 151: Oracle Queries

ORACLEEMPLOYEE DETAILS ------------------------------------------------------------- EMPLOYEE NAME:SMITH JOB:CLERK JOINING DATE:17-DEC-80 EMPLOYEE NAME:ALLEN JOB:SALESMAN JOINING DATE:20-FEB-81 EMPLOYEE NAME:WARD JOB:SALESMAN JOINING DATE:22-FEB-81 EMPLOYEE NAME:JONES JOB:MANAGER JOINING DATE:02-APR-81 EMPLOYEE NAME:MARTIN JOB:SALESMAN JOINING DATE:28-SEP-81 EMPLOYEE NAME:BLAKE JOB:MANAGER JOINING DATE:01-MAY-81 EMPLOYEE NAME:CLARK JOB:MANAGER JOINING DATE:09-JUN-81 EMPLOYEE NAME:SCOTT JOB:ANALYST JOINING DATE:19-APR-87 EMPLOYEE NAME:KING JOB:PRESIDENT JOINING DATE:17-NOV-81 EMPLOYEE NAME:TURNER

EMPLOYEE DETAILS ------------------------------------------------------------- JOB:SALESMAN JOINING DATE:08-SEP-81 EMPLOYEE NAME:ADAMS JOB:CLERK JOINING DATE:23-MAY-87 EMPLOYEE NAME:JAMES

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

151

Page 152: Oracle Queries

ORACLEJOB:CLERK JOINING DATE:03-DEC-81 EMPLOYEE NAME:FORD JOB:ANALYST JOINING DATE:03-DEC-81 EMPLOYEE NAME:MILLER JOB:CLERK JOINING DATE:23-JAN-82

14 rows selected.

GROUP BY:

SQL> SELECT DEPTNO,JOB,SUM(SAL) 2 FROM EMP 3 GROUP BY DEPTNO,JOB;

DEPTNO JOB SUM(SAL) ---------- --------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600

10 rows selected.

ROLL UP:

1 SELECT DEPTNO,JOB,SUM(SAL) 2 FROM EMP 3* GROUP BY ROLLUP(DEPTNO,JOB) 4 /

DEPTNO JOB SUM(SAL) ---------- --------- ---------- 10 CLERK 1300 10 MANAGER 2450

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

152

Page 153: Oracle Queries

ORACLE 10 PRESIDENT 5000 10 8750 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 20 10875 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600 30 9400

29025

15 rows selected.

THE ABOVE QUERY IS COMBINATION OF :

GROUP BY DEPTNO,JOB.

GROUP BY DEPTNO.

GROUP BY ().

1 SELECT DEPTNO,JOB,SUM(SAL) FROM 2 EMP 3* GROUP BY DEPTNO,JOB 4 /

DEPTNO JOB SUM(SAL) ---------- --------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600

9 rows selected.

1 SELECT DEPTNO,SUM(SAL) FROM

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

153

Page 154: Oracle Queries

ORACLE 2 EMP 3* GROUP BY (DEPTNO)SQL> /

DEPTNO SUM(SAL) ---------- ---------- 10 8750 20 10875 30 9400

1 SELECT SUM(SAL) FROM 2 EMP 3* GROUP BY () 4 /

SUM(SAL) ---------- 29025

CUBE:

CUBE RETURNS SAME AS ROLL UP + ALL INDIVIDUAL JOBS SUM SALARIES.

1 SELECT DEPTNO,JOB,SUM(SAL) 2 FROM EMP 3* GROUP BY CUBE(DEPTNO,JOB)

SQL> /

DEPTNO JOB SUM(SAL) ---------- --------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 10 8750 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 20 10875 30 CLERK 950 30 MANAGER 2850

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

154

Page 155: Oracle Queries

ORACLE 30 SALESMAN 5600 30 9400 ANALYST 6000 CLERK 4150 MANAGER 8275 PRESIDENT 5000 SALESMAN 5600 29025

21 rows selected.

THE ABOVE QUERY IS COMBINATION OF :

GROUP BY DEPTNO,JOB.

GROUP BY DEPTNO.

GROUP BY JOB.

GROUP BY ().

1 SELECT DEPTNO,JOB,SUM(SAL) FROM 2 EMP 3* GROUP BY DEPTNO,JOB 4 /

DEPTNO JOB SUM(SAL) ---------- --------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600

9 rows selected.

1 SELECT DEPTNO,SUM(SAL) FROM 2 EMP 3* GROUP BY (DEPTNO)

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

155

Page 156: Oracle Queries

ORACLESQL> /

DEPTNO SUM(SAL) ---------- ---------- 10 8750 20 10875 30 9400

1 SELECT SUM(SAL) FROM 2 EMP 3* GROUP BY () 4 /

SUM(SAL) ---------- 29025

SQL> SELECT JOB,SUM(SAL) FROM EMP 2 GROUP BY JOB;

JOB SUM(SAL) --------- ---------- ANALYST 6000 CLERK 4150 MANAGER 8275 PRESIDENT 5000 SALESMAN 5600

GROUPING FUNCTION:

1 SELECT DEPTNO,JOB,SUM(SAL), 2 GROUPING(DEPTNO) GR_DEPTNO, 3 GROUPING(JOB) GR_JOB 4 FROM EMP 5* GROUP BY ROLLUP(DEPTNO,JOB) 6 /

DEPTNO JOB SUM(SAL) GR_DEPTNO GR_JOB ---------- --------- ---------- ---------- ---------- 10 CLERK 1300 0 0 10 MANAGER 2450 0 0 10 PRESIDENT 5000 0 0

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

156

Page 157: Oracle Queries

ORACLE 10 8750 0 1 20 ANALYST 6000 0 0 20 CLERK 1900 0 0 20 MANAGER 2975 0 0 20 10875 0 1 30 CLERK 950 0 0 30 MANAGER 2850 0 0 30 SALESMAN 5600 0 0 30 9400 0 1 0 0 0 1 29025 1 1

15 rows selected.

1 SELECT DEPTNO,JOB,SUM(SAL), 2 GROUPING(DEPTNO) GR_DEPTNO, 3 GROUPING(JOB) GR_JOB 4 FROM EMP 5* GROUP BY CUBE(DEPTNO,JOB)SQL> /

DEPTNO JOB SUM(SAL) GR_DEPTNO GR_JOB ---------- --------- ---------- ---------- ---------- 10 CLERK 1300 0 0 10 MANAGER 2450 0 0 10 PRESIDENT 5000 0 0 10 8750 0 1 20 ANALYST 6000 0 0 20 CLERK 1900 0 0 20 MANAGER 2975 0 0 20 10875 0 1 30 CLERK 950 0 0 30 MANAGER 2850 0 0 30 SALESMAN 5600 0 0 30 9400 0 1 ANALYST 6000 1 0 CLERK 4150 1 0 MANAGER 8275 1 0 PRESIDENT 5000 1 0 SALESMAN 5600 1 0 0 0 0 1 1 0 29025 1 1

21 rows selected.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

157

Page 158: Oracle Queries

ORACLEGROUPING SETS:

1 SELECT DEPTNO,JOB,MGR MANAGER_NO,AVG(SAL) 2 FROM EMP 3 GROUP BY GROUPING SETS 4* ((DEPTNO,JOB),(JOB,MGR))SQL> /

DEPTNO JOB MANAGER_NO AVG(SAL) ---------- --------- ---------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 3000 20 CLERK 950 20 MANAGER 2975 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 1400 ANALYST 7566 3000 CLERK 7698 950 CLERK 7782 1300 CLERK 7788 1100 CLERK 7902 800 MANAGER 7839 2758.33333 PRESIDENT 5000 SALESMAN 7698 1400

19 rows selected.

1 SELECT DEPTNO,JOB,MGR MANAGER_NO,SUM(SAL) 2 FROM EMP 3 GROUP BY GROUPING SETS 4* ((DEPTNO,JOB),(JOB,MGR))SQL> /

DEPTNO JOB MANAGER_NO SUM(SAL) ---------- --------- ---------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 30 CLERK 950 30 MANAGER 2850

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

158

Page 159: Oracle Queries

ORACLE 30 SALESMAN 5600 ANALYST 7566 6000 CLERK 7698 950 CLERK 7782 1300 CLERK 7788 1100 CLERK 7902 800 MANAGER 7839 8275 PRESIDENT 5000 SALESMAN 7698 5600

17 rows selected.

THE ABOVE IS COMBINATION OF:

GROUP BY DEPT,JOB.

GROUP BY JOB,MGR.

1 SELECT DEPTNO,JOB,SUM(SAL) 2 FROM EMP 3* GROUP BY(DEPTNO,JOB)SQL> /

DEPTNO JOB SUM(SAL) ---------- --------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600

9 rows selected.

1 SELECT JOB,MGR,SUM(SAL) 2 FROM EMP 3* GROUP BY(JOB,MGR)SQL> /

JOB MGR SUM(SAL) --------- ---------- ---------- ANALYST 7566 6000 CLERK 7698 950 CLERK 7782 1300 CLERK 7788 1100 CLERK 7902 800

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

159

Page 160: Oracle Queries

ORACLEMANAGER 7839 8275 PRESIDENT 5000 SALESMAN 7698 5600

8 rows selected.

COMPOSITE COLUMNS:

1 SELECT DEPTNO,JOB,MGR MANAGER_NO,SUM(SAL) 2 FROM EMP 3* GROUP BY ROLLUP(DEPTNO,(JOB,MGR))SQL> /

DEPTNO JOB MANAGER_NO SUM(SAL) ---------- --------- ---------- ---------- 10 CLERK 7782 1300 10 MANAGER 7839 2450 10 PRESIDENT 5000 10 8750 20 ANALYST 7566 6000 20 CLERK 7788 1100 20 CLERK 7902 800 20 MANAGER 7839 2975 20 10875 30 CLERK 7698 950 30 MANAGER 7839 2850 30 SALESMAN 7698 5600 30 9400 29025

14 rows selected.

THE ABOVE IS COMBINATION OF BELOW:

GROUP BY DEPTNO,JOB,MGR.

GROUP BY DEPTNO.

GROUP BY.

THE ABOVE QUERY DISPLAYS THE FOLLOWING:

TOTAL SALARY FOR EVERY DEPARTMENT.

TOTAL SALARY FOR EVERY DEPARTMENT,JOB,MGR.

GRNAD TOTAL.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

160

Page 161: Oracle Queries

ORACLE 1 SELECT DEPTNO,JOB,MGR,SUM(SAL) 2 FROM EMP 3* GROUP BY DEPTNO,JOB,MGRSQL> /

DEPTNO JOB MGR SUM(SAL) ---------- --------- ---------- ---------- 10 CLERK 7782 1300 10 MANAGER 7839 2450 10 PRESIDENT 5000 20 ANALYST 7566 6000 20 CLERK 7788 1100 20 CLERK 7902 800 20 MANAGER 7839 2975 30 CLERK 7698 950 30 MANAGER 7839 2850 30 SALESMAN 7698 5600

10 rows selected.

1 SELECT DEPTNO,SUM(SAL) 2 FROM EMP 3* GROUP BY DEPTNO 4 /

DEPTNO SUM(SAL) ---------- ---------- 10 8750 20 10875 30 9400

1 SELECT SUM(SAL) 2 FROM EMP 3* GROUP BY() 4 /

SUM(SAL) ---------- ---------- 29025

1 SELECT DEPTNO,JOB,MGR,SUM(SAL) 2 FROM EMP 3* GROUP BY CUBE(DEPTNO,(JOB,MGR))SQL> / DEPTNO JOB MGR SUM(SAL) ---------- --------- ---------- ---------- 20 ANALYST 7566 6000 30 CLERK 7698 950

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

161

Page 162: Oracle Queries

ORACLE 10 CLERK 7782 1300 20 CLERK 7788 1100 20 CLERK 7902 800 10 MANAGER 7839 2450 20 MANAGER 7839 2975 30 MANAGER 7839 2850 10 PRESIDENT 5000 30 SALESMAN 7698 5600 ANALYST 7566 6000 CLERK 7698 950 CLERK 7782 1300 CLERK 7788 1100 CLERK 7902 800 MANAGER 7839 8275 PRESIDENT 5000 SALESMAN 7698 5600 10 8750 20 10875 30 9400 29025

22 rows selected.

CONCATENATED GROUPING:

1 SELECT DEPTNO,JOB,MGR,SUM(SAL) 2 FROM EMP 3* GROUP BY DEPTNO,ROLLUP(JOB),CUBE(MGR)SQL> /

DEPTNO JOB MGR SUM(SAL) ---------- --------- ---------- ---------- 10 CLERK 7782 1300 10 MANAGER 7839 2450 10 PRESIDENT 5000 20 ANALYST 7566 6000 20 CLERK 7788 1100 20 MANAGER 7839 2975 20 CLERK 7902 800 30 CLERK 7698 950 30 SALESMAN 7698 5600 30 MANAGER 7839 2850 10 7782 1300 10 7839 2450 10 5000 20 7566 6000 20 7788 1100 20 7839 2975 20 7902 800 30 7698 6550

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

162

Page 163: Oracle Queries

ORACLE 30 7839 2850 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 10 8750 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 20 10875 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600 30 9400

31 rows selected.

THE ABOVE QUERY IS COMBINATION OF BELOW QUERIES:

GROUP BY DEPTNO,JOB,MGR.

GROUP BY DEPTNO,MGR.

GROUP BY DEPTNO,JOB.

GROUP BY DEPTNO.

THE ABOVE QUERY DISPLAYS THE FOLLOWING:

TOTAL SALARY FOR EVERY DEPARTEMENT NO,JOB,MGR.

TOTAL SALARY FOR EVERY DEPARTEMENT NO,MGR.

TOTAL SALARY FOR EVERY DEPARTEMENT NO,JOB.

TOTAL SALARY FOR EVERY DEPARTEMENT NO.

1 SELECT DEPTNO,JOB,MGR,SUM(SAL) 2 FROM EMP 3* GROUP BY DEPTNO,JOB,MGRSQL> /

DEPTNO JOB MGR SUM(SAL) ---------- --------- ---------- ---------- 10 CLERK 7782 1300 10 MANAGER 7839 2450 10 PRESIDENT 5000 20 ANALYST 7566 6000

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

163

Page 164: Oracle Queries

ORACLE 20 CLERK 7788 1100 20 CLERK 7902 800 20 MANAGER 7839 2975 30 CLERK 7698 950 30 MANAGER 7839 2850 30 SALESMAN 7698 5600

10 rows selected.

1 SELECT DEPTNO,MGR,SUM(SAL) 2 FROM EMP 3* GROUP BY DEPTNO,MGR 4 /

DEPTNO MGR SUM(SAL) ---------- ---------- ---------- 10 7782 1300 10 7839 2450 10 5000 20 7566 6000 20 7788 1100 20 7839 2975 20 7902 800 30 7698 6550 30 7839 2850

9 rows selected.

1 SELECT DEPTNO,JOB,SUM(SAL) 2 FROM EMP 3* GROUP BY DEPTNO,JOBSQL> /

DEPTNO JOB SUM(SAL) ---------- --------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

164

Page 165: Oracle Queries

ORACLE9 rows selected.

1 SELECT DEPTNO,SUM(SAL) 2 FROM EMP 3* GROUP BY DEPTNOSQL> /

DEPTNO SUM(SAL) ---------- ---------- 10 8750 20 10875 30 9400

“TOP_N “ ANALYSIS:

SQL> SELECT ROWNUM AS RANK,ENAME,SAL 2 FROM (SELECT ENAME,SAL FROM EMP ORDER BY SAL DESC) 3 WHERE ROWNUM <=3;

RANK ENAME SAL ---------- ---------- ---------- 1 KING 5000 2 SCOTT 3000 3 FORD 3000

RETRIEVE ONLY ROWS X TO Y FROM A TABLE:

1 SELECT * FROM (SELECT ROWNUM RN,ENAME FROM EMP) 2* WHERE RN BETWEEN 4 AND 73 /4

RN ENAME ---------- ---------- 4 JONES 5 MARTIN 6 BLAKE 7 CLARK

SQL> SELECT ROWNUM RN,ENAME FROM EMP GROUP BY ROWNUM,ENAME HAVING ROWNUM BETWEEN 4 AND 7;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

165

Page 166: Oracle Queries

ORACLE RN ENAME ---------- ---------- 4 JONES 5 MARTIN 6 BLAKE 7 CLARK RETRIVING EVEN AND ODD

NUMBER OF ROWS:

SQL> SELECT * FROM (SELECT ROWNUM RN,EMPNO,ENAME FROM EMP) E 2 WHERE MOD(E.RN,2)=0;

RN EMPNO ENAME ---------- ---------- ---------- 2 7499 ALLEN 4 7566 JONES 6 7698 BLAKE 8 7788 SCOTT 10 7844 TURNER 12 7900 JAMES 14 7934 MILLER

7 rows selected.

SQL> SELECT * FROM (SELECT ROWNUM RN,EMPNO,ENAME FROM EMP) E 2 WHERE MOD(E.RN,2)=1 3 /

RN EMPNO ENAME ---------- ---------- ---------- 1 7369 SMITH 3 7521 WARD 5 7654 MARTIN 7 7782 CLARK 9 7839 KING 11 7876 ADAMS 13 7902 FORD

7 rows selected.

AN AUTOMATIC COMMIT OCCURS UNDER THE FOLLOWING CIRCUMSTANCES:

DDL STATEMENT ISSUED.

DCL STATEMENT ISSUED.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

166

Page 167: Oracle Queries

ORACLENORMAL EXIT FROM SQL*PLUS WITHOUT EXPLICITLY ISSUING COMMIT OR ROLLBACK,AN AUTOMATIC ROLLBACK OCCURS UNDER AN ABNORMAL TERMINATION OF SQL*PLUS OR SYSTEM FAILURE.

DROPING COLUMN:

SQL> CREATE TABLE EMP1 2 AS 3 SELECT * FROM EMP;

Table created.

SQL> ALTER TABLE EMP1 2 SET UNUSED COLUMN MGR;

Table altered.

SQL> DESC EMP1 Name Null? Type ----------------------------------------------------- -------- ------------------------------------ EMPNO NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2)

SQL> ALTER TABLE EMP1 2 DROP UNUSED COLUMNS;

Table altered.

SQL> DESC EMP1 Name Null? Type ----------------------------------------------------- -------- ------------------------------------ EMPNO NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) HIREDATE DATE

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

167

Page 168: Oracle Queries

ORACLE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2)

SOUNDEX:

SQL> CREATE TABLE MYFRIENDS 2 (NAME VARCHAR2(10));

Table created.

SQL> INSERT INTO MYFRIENDS 2 VALUES 3 ('NEETA');

1 row created.

1 INSERT INTO MYFRIENDS 2 VALUES 3* ('MITA')SQL> /

1 row created.

1 INSERT INTO MYFRIENDS 2 VALUES 3* ('DIPU')SQL> /

1 row created.

1 INSERT INTO MYFRIENDS 2 VALUES 3* ('DEEPU')SQL> /

1 row created.

1 INSERT INTO MYFRIENDS 2 VALUES

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

168

Page 169: Oracle Queries

ORACLE 3* ('DIPA')SQL> /

1 row created.

1 INSERT INTO MYFRIENDS 2 VALUES 3* ('ANIL')SQL> /

1 row created.

1 INSERT INTO MYFRIENDS 2 VALUES 3* ('SUNIL')SQL> /

1 row created.

SQL> SELECT * FROM MYFRIENDS;

NAME ---------- NEETA MITA DIPU DEEPU DIPA ANIL SUNIL

7 rows selected.

SQL> SELECT * FROM MYFRIENDS 2 WHERE SOUNDEX(NAME) = SOUNDEX('DEEP');

NAME ---------- DIPU DEEPU DIPA

SQL> SELECT SOUNDEX(NAME),NAME,SOUNDEX('DEEP') FROM MYFRIENDS;

SOUN NAME SOUN

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

169

Page 170: Oracle Queries

ORACLE---- ---------- ---- N300 NEETA D100 M300 MITA D100 D100 DIPU D100 D100 DEEPU D100 D100 DIPA D100 A540 ANIL D100 S540 SUNIL D100

7 rows selected.

GENERATING PRIMARY KEY NUMBERS USING ROW NUM AND SEQUENCES:

SQL> CREATE TABLE CUSTOMERS1 2 (CUST_NO NUMBER(10), 3 NAME VARCHAR2(10));

Table created.

SQL> INSERT INTO CUSTOMERS1 2 VALUES 3 (0,'PAVAN');

1 row created.

1 INSERT INTO CUSTOMERS1 2 VALUES 3* (0,'KUMAR')SQL> /

1 row created.

1 INSERT INTO CUSTOMERS1 2 VALUES 3* (0,'GAYATRI')SQL> /

1 row created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

170

Page 171: Oracle Queries

ORACLE 1 INSERT INTO CUSTOMERS1 2 VALUES 3* (0,'SRISHA')SQL> /

1 row created.

1 UPDATE CUSTOMERS1 2* SET CUST_NO = ROWNUMSQL> /

4 rows updated.

SQL> SELECT * FROM CUSTOMERS1;

CUST_NO NAME ---------- ---------- 1 PAVAN 2 KUMAR 3 GAYATRI 4 SRISHA

SQL> CREATE SEQUENCE CUSTOMERS1_SEQ 2 INCREMENT BY 1 3 START WITH 10;

Sequence created.

SQL> UPDATE CUSTOMERS1 2 SET CUST_NO = CUSTOMERS1_SEQ.NEXTVAL;

4 rows updated.

SQL> SELECT * FROM CUSTOMERS1;

CUST_NO NAME ---------- ---------- 10 PAVAN 11 KUMAR 12 GAYATRI 13 SRISHA

CONDITIONAL EXPRESSIONS:

PROVIDE THE USE OF IF-THEN-ELSE LOGIC WITHIN A SQL STATEMENT.

CASE EXPRESSION.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

171

Page 172: Oracle Queries

ORACLE DECODE FUNCTION.

CASE:

1 SELECT EMPNO,ENAME,SAL,

2 CASE JOB WHEN 'MANAGER' THEN 1.10 *SAL

3 WHEN 'CLERK' THEN 1.15 *SAL

4 WHEN 'SALESMAN'THEN 1.20 *SAL

5 ELSE SAL END "REVISED_SALARY"

6* FROM EMP

SQL> /

EMPNO ENAME SAL REVISED_SALARY ---------- ---------- ---------- -------------- 7369 SMITH 800 920 7499 ALLEN 1600 1920 7521 WARD 1250 1500 7566 JONES 2975 3272.5 7654 MARTIN 1250 1500 7698 BLAKE 2850 3135 7782 CLARK 2450 2695 7788 SCOTT 3000 3000 7839 KING 5000 5000 7844 TURNER 1500 1800 7876 ADAMS 1100 1265 7900 JAMES 950 1092.5 7902 FORD 3000 3000 7934 MILLER 1300 1495 14 rows selected.

DECODE:

1 SELECT EMPNO,ENAME,SAL,

2 DECODE (JOB,'MANAGER' ,1.10 *SAL,

3 'CLERK' ,1.15 *SAL,

4 'SALESMAN' ,1.20 *SAL,

5 SAL ) "REVISED_SALARY"

6* FROM EMP

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

172

Page 173: Oracle Queries

ORACLE 7 /

EMPNO ENAME SAL REVISED_SALARY ---------- ---------- ---------- -------------- 7369 SMITH 800 920 7499 ALLEN 1600 1920 7521 WARD 1250 1500 7566 JONES 2975 3272.5 7654 MARTIN 1250 1500 7698 BLAKE 2850 3135 7782 CLARK 2450 2695 7788 SCOTT 3000 3000 7839 KING 5000 5000 7844 TURNER 1500 1800 7876 ADAMS 1100 1265 7900 JAMES 950 1092.5 7902 FORD 3000 3000 7934 MILLER 1300 1495

14 rows selected.

VIEWS:

WHAT IS VIEW?

AVIEW IS A LOGICAL TABLE BASED ON ONE OR MORE TABLES OR ANOTHER VIEW.

A VIEW CONTAINS NO DATA OF ITS OWN BUT IS LIKE A WINDOW THROUGH WHICH DATA FROM TABLES CAN BE VIEWED OR CHANGED.

THE TABLES ON WHICH A VIEW IS BASED ARE CALLED BASE TABLES.

THE VIEW IS STORED AS SELECT STATEMENT IN THE DATA DICTIONARY.

WHY USE VIEWS:

TO RESTRICT DATA ACCESS.

TO MAKE COMPLEX QUERIES EASY.

TO PROVIDE DATA INDEPENDENCE.

TO PRESENT DIFFERENT VIEWS OF THE SAME DATA.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

173

Page 174: Oracle Queries

ORACLEADVANTAGES OF VIEWS:

VIEWS RESTRICT ACCESS TO THE DATA BECAUSE THE VIEW CAN DISPLAY SELECTIVE COLUMNS FROM THE TABLES.

VIEWS ALLOW USERS TO MAKE SIMPLE QUERIES TO RETRIVE THE RESULTS FROM COMPLICATED QUERIES. FOR EXAMPLE, VIEW ALLOWS USERS TO QUERY INFORMATION FROM MULTIPLE TABLES WITHOUT KNOWING HOW TO WRITE JOIN STATEMENT.

ONE VIEW CAN BE USED TO RETRIEVE DATA FROM SEVERAL TABLES.

VIEWS PROVIDE GROUPS OF USERS ACCESS TO DATA ACCORDING TO THEIR PARTICULAR CRITERIA.

FEATURE SIMPLE VIEWS COMPLEX VIEWS

NUMBER OF TABLES ONE ONE OR MORECONTAINS FUNCTIONS NO YESCONTAINS GROUPS OF DATA NO YESDML THROUGH VIEW YES NOT ALWAYS

CREATION OF THE VIEW:

CREATE [ OR REPLACE [FORCE\NOFORCE] VIEW VIEW_NAME

[(ALIAS[,ALIAS…..)]

AS SUBQUERY

[WITH CHECK OPTION[CONSTRAINT CONSTRAINT_NAME]]

[WITH READ ONLY[CONSTRAINT CONSTRAINT_NAME]]

IN THE SYNTAX:

OR REPLACE RECREATES THE VIEW IF ALREADY EXISTS.

FORCE CREATES THE VIEW REGARDLESS OF WHETHER OR NOT THE BASE TABLES EXIST.

NOFORCE CREATES THE VIEW ONLY OF THE BASE TABLES EXIST.(THIS IS DEFAULT).

VIEW NAME OF THE VIEW.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

174

Page 175: Oracle Queries

ORACLEALIAS ALIAS NAME FOR COLUMNS SELECTED BY QUERY, THEY SHOULD MATCH.

SUBQUERY SELECT SATETMENT.

WITH CHECK OPTION SPECIFIES THAT ONLY ROWS ACCESSIBLE TO THE VIEW CAN BE INSERTED OR UPDATED.

CONSTRAINT NAME OF CONSTRAINT.

WITH READ ONLY ENSURES THAT NO DML OPERATIONS CAN BE PERFORMED ON THIS VIEW.

GUIDELINES FOR CREATING A VIEW:

THE SUBQUERY THAT DEFINES THE VIEW CANNOT CONTAIN AN ORDER BY CLAUSE. THE ORDER BYCLAUSE IS SPECIFIED WHEN YOU RETRIVE THE DATA FROM THE VIEW.

SQL> CREATE TABLE EMP_DUP 2 AS 3 SELECT * FROM EMP;

Table created.

SQL> CREATE VIEW EMPVU10 2 AS 3 SELECT * FROM EMP_DUP WHERE DEPTNO=10;

View created.

SQL> DESC EMPVU10; Name Null? Type ----------------------------------------------------- -------- ------------------------------------ EMPNO NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2)

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

175

Page 176: Oracle Queries

ORACLESQL> SELECT * FROM EMPVU10;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7839 KING PRESIDENT 17-NOV-81 5000 10 7934 MILLER CLERK 7782 23-JAN-82 1300 10

THIS IS A SIMPLE VIEW.HERE WE CAN DO ALL DML OPERATIONS.

SQL> INSERT INTO EMPVU10 2 VALUES 3 (1,'PAVAN','MANAGER',7369,'01-DEC-91',1000,100,10);

1 row created.

SQL> SELECT * FROM EMPVU10;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7839 KING PRESIDENT 17-NOV-81 5000 10 7934 MILLER CLERK 7782 23-JAN-82 1300 10 1 PAVAN MANAGER 7369 01-DEC-91 1000 100 10

SQL> SELECT * FROM EMP_DUP WHERE DEPTNO=10;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7839 KING PRESIDENT 17-NOV-81 5000 10 7934 MILLER CLERK 7782 23-JAN-82 1300 10 1 PAVAN MANAGER 7369 01-DEC-91 1000 100 10

HERE DATA IS INSERTED INTO EMP_DUP TABLE.

IN THE SIMPLE VIEW WE CAN PERFORM INSERTION ,DELETION,UPDATION.THE BASE TABLE WILL BE AFFECTED,BECAUSE VIEW DOES NOT CONTAIN ANY DATA.

IF YOU WANT SEE THE VIEWS CREATED IN THE DATABASE:

SQL> DESC USER_VIEWS Name Null? Type ----------------------------------------------------- -------- ------------------------------------ VIEW_NAME NOT NULL VARCHAR2(30) TEXT_LENGTH NUMBER TEXT LONG TYPE_TEXT_LENGTH NUMBER

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

176

Page 177: Oracle Queries

ORACLE TYPE_TEXT VARCHAR2(4000) OID_TEXT_LENGTH NUMBER OID_TEXT VARCHAR2(4000) VIEW_TYPE_OWNER VARCHAR2(30) VIEW_TYPE VARCHAR2(30) SUPERVIEW_NAME VARCHAR2(30)

SQL> SELECT VIEW_NAME,TEXT FROM USER_VIEWS WHERE VIEW_NAME='EMPVU10';

VIEW_NAME ------------------------------ TEXT -------------------------------------------------------------------------------- EMPVU10 SELECT "EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","DEPTNO" FROM EMP_DUP

ORACLE SERVER

SQL * PLUS:

SELECT * FROM VIEW;

WHEN EVER WE QUERY A VIEW,SQL*PLUS WILL GO TO USER_VIEWS AND PICK THE SELECT STATEMENTFROM THE TABLE AND EXECUTE THE QUERY ON THE BASE TABLE AND RESULT OF BASE TABLE INFO WILL BE DISPLAYED THROUGH VIEW.

SQL> CREATE VIEW EMPVU1_10 2 AS 3 SELECT EMPNO,ENAME FROM EMP_DUP

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

USER_VIEWS.IT SEES THE SELECT STATEMENT HERE.

BASE TABLE.IT EXECUTES QUERY ON THIS TABLE AND SENDS OUTPUT TO SQL*PLUS.

177

Page 178: Oracle Queries

ORACLE 4 WHERE DEPTNO=10;

View created.

SQL> DESC EMPVU1_10 Name Null? Type ----------------------------------------------------- -------- ------------------------------------ EMPNO NUMBER(4) ENAME VARCHAR2(10)

SQL> SELECT VIEW_NAME,TEXT FROM USER_VIEWS WHERE VIEW_NAME='EMPVU1_10';

VIEW_NAME ------------------------------ TEXT -------------------------------------------------------------------------------- EMPVU1_10 SELECT EMPNO,ENAME FROM EMP_DUP WHERE DEPTNO=10

SQL> UPDATE EMPVU10 2 SET SAL = 1000;

4 rows updated.

SQL> SELECT * FROM EMP_DUP WHERE DEPTNO=10;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7782 CLARK MANAGER 7839 09-JUN-81 1000 10 7839 KING PRESIDENT 17-NOV-81 1000 10 7934 MILLER CLERK 7782 23-JAN-82 1000 10 1 PAVAN MANAGER 7369 01-DEC-91 1000 100 10

SQL> SELECT * FROM EMPVU10;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7782 CLARK MANAGER 7839 09-JUN-81 1000 10 7839 KING PRESIDENT 17-NOV-81 1000 10 7934 MILLER CLERK 7782 23-JAN-82 1000 10 1 PAVAN MANAGER 7369 01-DEC-91 1000 100 10

1 DELETE FROM EMPVU10 2* WHERE JOB='MANAGER'SQL> /

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

178

Page 179: Oracle Queries

ORACLE2 rows deleted.

SQL> SELECT * FROM EMPVU10;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7839 KING PRESIDENT 17-NOV-81 1000 10 7934 MILLER CLERK 7782 23-JAN-82 1000 10

1 SELECT * FROM EMP_DUP 2* WHERE DEPTNO=10SQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7839 KING PRESIDENT 17-NOV-81 1000 10 7934 MILLER CLERK 7782 23-JAN-82 1000 10

MODIFYING VIEW:

SQL> CREATE VIEW EMPVU20 2 (EMPLOYEE_NO,EMPLOYEE_NAME) 3 AS 4 SELECT EMPNO,ENAME FROM EMP_DUP 5 WHERE DEPTNO=20;

View created.

SQL> DESC EMPVU20 Name Null? Type ----------------------------------------------------- -------- ------------------------------------ EMPLOYEE_NO NUMBER(4) EMPLOYEE_NAME VARCHAR2(10)

SQL> CREATE VIEW EMPVU20 2 AS 3 SELECT * FROM EMP_DUP 4 WHERE DEPTNO=20;CREATE VIEW EMPVU20 *ERROR at line 1:ORA-00955: name is already used by an existing object

1 CREATE OR REPLACE VIEW EMPVU20 2 AS 3 SELECT * FROM EMP_DUP

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

179

Page 180: Oracle Queries

ORACLE 4* WHERE DEPTNO=20SQL> /

View created.

SQL> DESC EMPVU20 Name Null? Type ----------------------------------------------------- -------- ------------------------------------ EMPNO NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2)

HERE ORIGINAL DEFINITION OF THE VIEW REPLACED BY THE CURRENT DEFINITION.

SQL> CREATE VIEW EMPVU30 2 AS 3 SELECT EMPNO EMPLOYEE_NO,ENAME EMPLOYEE_NAME FROM EMP_DUP 4 WHERE DEPTNO=30;

View created.

SQL> DESC EMPVU30 Name Null? Type ----------------------------------------------------- -------- ------------------------------------ EMPLOYEE_NO NUMBER(4) EMPLOYEE_NAME VARCHAR2(10)

THE CREATE OR REPLACE OPTION ALLOWS A VIEW TO BE CREATED EVEN IF ONE EXISTS WITH THIS NAME ALREADY, THUS REPLACING OLD VERSION OF THE VIEW.

RULES FOR PERFORMING DML ON VIEW:

YOU CAN PERFORM DML OPERATIONS ON SIMPLE VIEWS.

YOU CANNOT REMOVE A ROW IF THE VIEW CONTAINS THE FOLLOWING:

GROUP FUNCTIONS.

A GROUP BY CLAUSE.

THE DISTINCT KEYWORD.

THE PSEUDOCOLUMN ROWNUM KEYWORD.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

180

Page 181: Oracle Queries

ORACLEYOU CANNOT MODIFY DATA IN A VIEW IF IT CONTAINS THE FOLLOWING:

GROUP FUNCTIONS.

A GROUP BY CLAUSE.

THE DISTINCT KEYWORD.

THE PSEUDOCOLUMN ROWNUM KEYWORD.

COLUMNS DEFINED BY EXPRESSIONS.

YOU CANNOT ADD DATA IN A VIEW IF IT CONTAINS THE FOLLOWING:

GROUP FUNCTIONS.

A GROUP BY CLAUSE.

THE DISTINCT KEYWORD.

THE PSEUDOCOLUMN ROWNUM KEYWORD.

COLUMNS DEFINED BY EXPRESSIONS.

NOT NULL COLUMNS IN THE BASE TABLES THAT ARE NOT SELECTED BY THE

VIEW.

USING THE WITH CHECK OPTION CLAUSE:

THE WITH CHECK OPTION CLAUSE SPECIFIES THAT INSERTS AND UPDATES PERFORMED THROUGH THE VIEW CANNOT CREATE ROWS WHICH THE VIEW CANNOT SELECT.

SQL> CREATE TABLE EMP_DUP1 2 AS 3 SELECT * FROM EMP;

Table created.

SQL> CREATE VIEW EMP_DUPVU20

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

181

Page 182: Oracle Queries

ORACLE 2 AS 3 SELECT EMPNO,ENAME,JOB,DEPTNO FROM EMP_DUP1 4 WHERE DEPTNO=20;

View created.

SQL> DESC EMP_DUPVU20 Name Null? Type ----------------------------------------------------- -------- ------------------------------------ EMPNO NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) DEPTNO NUMBER(2)

SQL> SELECT * FROM EMP_DUPVU20;

EMPNO ENAME JOB DEPTNO ---------- ---------- --------- ---------- 7369 SMITH CLERK 20 7566 JONES MANAGER 20 7788 SCOTT ANALYST 20 7876 ADAMS CLERK 20 7902 FORD ANALYST 20

SQL> UPDATE EMP_DUPVU20 2 SET DEPTNO=1;

5 rows updated.

SQL> SELECT * FROM EMP_DUPVU20;

no rows selected

HERE IF YOU WANT TO STOP ANY UPDATE OR INSERT ON THIS VIEW.

SQL> DROP TABLE EMP_DUP1;

Table dropped.

SQL> CREATE TABLE EMP_DUP1 2 AS 3 SELECT * FROM EMP;

Table created.

SQL> DROP VIEW EMP_DUPVU20;

View dropped.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

182

Page 183: Oracle Queries

ORACLESQL> CREATE VIEW EMP_DUPVU20 2 AS 3 SELECT EMPNO,ENAME,JOB,DEPTNO FROM EMP_DUP1 4 WHERE DEPTNO=20 5 WITH CHECK OPTION CONSTRAINT EMP_DUPVU20_VIEWCHECK;

View created.

SQL> UPDATE EMP_DUPVU20 2 SET DEPTNO=1;UPDATE EMP_DUPVU20 *ERROR at line 1:ORA-01402: view WITH CHECK OPTION where-clause violation

SQL> INSERT INTO EMP_DUPVU20 2 VALUES 3 (1,'PAVAN','MANAGER',10);INSERT INTO EMP_DUPVU20 *ERROR at line 1:ORA-01402: view WITH CHECK OPTION where-clause violation

SQL> SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE FROM USER_CONSTRAINTS 2 WHERE TABLE_NAME='EMP_DUPVU20';

CONSTRAINT_NAME C ------------------------------ - EMP_DUPVU20_VIEWCHECK V

NO ROWS ARE UPDATED BECAUSE IF THE DEPARTMENT NUMBER WAS CHANGE TO 1, THE VIEW WOULD NO LONGER BE ABLE TO SEE THAT EMPLOYEES OF 20.THUS WE CANNOT CHANGE THE VIEW DEFINITION.

HERE WE CAN UPDATE ANY OTHER COLUMNS WITHOUT AFFECTING VIEW DEFINITION.

READ ONLY VIEWS:

DENYING DML OPERATIONS ON THE VIEW BY KEEPING READ ONLY CONSTRAINT.

SQL> CREATE VIEW EMP_DUP30VU 2 AS 3 SELECT * FROM EMP_DUP1 4 WITH READ ONLY CONSTRAINT EMP_DUP30VU_READONLY;

View created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

183

Page 184: Oracle Queries

ORACLESQL> UPDATE EMP_DUP30VU 2 SET DEPTNO=30;SET DEPTNO=30 *ERROR at line 2:ORA-01733: virtual column not allowed here

SQL> INSERT INTO EMP_DUP30VU 2 VALUES 3 (1,'PAVAN','MANAGER',7369,'01-DEC-92',1000,100,30);INSERT INTO EMP_DUP30VU*ERROR at line 1:ORA-01733: virtual column not allowed here

SQL> DELETE FROM EMP_DUP30VU;DELETE FROM EMP_DUP30VU *ERROR at line 1:ORA-01752: cannot delete from view without exactly one key-preserved table

SQL> SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE FROM USER_CONSTRAINTS 2 WHERE TABLE_NAME='EMP_DUP30VU';

CONSTRAINT_NAME C ------------------------------ - EMP_DUP30VU_READONLY O

HERE NO DELETION,NO UPDATION ,NO INSERTION ON THE VIEW. ONLY READ. IN THE USER_CONSTRAINTS TABLE CONSTRAINT_TYPE IS ‘O’.

COMPLEX VIEWS:

1 CREATE VIEW DEPT_SUM_VU 2 (NAME,MINSAL,MAXSAL,AVGSAL) 3 AS 4 SELECT D.DNAME,MIN(E.SAL),MAX(E.SAL),AVG(E.SAL) 5 FROM EMP E, DEPT D 6 WHERE E.DEPTNO=D.DEPTNO 7* GROUP BY D.DNAME 8 /

View created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

184

Page 185: Oracle Queries

ORACLESQL> SELECT * FROM DEPT_SUM_VU;

NAME MINSAL MAXSAL AVGSAL -------------- ---------- ---------- ---------- ACCOUNTING 1300 5000 2916.66667 RESEARCH 800 3000 2175 SALES 950 2850 1566.66667

SQL> DESC DEPT_SUM_VU Name Null? Type ----------------------------------------------------- -------- ------------------------------------ NAME VARCHAR2(14) MINSAL NUMBER MAXSAL NUMBER AVGSAL NUMBER

SQL> INSERT INTO DEPT_SUM_VU 2 VALUES 3 ('COMPUTERS',111,111,111);INSERT INTO DEPT_SUM_VU *ERROR at line 1:ORA-01732: data manipulation operation not legal on this view

SQL> UPDATE DEPT_SUM_VU 2 SET NAME='COMPUTERS';UPDATE DEPT_SUM_VU *ERROR at line 1:ORA-01732: data manipulation operation not legal on this view

SQL> DELETE FROM DEPT_SUM_VU;DELETE FROM DEPT_SUM_VU *ERROR at line 1:ORA-01732: data manipulation operation not legal on this view

SQL> CREATE VIEW EQUI_JOINVU 2 AS 3 SELECT EMPNO,ENAME,DEPTNO,DNAME,LOC FROM EMP NATURAL JOIN DEPT;

View created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

185

Page 186: Oracle Queries

ORACLESQL> SELECT * FROM EQUI_JOINVU;

EMPNO ENAME DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 7369 SMITH 20 RESEARCH DALLAS 7499 ALLEN 30 SALES CHICAGO 7521 WARD 30 SALES CHICAGO 7566 JONES 20 RESEARCH DALLAS 7654 MARTIN 30 SALES CHICAGO 7698 BLAKE 30 SALES CHICAGO 7782 CLARK 10 ACCOUNTING NEW YORK 7788 SCOTT 20 RESEARCH DALLAS 7839 KING 10 ACCOUNTING NEW YORK 7844 TURNER 30 SALES CHICAGO 7876 ADAMS 20 RESEARCH DALLAS 7900 JAMES 30 SALES CHICAGO 7902 FORD 20 RESEARCH DALLAS 7934 MILLER 10 ACCOUNTING NEW YORK

14 rows selected.

DROPING VIEW:

SQL> DROP VIEW EMPVU10;

View dropped.

GROUP BY:

SQL> SELECT DEPTNO,JOB,SUM(SAL) 2 FROM EMP 3 GROUP BY DEPTNO,JOB;

DEPTNO JOB SUM(SAL) ---------- --------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600

10 rows selected.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

186

Page 187: Oracle Queries

ORACLEROLL UP:

1 SELECT DEPTNO,JOB,SUM(SAL) 2 FROM EMP 3* GROUP BY ROLLUP(DEPTNO,JOB) 4 /

DEPTNO JOB SUM(SAL) ---------- --------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 10 8750 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 20 10875 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600 30 9400

29025

15 rows selected.

THE ABOVE QUERY IS COMBINATION OF :

GROUP BY DEPTNO,JOB.

GROUP BY DEPTNO.

GROUP BY ().

1 SELECT DEPTNO,JOB,SUM(SAL) FROM 2 EMP 3* GROUP BY DEPTNO,JOB 4 /

DEPTNO JOB SUM(SAL) ---------- --------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

187

Page 188: Oracle Queries

ORACLE 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600

9 rows selected.

1 SELECT DEPTNO,SUM(SAL) FROM 2 EMP 3* GROUP BY (DEPTNO)SQL> /

DEPTNO SUM(SAL) ---------- ---------- 10 8750 20 10875 30 9400

1 SELECT SUM(SAL) FROM 2 EMP 3* GROUP BY () 4 /

SUM(SAL) ---------- 29025 CUBE:

CUBE RETURNS SAME AS ROLL UP + ALL INDIVIDUAL JOBS SUM SALARIES.

1 SELECT DEPTNO,JOB,SUM(SAL) 2 FROM EMP 3* GROUP BY CUBE(DEPTNO,JOB)

SQL> /

DEPTNO JOB SUM(SAL) ---------- --------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 10 8750 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 20 10875 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600 30 9400 ANALYST 6000

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

188

Page 189: Oracle Queries

ORACLE CLERK 4150 MANAGER 8275 PRESIDENT 5000 SALESMAN 5600 29025

21 rows selected.

THE ABOVE QUERY IS COMBINATION OF :

GROUP BY DEPTNO,JOB.

GROUP BY DEPTNO.

GROUP BY JOB.

GROUP BY ().

1 SELECT DEPTNO,JOB,SUM(SAL) FROM 2 EMP 3* GROUP BY DEPTNO,JOB 4 /

DEPTNO JOB SUM(SAL) ---------- --------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600

9 rows selected.

1 SELECT DEPTNO,SUM(SAL) FROM 2 EMP 3* GROUP BY (DEPTNO)SQL> /

DEPTNO SUM(SAL) ---------- ----------

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

189

Page 190: Oracle Queries

ORACLE 10 8750 20 10875 30 9400

1 SELECT SUM(SAL) FROM 2 EMP 3* GROUP BY () 4 /

SUM(SAL) ---------- 29025

SQL> SELECT JOB,SUM(SAL) FROM EMP 2 GROUP BY JOB;

JOB SUM(SAL) --------- ---------- ANALYST 6000 CLERK 4150 MANAGER 8275 PRESIDENT 5000 SALESMAN 5600

GROUPING FUNCTION:

1 SELECT DEPTNO,JOB,SUM(SAL), 2 GROUPING(DEPTNO) GR_DEPTNO, 3 GROUPING(JOB) GR_JOB 4 FROM EMP 5* GROUP BY ROLLUP(DEPTNO,JOB) 6 /

DEPTNO JOB SUM(SAL) GR_DEPTNO GR_JOB ---------- --------- ---------- ---------- ---------- 10 CLERK 1300 0 0 10 MANAGER 2450 0 0 10 PRESIDENT 5000 0 0 10 8750 0 1 20 ANALYST 6000 0 0 20 CLERK 1900 0 0 20 MANAGER 2975 0 0 20 10875 0 1 30 CLERK 950 0 0 30 MANAGER 2850 0 0 30 SALESMAN 5600 0 0

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

190

Page 191: Oracle Queries

ORACLE 30 9400 0 1 0 0 0 1 29025 1 1

15 rows selected.

1 SELECT DEPTNO,JOB,SUM(SAL), 2 GROUPING(DEPTNO) GR_DEPTNO, 3 GROUPING(JOB) GR_JOB 4 FROM EMP 5* GROUP BY CUBE(DEPTNO,JOB)SQL> /

DEPTNO JOB SUM(SAL) GR_DEPTNO GR_JOB ---------- --------- ---------- ---------- ---------- 10 CLERK 1300 0 0 10 MANAGER 2450 0 0 10 PRESIDENT 5000 0 0 10 8750 0 1 20 ANALYST 6000 0 0 20 CLERK 1900 0 0 20 MANAGER 2975 0 0 20 10875 0 1 30 CLERK 950 0 0 30 MANAGER 2850 0 0 30 SALESMAN 5600 0 0 30 9400 0 1 ANALYST 6000 1 0 CLERK 4150 1 0 MANAGER 8275 1 0 PRESIDENT 5000 1 0 SALESMAN 5600 1 0 0 0 0 1 1 0 29025 1 1

21 rows selected.

GROUPING SETS:

1 SELECT DEPTNO,JOB,MGR MANAGER_NO,AVG(SAL) 2 FROM EMP 3 GROUP BY GROUPING SETS 4* ((DEPTNO,JOB),(JOB,MGR))SQL> /

DEPTNO JOB MANAGER_NO AVG(SAL)

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

191

Page 192: Oracle Queries

ORACLE---------- --------- ---------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 3000 20 CLERK 950 20 MANAGER 2975 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 1400 ANALYST 7566 3000 CLERK 7698 950 CLERK 7782 1300 CLERK 7788 1100 CLERK 7902 800 MANAGER 7839 2758.33333 PRESIDENT 5000 SALESMAN 7698 1400

19 rows selected.

1 SELECT DEPTNO,JOB,MGR MANAGER_NO,SUM(SAL) 2 FROM EMP 3 GROUP BY GROUPING SETS 4* ((DEPTNO,JOB),(JOB,MGR))SQL> /

DEPTNO JOB MANAGER_NO SUM(SAL) ---------- --------- ---------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600 ANALYST 7566 6000 CLERK 7698 950 CLERK 7782 1300 CLERK 7788 1100 CLERK 7902 800 MANAGER 7839 8275 PRESIDENT 5000 SALESMAN 7698 5600

17 rows selected.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

192

Page 193: Oracle Queries

ORACLETHE ABOVE IS COMBINATION OF:

GROUP BY DEPT,JOB.

GROUP BY JOB,MGR.

1 SELECT DEPTNO,JOB,SUM(SAL) 2 FROM EMP 3* GROUP BY(DEPTNO,JOB)SQL> /

DEPTNO JOB SUM(SAL) ---------- --------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600

9 rows selected.

1 SELECT JOB,MGR,SUM(SAL) 2 FROM EMP 3* GROUP BY(JOB,MGR)SQL> /

JOB MGR SUM(SAL) --------- ---------- ---------- ANALYST 7566 6000 CLERK 7698 950 CLERK 7782 1300 CLERK 7788 1100 CLERK 7902 800 MANAGER 7839 8275 PRESIDENT 5000 SALESMAN 7698 5600

8 rows selected.

COMPOSITE COLUMNS:

1 SELECT DEPTNO,JOB,MGR MANAGER_NO,SUM(SAL)

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

193

Page 194: Oracle Queries

ORACLE 2 FROM EMP 3* GROUP BY ROLLUP(DEPTNO,(JOB,MGR))SQL> /

DEPTNO JOB MANAGER_NO SUM(SAL) ---------- --------- ---------- ---------- 10 CLERK 7782 1300 10 MANAGER 7839 2450 10 PRESIDENT 5000 10 8750 20 ANALYST 7566 6000 20 CLERK 7788 1100 20 CLERK 7902 800 20 MANAGER 7839 2975 20 10875 30 CLERK 7698 950 30 MANAGER 7839 2850 30 SALESMAN 7698 5600 30 9400 29025

14 rows selected.

THE ABOVE IS COMBINATION OF BELOW:

GROUP BY DEPTNO,JOB,MGR.

GROUP BY DEPTNO.

GROUP BY.

THE ABOVE QUERY DISPLAYS THE FOLLOWING:

TOTAL SALARY FOR EVERY DEPARTMENT.

TOTAL SALARY FOR EVERY DEPARTMENT,JOB,MGR.

GRNAD TOTAL.

1 SELECT DEPTNO,JOB,MGR,SUM(SAL) 2 FROM EMP 3* GROUP BY DEPTNO,JOB,MGRSQL> /

DEPTNO JOB MGR SUM(SAL) ---------- --------- ---------- ---------- 10 CLERK 7782 1300 10 MANAGER 7839 2450 10 PRESIDENT 5000

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

194

Page 195: Oracle Queries

ORACLE 20 ANALYST 7566 6000 20 CLERK 7788 1100 20 CLERK 7902 800 20 MANAGER 7839 2975 30 CLERK 7698 950 30 MANAGER 7839 2850 30 SALESMAN 7698 5600

10 rows selected.

1 SELECT DEPTNO,SUM(SAL) 2 FROM EMP 3* GROUP BY DEPTNO 4 /

DEPTNO SUM(SAL) ---------- ---------- 10 8750 20 10875 30 9400

1 SELECT SUM(SAL) 2 FROM EMP 3* GROUP BY() 4 /

SUM(SAL) ---------- ---------- 29025

1 SELECT DEPTNO,JOB,MGR,SUM(SAL) 2 FROM EMP 3* GROUP BY CUBE(DEPTNO,(JOB,MGR))SQL> / DEPTNO JOB MGR SUM(SAL) ---------- --------- ---------- ---------- 20 ANALYST 7566 6000 30 CLERK 7698 950 10 CLERK 7782 1300 20 CLERK 7788 1100 20 CLERK 7902 800

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

195

Page 196: Oracle Queries

ORACLE 10 MANAGER 7839 2450 20 MANAGER 7839 2975 30 MANAGER 7839 2850 10 PRESIDENT 5000 30 SALESMAN 7698 5600 ANALYST 7566 6000 CLERK 7698 950 CLERK 7782 1300 CLERK 7788 1100 CLERK 7902 800 MANAGER 7839 8275 PRESIDENT 5000 SALESMAN 7698 5600 10 8750 20 10875 30 9400 29025

22 rows selected.

CONCATENATED GROUPING:

1 SELECT DEPTNO,JOB,MGR,SUM(SAL) 2 FROM EMP 3* GROUP BY DEPTNO,ROLLUP(JOB),CUBE(MGR)SQL> /

DEPTNO JOB MGR SUM(SAL) ---------- --------- ---------- ---------- 10 CLERK 7782 1300 10 MANAGER 7839 2450 10 PRESIDENT 5000 20 ANALYST 7566 6000 20 CLERK 7788 1100 20 MANAGER 7839 2975 20 CLERK 7902 800 30 CLERK 7698 950 30 SALESMAN 7698 5600 30 MANAGER 7839 2850 10 7782 1300 10 7839 2450 10 5000 20 7566 6000 20 7788 1100 20 7839 2975 20 7902 800 30 7698 6550 30 7839 2850

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

196

Page 197: Oracle Queries

ORACLE 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 10 8750 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 20 10875 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600 30 9400

31 rows selected.

THE ABOVE QUERY IS COMBINATION OF BELOW QUERIES:

GROUP BY DEPTNO,JOB,MGR.

GROUP BY DEPTNO,MGR.

GROUP BY DEPTNO,JOB.

GROUP BY DEPTNO.

THE ABOVE QUERY DISPLAYS THE FOLLOWING:

TOTAL SALARY FOR EVERY DEPARTEMENT NO,JOB,MGR.

TOTAL SALARY FOR EVERY DEPARTEMENT NO,MGR.

TOTAL SALARY FOR EVERY DEPARTEMENT NO,JOB.

TOTAL SALARY FOR EVERY DEPARTEMENT NO.

1 SELECT DEPTNO,JOB,MGR,SUM(SAL) 2 FROM EMP 3* GROUP BY DEPTNO,JOB,MGRSQL> /

DEPTNO JOB MGR SUM(SAL) ---------- --------- ---------- ---------- 10 CLERK 7782 1300 10 MANAGER 7839 2450 10 PRESIDENT 5000 20 ANALYST 7566 6000 20 CLERK 7788 1100

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

197

Page 198: Oracle Queries

ORACLE 20 CLERK 7902 800 20 MANAGER 7839 2975 30 CLERK 7698 950 30 MANAGER 7839 2850 30 SALESMAN 7698 5600

10 rows selected.

1 SELECT DEPTNO,MGR,SUM(SAL) 2 FROM EMP 3* GROUP BY DEPTNO,MGR 4 /

DEPTNO MGR SUM(SAL) ---------- ---------- ---------- 10 7782 1300 10 7839 2450 10 5000 20 7566 6000 20 7788 1100 20 7839 2975 20 7902 800 30 7698 6550 30 7839 2850

9 rows selected.

1 SELECT DEPTNO,JOB,SUM(SAL) 2 FROM EMP 3* GROUP BY DEPTNO,JOBSQL> /

DEPTNO JOB SUM(SAL) ---------- --------- ---------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900 20 MANAGER 2975 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 5600

9 rows selected.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

198

Page 199: Oracle Queries

ORACLE 1 SELECT DEPTNO,SUM(SAL) 2 FROM EMP 3* GROUP BY DEPTNOSQL> /

DEPTNO SUM(SAL) ---------- ---------- 10 8750 20 10875 30 9400

TYPES OF MULTIPLE INSERT STATEMENTS:

UNCONDITIONAL INSERT.

CONDITIONAL ALL INSERT.

CONDITIONAL FIRST.

PIVOTING INSERT.

UNCONDITIONAL INSERT ALL:

SQL> CREATE TABLE SAL_HISTORY 2 (EMPNO NUMBER(10), 3 HIREDATE DATE, 4 SAL NUMBER(10,2));

Table created.

1 CREATE TABLE MGR_HISTORY 2 (EMPNO NUMBER(10), 3 MGR NUMBER(10), 4* SAL NUMBER(10,2)) 5 /

Table created.

SQL> INSERT ALL 2 INTO SAL_HISTORY VALUES(EMPNO,HIREDATE,SAL) 3 INTO MGR_HISTORY VALUES(EMPNO,MGR,SAL) 4 SELECT EMPNO,HIREDATE,SAL,MGR FROM EMP;

28 rows created.

SQL> SELECT * FROM SAL_HISTORY;

EMPNO HIREDATE SAL ---------- --------- ----------

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

199

Page 200: Oracle Queries

ORACLE 7369 17-DEC-80 800 7499 20-FEB-81 1600 7521 22-FEB-81 1250 7566 02-APR-81 2975 7654 28-SEP-81 1250 7698 01-MAY-81 2850 7782 09-JUN-81 2450 7788 19-APR-87 3000 7839 17-NOV-81 5000 7844 08-SEP-81 1500 7876 23-MAY-87 1100 7900 03-DEC-81 950 7902 03-DEC-81 3000 7934 23-JAN-82 1300

14 rows selected.

1* SELECT * FROM MGR_HISTORYSQL> /

EMPNO MGR SAL ---------- ---------- ---------- 7369 7902 800 7499 7698 1600 7521 7698 1250 7566 7839 2975 7654 7698 1250 7698 7839 2850 7782 7839 2450 7788 7566 3000 7839 5000 7844 7698 1500 7876 7788 1100 7900 7698 950 7902 7566 3000 7934 7782 1300

14 rows selected.

SQL> DELETE FROM SAL_HISTORY;

14 rows deleted.

SQL>DELETE FROM MGR_HISTORY;

14 rows deleted.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

200

Page 201: Oracle Queries

ORACLESQL> INSERT ALL 2 INTO SAL_HISTORY VALUES(EMPNO,HIREDATE,SAL) 3 INTO MGR_HISTORY VALUES(EMPNO,MGR,SAL) 4 SELECT EMPNO,HIREDATE,SAL,MGR FROM EMP 5 WHERE DEPTNO=20;

10 rows created.

SQL> SELECT * FROM SAL_HISTORY;

EMPNO HIREDATE SAL ---------- --------- ---------- 7369 17-DEC-80 800 7566 02-APR-81 2975 7788 19-APR-87 3000 7876 23-MAY-87 1100 7902 03-DEC-81 3000

1* SELECT * FROM MGR_HISTORYSQL> /

EMPNO MGR SAL ---------- ---------- ---------- 7369 7902 800 7566 7839 2975 7788 7566 3000 7876 7788 1100 7902 7566 3000

SQL> DELETE FROM SAL_HISTORY;

5 rows deleted.

1* DELETE FROM MGR_HISTORYSQL> /

5 rows deleted.

CONDITIONAL INSERT ALL:

1 INSERT ALL 2 WHEN SAL > 2000 THEN 3 INTO SAL_HISTORY VALUES(EMPNO,HIREDATE,SAL) 4 WHEN DEPTNO > 10 THEN 5 INTO MGR_HISTORY VALUES(EMPNO,MGR,SAL)

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

201

Page 202: Oracle Queries

ORACLE 6* SELECT EMPNO,HIREDATE,SAL,MGR,DEPTNO FROM EMP 7 /

17 rows created.

SQL> SELECT * FROM SAL_HISTORY;

EMPNO HIREDATE SAL ---------- --------- ---------- 7566 02-APR-81 2975 7698 01-MAY-81 2850 7782 09-JUN-81 2450 7788 19-APR-87 3000 7839 17-NOV-81 5000 7902 03-DEC-81 3000

6 rows selected.

1* SELECT * FROM MGR_HISTORYSQL> /

EMPNO MGR SAL ---------- ---------- ---------- 7369 7902 800 7499 7698 1600 7521 7698 1250 7566 7839 2975 7654 7698 1250 7698 7839 2850 7788 7566 3000 7844 7698 1500 7876 7788 1100 7900 7698 950 7902 7566 3000

11 rows selected.

SQL> DELETE FROM SAL_HISTORY;

6 rows deleted.

SQL> DELETE FROM MGR_HISTORY;

11 rows deleted.

SQL> INSERT FIRST 2 WHEN SAL = 5000 THEN

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

202

Page 203: Oracle Queries

ORACLE 3 INTO SAL_HISTORY VALUES(EMPNO,HIREDATE,SAL) 4 WHEN DEPTNO > 10 THEN 5 INTO MGR_HISTORY VALUES(EMPNO,MGR,SAL) 6 WHEN DEPTNO > 20 THEN 7 INTO MGR_HISTORY VALUES(EMPNO,MGR,SAL) 8 ELSE 9 INTO MGR_HISTORY VALUES(EMPNO,MGR,SAL) 10 SELECT EMPNO,HIREDATE,SAL,MGR,DEPTNO FROM EMP;

14 rows created.

SQL> SELECT * FROM SAL_HISTORY;

EMPNO HIREDATE SAL ---------- --------- ---------- 7839 17-NOV-81 5000

SQL> SELECT * FROM MGR_HISTORY;

EMPNO MGR SAL ---------- ---------- ---------- 7369 7902 800 7499 7698 1600 7521 7698 1250 7566 7839 2975 7654 7698 1250 7698 7839 2850 7788 7566 3000 7844 7698 1500 7876 7788 1100 7900 7698 950 7902 7566 3000 7782 7839 2450 7934 7782 1300

13 rows selected.

CONDITIONAL FIRST INSERT:

SQL> CREATE TABLE SPECIAL_SAL 2 (DEPTNO NUMBER(10), 3 SAL NUMBER(10));

Table created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

203

Page 204: Oracle Queries

ORACLESQL> CREATE TABLE HIREDATE_HIS_81 2 (DEPTNO NUMBER(10), 3 HIREDATE DATE);

Table created.

1 CREATE TABLE HIREDATE_HIS_87 2 (DEPTNO NUMBER(10), 3* HIREDATE DATE) 4 /

Table created.

1 CREATE TABLE HIREDATE_HIS 2 (DEPTNO NUMBER(10), 3* HIREDATE DATE) 4 /

Table created.

1 INSERT FIRST 2 WHEN SAL > 2000 THEN 3 INTO SPECIAL_SAL VALUES(DEPTNO,SAL) 4 WHEN HIREDATE LIKE ('%81%') THEN 5 INTO HIREDATE_HIS_81 VALUES (DEPTNO,HIREDATE) 6 WHEN HIREDATE LIKE ('%87%') THEN 7 INTO HIREDATE_HIS_87 VALUES (DEPTNO,HIREDATE) 8 ELSE 9 INTO HIREDATE_HIS VALUES (DEPTNO,HIREDATE) 10* SELECT DEPTNO,SAL,HIREDATE FROM EMPSQL> /

14 rows created.

SQL> SELECT * FROM SPECIAL_SAL;

DEPTNOSAL ---------- ---------- 20 2975 30 2850 10 2450 20 3000 10 5000 20 3000

6 rows selected.

SQL> SELECT * FROM HIREDATE_HIS_81;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

204

Page 205: Oracle Queries

ORACLE DEPTNO HIREDATE ---------- --------- 30 20-FEB-81 30 22-FEB-81 30 28-SEP-81 30 08-SEP-81 30 03-DEC-81

SQL> SELECT * FROM HIREDATE_HIS_87;

DEPTNO HIREDATE ---------- --------- 20 23-MAY-87

SQL> SELECT * FROM HIREDATE_HIS;

DEPTNO HIREDATE ---------- --------- 20 17-DEC-80 10 23-JAN-82

1 CREATE TABLE SPECIAL_SAL1 2 (DEPTNO NUMBER(10), 3 SAL NUMBER(10), 4* HIREDATE DATE)SQL> /

Table created.

1 CREATE TABLE HIREDATE_HIS_81_1 2 (DEPTNO NUMBER(10), 3 HIREDATE DATE, 4* SAL NUMBER)SQL> /

Table created.

1 CREATE TABLE HIREDATE_HIS_87_1 2 (DEPTNO NUMBER(10), 3 HIREDATE DATE, 4* SAL NUMBER) 5 /

Table created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

205

Page 206: Oracle Queries

ORACLE 1 CREATE TABLE HIREDATE_HIS_1 2 (DEPTNO NUMBER(10), 3 HIREDATE DATE, 4* SAL NUMBER) 5 /

Table created.

1 INSERT FIRST 2 WHEN SAL > 2000 THEN 3 INTO SPECIAL_SAL1 VALUES(DEPTNO,SAL,HIREDATE) 4 WHEN HIREDATE LIKE ('%81%') THEN 5 INTO HIREDATE_HIS_81_1 VALUES (DEPTNO,HIREDATE,SAL) 6 WHEN HIREDATE LIKE ('%87%') THEN 7 INTO HIREDATE_HIS_87_1 VALUES (DEPTNO,HIREDATE,SAL) 8 ELSE 9 INTO HIREDATE_HIS_1 VALUES (DEPTNO,HIREDATE,SAL) 10* SELECT DEPTNO,SAL,HIREDATE FROM EMPSQL> /

14 rows created.

SQL> SELECT * FROM SPECIAL_SAL1;

DEPTNO SAL HIREDATE ---------- ---------- --------- 20 2975 02-APR-81 30 2850 01-MAY-81 10 2450 09-JUN-81 20 3000 19-APR-87 10 5000 17-NOV-81 20 3000 03-DEC-81

6 rows selected.

SQL> SELECT * FROM HIREDATE_HIS_1;

DEPTNO HIREDATE SAL ---------- --------- ---------- 20 17-DEC-80 800 10 23-JAN-82 1300

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

206

Page 207: Oracle Queries

ORACLE 1* SELECT * FROM HIREDATE_HIS_81_1SQL> /

DEPTNO HIREDATE SAL ---------- --------- ---------- 30 20-FEB-81 1600 30 22-FEB-81 1250 30 28-SEP-81 1250 30 08-SEP-81 1500 30 03-DEC-81 950

1* SELECT * FROM HIREDATE_HIS_87_1SQL> /

DEPTNO HIREDATE SAL ---------- --------- ---------- 20 23-MAY-87 1100

SQL> DELETE FROM SPECIAL_SAL1;

6 rows deleted.

SQL> DELETE FROM HIREDATE_HIS_1;

2 rows deleted.

1* DELETE FROM HIREDATE_HIS_81_1SQL> /

5 rows deleted.

1* DELETE FROM HIREDATE_HIS_87_1SQL> /

1 row deleted.

1 INSERT FIRST 2 WHEN SAL > 5000 THEN 3 INTO SPECIAL_SAL1 VALUES(DEPTNO,SAL,HIREDATE) 4 WHEN HIREDATE LIKE ('%81%') THEN

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

207

Page 208: Oracle Queries

ORACLE 5 INTO HIREDATE_HIS_81_1 VALUES (DEPTNO,HIREDATE,SAL) 6 WHEN HIREDATE LIKE ('%87%') THEN 7 INTO HIREDATE_HIS_87_1 VALUES (DEPTNO,HIREDATE,SAL) 8 ELSE 9 INTO HIREDATE_HIS_1 VALUES (DEPTNO,HIREDATE,SAL) 10* SELECT DEPTNO,SAL,HIREDATE FROM EMP 11 /

14 rows created.

SQL> SELECT * FROM SPECIAL_SAL1;

no rows selected

SQL> SELECT * FROM HIREDATE_HIS_81_1;

DEPTNO HIREDATE SAL ---------- --------- ---------- 30 20-FEB-81 1600 30 22-FEB-81 1250 20 02-APR-81 2975 30 28-SEP-81 1250 30 01-MAY-81 2850 10 09-JUN-81 2450 10 17-NOV-81 5000 30 08-SEP-81 1500 30 03-DEC-81 950 20 03-DEC-81 3000

10 rows selected.

SQL> SELECT * FROM HIREDATE_HIS_87_1;

DEPTNO HIREDATE SAL ---------- --------- ---------- 20 19-APR-87 3000 20 23-MAY-87 1100

SQL> SELECT * FROM HIREDATE_HIS;

DEPTNO HIREDATE ---------- ---------

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

208

Page 209: Oracle Queries

ORACLE 20 17-DEC-80 10 23-JAN-82

PIVOTING INSERT:

SQL> CREATE TABLE SALES_SOURCE_DATA 2 (EMPLOYEE_ID NUMBER(10), 3 WEEK_ID NUMBER(2), 4 SALES_MON NUMBER(10), 5 SALES_TUE NUMBER(10), 6 SALES_WED NUMBER(10), 7 SALES_THUR NUMBER(10), 8 SALES_FRI NUMBER(10));

Table created.

SQL> INSERT INTO SALES_SOURCE_DATA 2 VALUES 3 (1,6,2000,3000,4000,5000,6000);

1 row created.

SQL> CREATE TABLE SALES_INFO 2 (EMPLOYEE_ID NUMBER(10), 3 WEEK NUMBER(10), 4 SALES NUMBER(10));

Table created.

1 INSERT ALL 2 INTO SALES_INFO VALUES(EMPLOYEE_ID,WEEK_ID,SALES_MON) 3 INTO SALES_INFO VALUES(EMPLOYEE_ID,WEEK_ID,SALES_TUE) 4 INTO SALES_INFO VALUES(EMPLOYEE_ID,WEEK_ID,SALES_WED) 5 INTO SALES_INFO VALUES(EMPLOYEE_ID,WEEK_ID,SALES_THUR) 6 INTO SALES_INFO VALUES(EMPLOYEE_ID,WEEK_ID,SALES_FRI) 7 SELECT EMPLOYEE_ID,WEEK_ID,SALES_MON,SALES_TUE,SALES_WED, 8* SALES_THUR,SALES_FRI FROM SALES_SOURCE_DATASQL> /

5 rows created.

SQL> SELECT * FROM SALES_INFO;

EMPLOYEE_ID WEEK SALES ----------- ---------- ---------- 1 6 2000 1 6 3000 1 6 4000

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

209

Page 210: Oracle Queries

ORACLE 1 6 5000 1 6 6000

SCALAR SUBQUERIES:

A SCALAR THAT RETURNS EXACTLY ONE COLUMN VALUE FROM ONE ROW IS REFERED AS A SCALAR SUB QUERY.

SCALAR SUBQUERIES IN CASE:

1 SELECT EMPNO,ENAME,DEPTNO, 2 (CASE 3 WHEN DEPTNO = (SELECT DEPTNO FROM DEPT 4 WHERE LOC = 'NEW YORK') 5 THEN 'CANADA' ELSE 'USA' END) LOCATION 6* FROM EMP

SQL> /

EMPNO ENAME DEPTNO LOCATI ---------- ---------- ---------- ------ 7369 SMITH 20 USA 7499 ALLEN 30 USA 7521 WARD 30 USA 7566 JONES 20 USA 7654 MARTIN 30 USA 7698 BLAKE 30 USA 7782 CLARK 10 CANADA 7788 SCOTT 20 USA 7839 KING 10 CANADA 7844 TURNER 30 USA 7876 ADAMS 20 USA 7900 JAMES 30 USA 7902 FORD 20 USA 7934 MILLER 10 CANADA

14 rows selected.

SQL> SELECT * FROM DEPT;

DEPTNO DNAME LOC

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

210

Page 211: Oracle Queries

ORACLE---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

SQL> SELECT EMPNO,ENAME 2 FROM EMP E 3 ORDER BY (SELECT 4 DNAME FROM DEPT D 5 WHERE E.DEPTNO=D.DEPTNO);

EMPNO ENAME ---------- ---------- 7782 CLARK 7839 KING 7934 MILLER 7369 SMITH 7876 ADAMS 7902 FORD 7788 SCOTT 7566 JONES 7499 ALLEN 7698 BLAKE 7654 MARTIN 7900 JAMES 7844 TURNER 7521 WARD

14 rows selected.

CORRELATED SUBQUERY:

FINDING EMPLOYEES WHOSE SAL IS GREATER THAN AVG(SAL) OF THEIR DEPARTMENT.SQL> SELECT ENAME,SAL,DEPTNO FROM EMP E 2 WHERE SAL > (SELECT AVG(SAL) FROM EMP 3 WHERE DEPTNO=E.DEPTNO);

ENAME SAL DEPTNO ---------- ---------- ---------- ALLEN 1600 30 JONES 2975 20 BLAKE 2850 30 SCOTT 3000 20 KING 5000 10 FORD 3000 20

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

211

Page 212: Oracle Queries

ORACLE6 rows selected.

FINDING EMPLOYEES WHOSE SAL IS GREATER THAN MIN(SAL) OF THEIR DEPARTMENT.

1 SELECT ENAME,SAL,DEPTNO FROM EMP E 2 WHERE SAL > (SELECT MIN(SAL) FROM EMP 3* WHERE DEPTNO=E.DEPTNO)SQL> /

ENAME SAL DEPTNO ---------- ---------- ---------- ALLEN 1600 30 WARD 1250 30 JONES 2975 20 MARTIN 1250 30 BLAKE 2850 30 CLARK 2450 10 SCOTT 3000 20 KING 5000 10 TURNER 1500 30 ADAMS 1100 20 FORD 3000 20

11 rows selected.EXISTS:

FIND EMPLOYEES WHO HAVE ATLEAT ONE PERSON REPORTING TO THEM.

1 SELECT EMPNO,ENAME,JOB,DEPTNO FROM EMP E 2 WHERE EXISTS 3* (SELECT 'X' FROM EMP WHERE MGR=E.EMPNO)SQL> /

EMPNO ENAME JOB DEPTNO ---------- ---------- --------- ---------- 7566 JONES MANAGER 20 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7788 SCOTT ANALYST 20 7839 KING PRESIDENT 10 7902 FORD ANALYST 20

6 rows selected.

THE SAME QUERY WITH IN:

1 SELECT EMPNO,ENAME,JOB,DEPTNO 2 FROM EMP

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

212

Page 213: Oracle Queries

ORACLE 3 WHERE EMPNO IN (SELECT MGR FROM EMP 4* WHERE MGR IS NOT NULL)SQL> /

EMPNO ENAME JOB DEPTNO ---------- ---------- --------- ---------- 7566 JONES MANAGER 20 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7788 SCOTT ANALYST 20 7839 KING PRESIDENT 10 7902 FORD ANALYST 20

6 rows selected.

NOT EXISTS:

FIND ALL THE DEPARTMENTS THAT DO NOT HAVE ANY EMPLOYEES:

SQL> SELECT DEPTNO,DNAME 2 FROM DEPT D 3 WHERE NOT EXISTS 4 (SELECT 'X' FROM EMP 5 WHERE DEPTNO=D.DEPTNO);

DEPTNO DNAME ---------- -------------- 40 OPERATIONS

SAME QUERY WITH NOT IN:

SQL> SELECT DEPTNO,DNAME FROM DEPT 2 WHERE DEPTNO NOT IN 3 (SELECT DEPTNO FROM EMP);

DEPTNO DNAME ---------- -------------- 40 OPERATIONS

INSERT WITH SUBQUERY:

1 INSERT INTO 2 (SELECT EMPNO,ENAME,JOB,DEPTNO FROM EMP) 3 VALUES 4* (100,'PAVAN','MANAGER',10)SQL> /

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

213

Page 214: Oracle Queries

ORACLE1 row created.

INSERT WITH SUBQUERY WITH CHECK OPTION:

1 INSERT INTO

2 (SELECT EMPNO,ENAME,JOB,DEPTNO

3 FROM EMP WHERE DEPTNO=30 WITH CHECK OPTION)

4 VALUES

5* (100,'PAVAN','MANAGER',10)SQL> /INSERT INTO *ERROR at line 1:ORA-01402: view WITH CHECK OPTION where-clause violation

1 INSERT INTO 2 (SELECT EMPNO,ENAME,JOB 3 FROM EMP WHERE DEPTNO=30 WITH CHECK OPTION) 4 VALUES 5* (100,'PAVAN','MANAGER')SQL> /INSERT INTO *ERROR at line 1:ORA-01402: view WITH CHECK OPTION where-clause violation

1 INSERT INTO 2 (SELECT EMPNO,ENAME,JOB,DEPTNO 3 FROM EMP WHERE DEPTNO=30 WITH CHECK OPTION) 4 VALUES 5* (101,'PAVAN','MANAGER',30)SQL> /

1 row created.

DEFAULT:

SQL> CREATE TABLE SAMPLE

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

214

Page 215: Oracle Queries

ORACLE 2 (EMPNO NUMBER(10), 3 ENAME VARCHAR2(10), 4 SAL NUMBER(10) DEFAULT 1000);

Table created.

SQL> INSERT INTO SAMPLE 2 VALUES 3 (1,'PAVAN',100);

1 row created.

1 INSERT INTO SAMPLE 2 VALUES 3* (1,'PAVAN',DEFAULT)SQL> /

1 row created.

SQL> UPDATE SAMPLE 2 SET SAL = DEFAULT 3 WHERE EMPNO=1;

2 rows updated.

SQL> SELECT * FROM SAMPLE;

EMPNO ENAME SAL ---------- ---------- ---------- 1 PAVAN 1000 1 PAVAN 1000

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

215

Page 216: Oracle Queries

ORACLE

INTRODUCTION TO PL/SQL:

TILL NOW WE USED SQL TO QUERY DATABASE FOR DATA.SQL IS A FOUTH GENERATION LANGUAGE.THIS MEANS THAT THE LANGUAGE DESCRIBES WHAT SHOULD BE DONE, BUT NOT HOW TO DO IT.

FOR EXAMPLE :

DELETE FROM EMP WHERE JOB=’CLERK’;

HERE WE DON’T KNOW HOW THE DATABASE ACTUALLY DETERMINES WHICH EMPLOYEES ARE CLERKS. PROBABLY THE SERVER WILL LOOP THROUGH ALL THE RECORDS IN SOME ORDERTO DETERMINE THE PROPER ENTRIES TO DELETE.BUT THE DETAILS ARE HIDEN FROM US.

THIRD GENERATION LANGUAGES SUCH AS C OR COBOL, ARE MORE PROCEDURAL IN NATURE. A PROGRAM IN A THIRD GENERATION LANGUAGE IMPLEMENTS STEP BY STEP ALGORITHM TO SLOVE THE PROBLEM.FOR EXAMPLE WE ACCOMPLISH ABOVE DELETE OPERATION LIKE THIS IN THIS 3 GL.

LOOP OVER EACH STUDENT RECORD

IF THIS RECORD HAS JOB = CLERK THEN

DELETE THIS RECORD;

END IF;

END LOOP;

OBJECT ORIENTED LANGUAGES SUCH AS C++ OR JAVA ARE ALSO THIRD GENERATION LANGUAGES DO THE SAME AS ‘C’.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

216

Page 217: Oracle Queries

ORACLEFOURTH GENERATION LANGUAGES SUCH AS SQL ARE FAIRLY SIMPLE COMPARED TO THE 3RD GENARATION LANGUAGES AND HAVE FEWER COMMANDS.

HOW EVER IN SOME CASES PROCEDURAL CONSTRUCTS SUCH AS VARIABLES, CONTROL STRUCTURES SUCH AS IF THEN ELSE STATEMENTS AND LOOPS AND PROCEDURES AND FUCTIONS ETC ARE MORE USEFUL FOR DESIRED PROGRAM.

THIS IS WHERE PL/SQL COMES IN TO THE PICTURE. PL/SQL IS COMBINATION OF POWER AND THE FLEXIBILITY OF SQL WITH THE PROCEDURAL CONSTRUCTS OF 3RD

GENERATION LANGUAGES.

THE BASIC UNIT IN ANY PL/SQL PROGRAM IS A BLOCK.

THERE ARE TWO DIFFERENT KINDS OF BLOCKS:

ANONYMOUS BLOCK

NAMED BLOCK.

ANONYMOUS BLOCKS ARE GENERALLY CONSTRUCTED ONCE AND EXCECUTED ONLY ONCE.THIS TYPE OF BLOCK IS OFTEN ISSUED FROM A CLIENT PROGRAM TO CALL A SUBPROGRAM STORED IN THE DATABASE.

NAMED BLOCKS ARE BLOCKS THAT HAVE NAME ASSOCIATED WITH THEM.NAMED BLOCKS FURTHER CLASSIFIED IN TO 3 TYPES

LABELED BLOCKS.

SUBPROGRAMS(STOREDPROCEDURE AND FUNCTION).

TRIGGERS.

LABELED BLOCKS ARE ANONYMOUS BLOCKS ARE GENERALLY CONSTRUCTED ONCE AND EXCECUTED ONLY ONCE.ARE USED SAME AS ANONYMOUS BLOCKS.

SUBPROGRAMS CONSISTS OF PROCEDURES AND FUNCTIONS. THEY CAN BE STORED IN THE DATABASE AS STANDALONE OBJECTS.THEY GENERALLY DON’T CHANGE ONCE CONSTRUCTED.THEYCAN EXECUTED MANY TIMES.SUBPROGRAMS EXECUTED EXPLICITLY VIA CALL TO PROCEDURE OR FUNCTION.

TRIGGERS CONSIST OF PL/SQL BLOCK.THEY ARE GENERALLY DON’T CHANGE ONCE THEY CONSTRUCTED AND EXECUTED MANY TIMES.TRIGGERS EXECUTED IMPLICTLY WHENEVER TRIGGERING EVENT OCCURS.THE TRIGGERING EVENT MAY BE DML STATEMENT OR DDL STATEMENT(CREATE OR DROP) OR DATABASE EVENT SUCH AS START UP OR SHUTDOWN.

BASIC PL/SQL BLOCK:

DECLARE

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

217

Page 218: Oracle Queries

ORACLEDECLARATIVE SECTION IS HERE.WE DECLARE ALL VARIABLES ETC.

BEGIN

EXECUTABLE SECTION IS HERE.ALL SQL STATEMENTS AND PROCEDURAL CONSTRUCTS.

EXCEPTION

EXCEPTION SECTION HERE.ERRORS HANDLING STATEMENTS GOES HERE.

END;

DECLARE AND EXCEPTION IS OPTIONAL.THAT IS EVERY PL/SQL BLOCK SHOULD HAVE BEGIN AND END.

DECLARING PL/SQL VARIABLES:

DECLARE

V_HIREDATE DATE;

V_DEPTNO NUMBER(10) NOT NULL := 10;

V_LOC VARCHAR2(10) := ‘NEW YORK’;

V_COMM CONSTANT NUMBER :=1400;

V_SAL NUMBER(10) DEFAULT 1000;

ASSIGNING VALUES TO VARIABLES:

V_DEPTNO NUMBER(10) NOT NULL := 10;

V_LOC VARCHAR2(10) := ‘NEW YORK’;

BASE SCALAR DATATYPES:

VARCHAR2(MAX_LEN)

NUMBER(P,S);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

218

Page 219: Oracle Queries

ORACLEDATE

CHAR(MAX_LEN)

LONG

LONG RAW

BOOLEAN

BINARY_INTEGER

PLS_INTEGER

DECLARE

V_JOB VARCHAR2(10);

V_COUNT NUMBER(2) :=0;

V_VALID BOOLEAN NOT NULL := TRUE;

DECLARING VARIABLES WITH %TYPE ATTRIBUTES:

V_ENAME VARCHAR2(10);

V_JOB EMP.JOB%TYPE;

THE ADVANTAGE OF DECLARING THIS TYPE IS FOR US NO NEED WORRY ABOUT THE LENGH OF THE VARIABLES.V_JOB WILL BE DECLARED AS SAME SIZE OF EMP TABLE JOB COLUMN.

ONLY THEVALUES TRUE,FALSE,NULL CAN BE ASSIGNED TO THE BOOLEAN VARIABLE.

DBMS_OUTPUT.PUT_LINE IS USED TO PRINT OUTPUT.

IN SQL*PLUS WE HAVE TO TYPE SET SERVEROUTPUT ON.

: THE BELOW PL/SQL BLOCK IS ANONYMOUS BLOCK

SQL> DECLARE

2 V_DEPTNO NUMBER(10);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

219

Page 220: Oracle Queries

ORACLE 3 V_LOC VARCHAR2(10);

4 BEGIN

5 SELECT DEPTNO,LOC

6 INTO

7 V_DEPTNO,V_LOC

8 FROM DEPT

9 WHERE DNAME='SALES';

10 END;

11 /

PL/SQL procedure successfully completed.

SQL>1 DECLARE

2 V_DEPTNO NUMBER(10);

3 V_LOC VARCHAR2(10);

4 BEGIN

5 SELECT DEPTNO,LOC 6 INTO

7 V_DEPTNO,V_LOC

8 FROM DEPT

9 WHERE DNAME='SALES';

10 DBMS_OUTPUT.PUT_LINE(V_DEPTNO || ' ' || V_LOC);

11* END;

SQL> /

PL/SQL procedure successfully completed.

SQL> SET SERVEROUTPUT ON

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

220

Page 221: Oracle Queries

ORACLESQL> /

30 CHICAGO

PL/SQL procedure successfully completed.

THE BELOW PL/SQL BLOCK IS LABELLED BLOCK:

<<LABELLED BLOCK>>SQL> 1 DECLARE

2 V_DEPTNO DEPT.DEPTNO%TYPE;

3 V_LOC DEPT.LOC%TYPE;

4 BEGIN

5 SELECT DEPTNO,LOC

6 INTO

7 V_DEPTNO,V_LOC

8 FROM DEPT

9 WHERE DNAME='SALES';

10 DBMS_OUTPUT.PUT_LINE(V_DEPTNO || ' ' || V_LOC);

11* END;<<LABELLED BLOCK>>

SQL> /30 CHICAGO PL/SQL procedure successfully completed.

SQL> 1 DECLARE

2 V_DEPTNO EMP.DEPTNO%TYPE:=10;

3 V_SUM_SAL EMP.SAL%TYPE;

4 BEGIN

5 SELECT SUM(SAL)

6 INTO

7 V_SUM_SAL

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

221

Page 222: Oracle Queries

ORACLE 8 FROM EMP

9 WHERE DEPTNO=V_DEPTNO;

10 DBMS_OUTPUT.PUT_LINE(V_SUM_SAL);

11* END;

SQL> /

8750

PL/SQL procedure successfully completed.

INSERTING DATA:

BEGIN

INSERT INTO DEPT VALUES(50,’COMPUTERS’,’MIAMI’);

END;

UPDATING DATA:

BEGIN

V_SAL_INCREASE EMP.SAL%TYPE:=2000;

BEGIN

UPDATE EMP

SET SAL = SAL+V_SAL_INCREASE

WHERE JOB = ‘ANALYST’

END;

DELETING DATA:

DECLARE

V_DEPTNO EMP.DEPTNO%TYPE :=10;

BEGIN

DELETE FROM EMP

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

222

Page 223: Oracle Queries

ORACLEWHERE DEPTNO=V_DEPTNO;

END;

CONTROLLING PL/SQL FLOW EXECUTION:

CONDITIONAL IF STATEMENTS:

IF BOOLEAN_EXPRESSION1 THEN

SEQUENCE_STATEMENTS;

ELSIF BOOLEAN_EXPRESSION1 THEN

SEQUENCE_STATEMENTS;

ELSE

SEQUENCE_STATEMENTS;

END IF;

WHERE BOOLEAN_EXPRESSION IS ANY EXPRESSION THAT EVALUATES TO A BOOLEAN VALUE.

THE ELSIF AND ELSE CLAUSES ARE OPTIONAL AND THERE CAN BE AS MANY ELSIF CLAUSES ARE DESIRED.

EXAMPLE:

1 DECLARE

2 V_JOB EMP.JOB%TYPE;

3 BEGIN 4 SELECT JOB INTO V_JOB FROM EMP 5 WHERE EMPNO = & EMPLOYEE_NUMBER; 6 IF V_JOB = 'CLERK' THEN 7 DBMS_OUTPUT.PUT_LINE(V_JOB);

8 DBMS_OUTPUT.PUT_LINE('HIS SALARY INCREASES 10%');

9 ELSIF V_JOB = 'MANAGER' THEN

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

223

Page 224: Oracle Queries

ORACLE 10 DBMS_OUTPUT.PUT_LINE(V_JOB);

11 DBMS_OUTPUT.PUT_LINE('HIS SALARY INCREASES 30%');

12 ELSIF V_JOB = 'SALESMAN' THEN

13 DBMS_OUTPUT.PUT_LINE(V_JOB);

14 DBMS_OUTPUT.PUT_LINE ('HIS SALARY INCREASES 20%');

15 ELSE

16 DBMS_OUTPUT.PUT_LINE (V_JOB);

17 DBMS_OUTPUT.PUT_LINE ('HIS SALARY INCREASES 0%');

18 END IF;

19* END;

20 /Enter value for employee_number: 7369CLERK HIS SALARY INCREASES 10% PL/SQL procedure successfully completed.

SQL> /Enter value for employee_number: 7499SALESMAN HIS SALARY INCREASES 20% PL/SQL procedure successfully completed.

SQL> /Enter value for employee_number: 7566MANAGER HIS SALARY INCREASES 30% PL/SQL procedure successfully completed.

SQL> /Enter value for employee_number: 7788ANALYST HIS SALARY INCREASES 0% PL/SQL procedure successfully completed.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

224

Page 225: Oracle Queries

ORACLE

CASE STATEMENT:

1 DECLARE

2 V_JOB EMP.JOB%TYPE;

3 BEGIN

4 SELECT JOB INTO V_JOB FROM EMP

5 WHERE EMPNO = & EMPLOYEE_NUMBER; 6 CASE V_JOB 7 WHEN 'CLERK' THEN 8 DBMS_OUTPUT.PUT_LINE(V_JOB); 9 DBMS_OUTPUT.PUT_LINE('HIS SALARY INCREASES 10%'); 10 WHEN 'MANAGER' THEN 11 DBMS_OUTPUT.PUT_LINE(V_JOB);

12 DBMS_OUTPUT.PUT_LINE('HIS SALARY INCREASES 30%');

13 WHEN 'SALESMAN' THEN

14 DBMS_OUTPUT.PUT_LINE(V_JOB);

15 DBMS_OUTPUT.PUT_LINE('HIS SALARY INCREASES 20%');

16 ELSE

17 DBMS_OUTPUT.PUT_LINE(V_JOB);

18 DBMS_OUTPUT.PUT_LINE('HIS SALARY INCREASES 0%');

19 END CASE;

20* END;

SQL> /Enter value for employee_number: 7369CLERK HIS SALARY INCREASES 10% PL/SQL procedure successfully completed.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

225

Page 226: Oracle Queries

ORACLESQL> /Enter value for employee_number: 7466DECLARE*ERROR at line 1:ORA-01403: no data found ORA-06512: at line 4

SQL> /Enter value for employee_number: 7499SALESMAN HIS SALARY INCREASES 20% PL/SQL procedure successfully completed.

SQL> /Enter value for employee_number: 7566MANAGER HIS SALARY INCREASES 30%

PL/SQL procedure successfully completed.

SQL> /Enter value for employee_number: 7788ANALYST HIS SALARY INCREASES 0% PL/SQL procedure successfully completed.

CASE STATEMENT WITH NO ELSE STATEMENT:

1 DECLARE 2 V_JOB EMP.JOB%TYPE; 3 BEGIN 4 SELECT JOB INTO V_JOB FROM EMP

5 WHERE EMPNO = & EMPLOYEE_NUMBER;

6 CASE V_JOB

7 WHEN 'CLERK' THEN

8 DBMS_OUTPUT.PUT_LINE(V_JOB);

9 DBMS_OUTPUT.PUT_LINE('HIS SALARY INCREASES 10%');

10 WHEN 'MANAGER' THEN

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

226

Page 227: Oracle Queries

ORACLE 11 DBMS_OUTPUT.PUT_LINE(V_JOB);

12 DBMS_OUTPUT.PUT_LINE('HIS SALARY INCREASES 30%');

13 WHEN 'SALESMAN' THEN

14 DBMS_OUTPUT.PUT_LINE(V_JOB);

15 DBMS_OUTPUT.PUT_LINE('HIS SALARY INCREASES 20%');(HERE NO ELSE STATEMENT).

16 END CASE;

17* END;

SQL> /Enter value for employee_number: 7788

DECLARE*ERROR at line 1:ORA-06592: CASE not found while executing CASE statement ORA-06512: at line 6

SQL> /Enter value for employee_number: 7369CLERK HIS SALARY INCREASES 10% PL/SQL procedure successfully completed.

CASE STATEMENT WITH LABEL:

1 DECLARE

2 V_JOB EMP.JOB%TYPE;

3 BEGIN

4 SELECT JOB INTO V_JOB FROM EMP

5 WHERE EMPNO = & EMPLOYEE_NUMBER;

6 <<MYCASE>>

7 CASE V_JOB

8 WHEN 'CLERK' THEN

9 DBMS_OUTPUT.PUT_LINE(V_JOB);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

227

Page 228: Oracle Queries

ORACLE 10 DBMS_OUTPUT.PUT_LINE('HIS SALARY INCREASES 10%');

11 WHEN 'MANAGER' THEN

12 DBMS_OUTPUT.PUT_LINE(V_JOB);

13 DBMS_OUTPUT.PUT_LINE('HIS SALARY INCREASES 30%');

14 WHEN 'SALESMAN' THEN

15 DBMS_OUTPUT.PUT_LINE(V_JOB);

16 DBMS_OUTPUT.PUT_LINE('HIS SALARY INCREASES 20%');

17 END CASE MYCASE;

18* END;

SQL> /Enter value for employee_number: 7369CLERK HIS SALARY INCREASES 10% PL/SQL procedure successfully completed.

CASESTATEMENT WITH NO TEST EXPRESSION:

1 DECLARE

2 V_JOB EMP.JOB%TYPE;

3 BEGIN

4 SELECT JOB INTO V_JOB FROM EMP

5 WHERE EMPNO = & EMPLOYEE_NUMBER;

6 CASE

7 WHEN V_JOB='CLERK' THEN

8 DBMS_OUTPUT.PUT_LINE(V_JOB);

9 DBMS_OUTPUT.PUT_LINE('HIS SALARY INCREASES 10%');

10 WHEN V_JOB='MANAGER' THEN

11 DBMS_OUTPUT.PUT_LINE(V_JOB);

12 DBMS_OUTPUT.PUT_LINE('HIS SALARY INCREASES 30%');

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

228

Page 229: Oracle Queries

ORACLE 13 WHEN V_JOB='SALESMAN' THEN

14 DBMS_OUTPUT.PUT_LINE(V_JOB);

15 DBMS_OUTPUT.PUT_LINE('HIS SALARY INCREASES 20%');

16 ELSE

17 DBMS_OUTPUT.PUT_LINE(V_JOB);

18 DBMS_OUTPUT.PUT_LINE('HIS SALARY INCREASES 0%');

19 END CASE ;

20* END;

21 /Enter value for employee_number: 7369CLERK HIS SALARY INCREASES 10% PL/SQL procedure successfully completed.

SQL> /Enter value for employee_number: 7788ANALYST HIS SALARY INCREASES 0% PL/SQL procedure successfully completed.

LOGIC TABLES:

AND:AND TRUE FALSE NULLTRUE TRUE FALSE NULLFALSE FALSE FALSE FALSENULL NULL FALSE NULL

OR:OR TRUE FALSE NULLTRUE TRUE TRUE TRUEFALSE TRUE FALSE NULLNULL TRUE NULL NULL

NOT:NOTTRUE FALSEFALSE TRUENULL NULL

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

229

Page 230: Oracle Queries

ORACLEITERATIVECONTROL:

LOOP STATEMENTS

LOOPS REPEAT A STATEMENT OR SEQUENCE OF STATEMENTS MULTIPLE TIMES.THERE ARE THREE LOOPS TYPES:

BASIC LOOP

FOR LOOP

WHILE LOOP

BASIC LOOP:

1 DECLARE

2 V_COUNTER NUMBER(10):=0;

3 BEGIN

4 LOOP

5 DBMS_OUTPUT.PUT_LINE(V_COUNTER);

6 V_COUNTER := V_COUNTER+1;

7 IF V_COUNTER > 10 THEN

8 EXIT;

9 END IF;

10 END LOOP;

11* END;

SQL> /

0 1 2 3 4 5

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

230

Page 231: Oracle Queries

ORACLE6 7 8 9 10

PL/SQL procedure successfully completed.

1 DECLARE

2 V_COUNTER NUMBER(10):=0;

3 BEGIN

4 LOOP

5 DBMS_OUTPUT.PUT_LINE(V_COUNTER);

6 V_COUNTER := V_COUNTER+1;

7 EXIT WHEN V_COUNTER > 10;

8 END LOOP;

9* END;

SQL> /

0 1 2 3 4 5 6 7 8 9 10

PL/SQL procedure successfully completed.

FOR LOOP:

1 BEGIN

2 FOR I IN 1 .. 10 LOOP

3 DBMS_OUTPUT.PUT_LINE(I);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

231

Page 232: Oracle Queries

ORACLE 4 END LOOP;

5* END;

SQL> /1 2 3 4 5 6 7 8 9 10

PL/SQL procedure successfully completed.

SQL> 1 BEGIN 2 FOR I IN REVERSE 1 .. 10 LOOP 3 DBMS_OUTPUT.PUT_LINE(I); 4 END LOOP; 5* END;

SQL> /10 9 8 7 6 5 4 3 2 1 PL/SQL procedure successfully completed.

WHILE LOOP:

1 DECLARE

2 V_COUNTER NUMBER(10):=0;

3 V_NUM NUMBER(10):=10;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

232

Page 233: Oracle Queries

ORACLE 4 BEGIN

5 WHILE V_COUNTER < V_NUM LOOP

6 DBMS_OUTPUT.PUT_LINE(V_COUNTER);

7 V_COUNTER := V_COUNTER+1;

8 END LOOP;

9* END;

SQL> /

0 1 2 3 4 5 6 7

CURSORS:

IN ORDER TO PROCESS A SQL STATEMENT ORACLE WILL ALLOCATE AN AREA OF MEMORY KNOWN AS THE CONTEXT AREA.

A CURSOR IS A HANDLE OR POINTER TO THE CONTEXT AREA.

THERE ARE TWO TYPES OF CURSORS.

IMPLICIT CURSORS.

EXPLICIT CURSORS.

THE ORACLE SERVER USES IMPLICIT CIRSORS TO PARSE AND EXECUTE YOUR SQL STATEMENTS.

EXPLICIT CURSORS ARE EXPLICITLY DECLARED BY THE PROGRAMMER.

IMPLICIT CURSOR ATTRIBUTES:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

233

Page 234: Oracle Queries

ORACLEUSING IMPLICIT CURSOR ATTRIBUTES,YOU CAN TEST THE OUTCOME OF YOUR SQL STATEMENTS.

SQL %ISOPENTHE ORACLE ENGINE AUTOMATICALLY OPENS AND CLOSES THE SQL CURSOR AFTER EXECUTING ITS ASSOCIATED SELECT,INSERT,UPDATE OR DELETE SQL STATEMENT HAS BEEN PROCESSED IN CASE OF IMPLICIT CURSORS. THUS THE SQL%IS OPEN ATTRIBUTE OF AN IMPLICIT CURSOR CANNOT BE REFERENCES OUTSIDE OF ITS SQL STATEMENT. AS A RESULT,SQL%ISOPEN ALWAYS EVALUATES TO FALSE.

SQL%FOUNDBOOLEAN ATTRIBUTE THAT EVALUATES TO TRUE, IF AN INSERT,UPDATE OR DELETE AFFECTED ONE OR MORE ROWS OR SELECT STATEMENT RETURNS ONE OR MORE ROWS.OTHERWISE IT EVALUATES TO FALSE.THE SYNTAX FOR ACCESSING THIS ATTRIBUTE IS SQL%FOUND.

SQL%NOTFOUNDBOOLEAN ATTRIBUTE THAT EVALUATES TO FALSE, IF AN INSERT,UPDATE OR DELETE AFFECTED ONE OR MORE ROWS OR SELECT STATEMENT RETURNS ONE OR MORE ROWS.OTHERWISE IT EVALUATES TO TRUE.THE SYNTAX FOR ACCESSING THIS ATTRIBUTE IS SQL%NOTFOUND.

SQL%ROWCOUNTRETURNS THE NUMBER OF ROWS AFFECTED BY AN INSERT,UPDATE OR DELETE OR SELECT INTO STATEMENT.THE SYNTAX FOR ACCESSING THIS ATTRIBUTE IS SQL%ROWCOUNT.

SQL> VARIABLE ROW_DELETED VARCHAR2(30)

SQL> DECLARE

2 V_DEPTNO EMP.DEPTNO%TYPE :=10;

3 BEGIN

4 DELETE FROM EMP

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

234

Page 235: Oracle Queries

ORACLE 5 WHERE DEPTNO=V_DEPTNO;

6 :ROW_DELETED :=(SQL%ROWCOUNT || 'ROWS DELETED');

7 END;

8 /

PL/SQL procedure successfully completed.

SQL> PRINT ROW_DELETED

ROW_DELETED -------------------------------- 3ROWS DELETED

SQL> BEGIN

2 DELETE FROM DEPT1

3 WHERE DEPTNO=10;

4 IF SQL%FOUND THEN

5 DBMS_OUTPUT.PUT_LINE('DEPARTMENT SUCCESSFULLY DELTED');

6 END IF;

7 IF SQL%NOTFOUND THEN

8 DBMS_OUTPUT.PUT_LINE('DEPARTMENT NO DOES NOT EXSITS');

9 END IF;

10 END;

11 /DEPARTMENT SUCCESSFULLY DELTED PL/SQL procedure successfully completed.

1 BEGIN

2 DELETE FROM DEPT1

3 WHERE DEPTNO=10;

4 IF SQL%FOUND THEN

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

235

Page 236: Oracle Queries

ORACLE 5 DBMS_OUTPUT.PUT_LINE('DEPARTMENT SUCCESSFULLY DELETED');

6 END IF;

7 IF SQL%NOTFOUND THEN

8 DBMS_OUTPUT.PUT_LINE('DEPARTMENT NO DOES NOT EXSITS');

9 END IF;

10* END;

11 /DEPARTMENT NO DOES NOT EXSITS PL/SQL procedure successfully completed.

SQL %ROWCOUNT:

1 DECLARE

2 ROWS_DELETED NUMBER(10);

3 BEGIN

4 DELETE FROM EMP1

5 WHERE DEPTNO=10;

6 ROWS_DELETED:=SQL%ROWCOUNT;

7 DBMS_OUTPUT.PUT_LINE('NO OF ROWS DELETED: ' ||ROWS_DELETED);

8* END;

SQL> /NO OF ROWS DELETED: 3 PL/SQL procedure successfully completed. PROCESSING THE EXPLICIT CURSORS:

THE FOUR PL/SQL STEPS NECESSARY FOR EXPLICIT CURSOR PROCESSING ARE AS FOLLOWS:

DECLARE THE CURSOR.

OPEN THE CURSOR FOR QUERY.

FETCH THE RESULTS INTO PL/SQL VARIBALES.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

236

Page 237: Oracle Queries

ORACLE CLOSE THE CURSOR.

EXPLICIT CURSOR ATTRIBUTES:

%ROWCOUNT RETURNS THE NUMBER OF ROWS FETCHED FROM THE ACTIVE SET. IT IS SET TO ZERO WHEN THE CURSOR IS OPENED.THE SYNTAX FOR ACCESSING THIS ATTRIBUTEIS CURSORNAME%FOUND.

%FOUND BOOLEAN ATTRIBUTE THAT EVALUATES TO TRUE IF THE LAST FETCH SUCCEEDED BECAUSE A ROW WAS AVALIABLE; OR TO FALSE IF THE LAST FETCH FAILED BECAUSE NO MORE ROWS WERE AVALIABLE.THE SYNTAX FOR ACCESSING THIS ATTRIBUTEIS CURSORNAME%FOUND.

%NOTFOUND BOOLEAN ATTRIBUTE THAT EVALUATES TO FALSE IF THE LAST FETCH SUCCEEDED BECAUSE A ROW WAS AVALIABLE; OR TO TRUE IF THE LAST FETCH FAILED BECAUSE NO MORE ROWS WERE AVALIABLE.THE SYNTAX FOR ACCESSING THIS ATTRIBUTE IS CURSORNAME%NOTFOUND.

%IS OPEN EVALUATES TO TRUE,IF AN EXPLICIT CURSOR IS OPEN. OR TO FALSE, IF IT IS CLOSED.THE SYNTAX FOR ACCESSING THIS ATTRIBUTE IS CURSORNAME%ISOPEN.

IN THE BELOW PL/SQL BLOCK ONLY ONE ROW RETURNS FROM SELECT STATEMENT. 1 DECLARE

2 V_ENAME EMP.ENAME%TYPE;

3 V_JOB EMP.JOB%TYPE;

4 V_SAL EMP.SAL%TYPE;

5 BEGIN

6 SELECT ENAME,JOB,SAL INTO V_ENAME,V_JOB,V_SAL FROM EMP

7 WHERE EMPNO=&EMPLOYEE_NO;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

237

Page 238: Oracle Queries

ORACLE 8 DBMS_OUTPUT.PUT_LINE(V_ENAME||' '||V_JOB||' '||V_SAL);

9* END;

SQL> /Enter value for employee_no: 7369SMITH CLERK 800 PL/SQL procedure successfully completed.

THE BELOW PL/SQL BLOCK RETURNS MORE THAN ONE ROW.

1 DECLARE

2 V_ENAME EMP.ENAME%TYPE;

3 V_JOB EMP.JOB%TYPE;

4 V_SAL EMP.SAL%TYPE;

5 BEGIN

6 SELECT ENAME,JOB,SAL INTO V_ENAME,V_JOB,V_SAL FROM EMP

7 WHERE DEPTNO=&DEPARTMENT_NO;

8 DBMS_OUTPUT.PUT_LINE(V_ENAME||' '||V_JOB||' '||V_SAL);

9* END;

SQL> /Enter value for department_no: 10

DECLARE*ERROR at line 1:ORA-01422: exact fetch returns more than requested number of rows ORA-06512: at line 6

SLOVING THE ABOVE PROBLEM WITH CURSORS:

1 DECLARE

2 CURSOR C IS SELECT ENAME,JOB,SAL FROM EMP

3 WHERE DEPTNO=&DEPARTMENT_NO;

4 V_ENAME EMP.ENAME%TYPE;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

238

Page 239: Oracle Queries

ORACLE 5 V_JOB EMP.JOB%TYPE;

6 V_SAL EMP.SAL%TYPE;

7 BEGIN

8 OPEN C;

9 LOOP

10 FETCH C INTO V_ENAME,V_JOB,V_SAL;

11 EXIT WHEN C%NOTFOUND;

12 DBMS_OUTPUT.PUT_LINE(V_ENAME||' '||V_JOB||' '||V_SAL);

13 END LOOP;

14* END;

SQL> /Enter value for department_no: 10CLARK MANAGER 2450 KING PRESIDENT 5000 MILLER CLERK 1300 PL/SQL procedure successfully completed.

1 SELECT EMPNO,ENAME,SAL FROM EMP1 2* WHERE DEPTNO=10SQL> /

EMPNO ENAME SAL --------- ---------- --------- 7782 CLARK 2450 7839 KING 5000 7934 MILLER 1300

1 DECLARE

2 V_EMPNO EMP.EMPNO%TYPE;

3 V_ENAME EMP.ENAME%TYPE;

4 V_SAL EMP.SAL%TYPE;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

239

Page 240: Oracle Queries

ORACLE 5 V_DEPTNO EMP.DEPTNO%TYPE:=10;

6 V_NO_ROWS NUMBER(5);

7 CURSOR EMP_CURSOR IS SELECT EMPNO,ENAME,SAL FROM EMP1 WHERE DEPTNO=V_DEPTNO;

8 BEGIN

9 OPEN EMP_CURSOR;

10 LOOP

11 FETCH EMP_CURSOR INTO V_EMPNO,V_ENAME,V_SAL;

12 EXIT WHEN EMP_CURSOR%NOTFOUND;

13 DBMS_OUTPUT.PUT_LINE(V_EMPNO || ' ' || V_ENAME || ' '||V_SAL);

14 END LOOP;

15 V_NO_ROWS := EMP_CURSOR%ROWCOUNT;

16 DBMS_OUTPUT.PUT_LINE('NO OF ROWS AFFECTED' || ' ' || V_NO_ROWS);

17 CLOSE EMP_CURSOR;

18* END;

SQL> /7782 CLARK 2450 7839 KING 5000 7934 MILLER 1300 NO OF ROWS AFFECTED 3 PL/SQL procedure successfully completed.

WORKINGWITH %ISOPEN CURSOR ATTRIBUTE:

1 DECLARE

2 V_EMPNO EMP.EMPNO%TYPE;

3 V_ENAME EMP.ENAME%TYPE;

4 V_SAL EMP.SAL%TYPE;

5 V_DEPTNO EMP.DEPTNO%TYPE:=10;

6 V_NO_ROWS NUMBER(5);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

240

Page 241: Oracle Queries

ORACLE 7 CURSOR EMP_CURSOR IS SELECT EMPNO,ENAME,SAL FROM EMP1 WHERE DEPTNO=V_DEPTNO;

8 BEGIN

9 OPEN EMP_CURSOR;

10 IF EMP_CURSOR%ISOPEN THEN

11 LOOP

12 FETCH EMP_CURSOR INTO V_EMPNO,V_ENAME,V_SAL;

13 EXIT WHEN EMP_CURSOR%NOTFOUND;

14 DBMS_OUTPUT.PUT_LINE(V_EMPNO || ' ' || V_ENAME || ' '||V_SAL);

15 END LOOP;

16 V_NO_ROWS := EMP_CURSOR%ROWCOUNT;

17 DBMS_OUTPUT.PUT_LINE('NO OF ROWS AFFECTED' || ' ' || V_NO_ROWS);

18 END IF;

19 CLOSE EMP_CURSOR;

20* END;

SQL> /

7782 CLARK 2450 7839 KING 5000 7934 MILLER 1300 NO OF ROWS AFFECTED 3

PL/SQL procedure successfully completed.

WORKING WITH %FOUND CURSOR ATTRIBUTE:

SQL> DECLARE

2 V_EMPNO EMP.EMPNO%TYPE;

3 V_ENAME EMP.ENAME%TYPE;

4 V_SAL EMP.SAL%TYPE;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

241

Page 242: Oracle Queries

ORACLE 5 V_DEPTNO EMP.DEPTNO%TYPE:=10;

6 V_NO_ROWS NUMBER(5);

7 CURSOR EMP_CURSOR IS SELECT EMPNO,ENAME,SAL FROM EMP1 WHERE DEPTNO=V_DEPTNO; 8 BEGIN 9 OPEN EMP_CURSOR;

10 IF EMP_CURSOR%ISOPEN THEN 11 LOOP

12 FETCH EMP_CURSOR INTO V_EMPNO,V_ENAME,V_SAL;

13 IF EMP_CURSOR%FOUND THEN

14 DBMS_OUTPUT.PUT_LINE(V_EMPNO || ' ' || V_ENAME || ' '||V_SAL);

15 ELSE

16 EXIT;

17 END IF;

18 END LOOP;

19 V_NO_ROWS := EMP_CURSOR%ROWCOUNT;

20 DBMS_OUTPUT.PUT_LINE('NO OF ROWS AFFECTED' || ' ' || V_NO_ROWS);

21 END IF;

22 CLOSE EMP_CURSOR;

23 END;

24 /

7782 CLARK 2450 7839 KING 5000 7934 MILLER 1300 NO OF ROWS AFFECTED 3

PL/SQL procedure successfully completed.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

242

Page 243: Oracle Queries

ORACLEWORKINGWITH%NOTFOUNDCURSOR ATTRIBUTE:

SQL> DECLARE

2 V_EMPNO EMP.EMPNO%TYPE;

3 V_ENAME EMP.ENAME%TYPE;

4 V_SAL EMP.SAL%TYPE;

5 V_DEPTNO EMP.DEPTNO%TYPE:=10;

6 V_NO_ROWS NUMBER(5);

7 CURSOR EMP_CURSOR IS SELECT EMPNO,ENAME,SAL FROM EMP1 WHERE DEPTNO=V_DEPTNO; 8 BEGIN

9 OPEN EMP_CURSOR;

10 IF EMP_CURSOR%ISOPEN THEN

11 LOOP

12 FETCH EMP_CURSOR INTO V_EMPNO,V_ENAME,V_SAL;

13 IF EMP_CURSOR%NOTFOUND THEN

14 EXIT;

15 ELSE

16 DBMS_OUTPUT.PUT_LINE(V_EMPNO || ' ' || V_ENAME || ' '||V_SAL);

17 END IF;

18 END LOOP;

19 V_NO_ROWS := EMP_CURSOR%ROWCOUNT;

20 DBMS_OUTPUT.PUT_LINE('NO OF ROWS AFFECTED' || ' ' || V_NO_ROWS);

21 END IF;

22 CLOSE EMP_CURSOR;

23 END;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

243

Page 244: Oracle Queries

ORACLE 24 /

7782 CLARK 2450 7839 KING 5000 7934 MILLER 1300

NO OF ROWS AFFECTED 3

PL/SQL procedure successfully completed.

WORKING WITH WHILE LOOP IN CURSORS:

1 DECLARE

2 V_EMPNO EMP.EMPNO%TYPE;

3 V_ENAME EMP.ENAME%TYPE;

4 V_SAL EMP.SAL%TYPE;

5 V_DEPTNO EMP.DEPTNO%TYPE:=10;

6 V_NO_ROWS NUMBER(5);

7 CURSOR EMP_CURSOR IS SELECT EMPNO,ENAME,SAL FROM EMP1 WHERE DEPTNO=V_DEPTNO; 8 BEGIN

9 OPEN EMP_CURSOR;

10 IF EMP_CURSOR%ISOPEN THEN

11 FETCH EMP_CURSOR INTO V_EMPNO,V_ENAME,V_SAL;

12 WHILE EMP_CURSOR%FOUND LOOP

13 DBMS_OUTPUT.PUT_LINE(V_EMPNO || ' ' || V_ENAME || ' '||V_SAL);

14 FETCH EMP_CURSOR INTO V_EMPNO,V_ENAME,V_SAL;

15 END LOOP;

16 V_NO_ROWS := EMP_CURSOR%ROWCOUNT;

17 DBMS_OUTPUT.PUT_LINE('NO OF ROWS AFFECTED' || ' ' || V_NO_ROWS);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

244

Page 245: Oracle Queries

ORACLE 18 END IF;

19 CLOSE EMP_CURSOR;

20* END;

21 /

7782 CLARK 2450 7839 KING 5000 7934 MILLER 1300

NO OF ROWS AFFECTED 3

PL/SQL procedure successfully completed.

WORKING WITH FOR LOOP IN CURSORS:

1 DECLARE

2 V_EMPNO EMP.EMPNO%TYPE;

3 V_ENAME EMP.ENAME%TYPE;

4 V_SAL EMP.SAL%TYPE;

5 V_DEPTNO EMP.DEPTNO%TYPE:=10;

6 V_NO_ROWS NUMBER(5);

7 CURSOR EMP_CURSOR IS SELECT EMPNO,ENAME,SAL FROM EMP1 WHERE DEPTNO=V_DEPTNO; 8 BEGIN

9 FOR V_S IN EMP_CURSOR LOOP

10 DBMS_OUTPUT.PUT_LINE(V_S.EMPNO || ' ' || V_S.ENAME || ' '||V_S.SAL);

11 V_NO_ROWS :=EMP_CURSOR%ROWCOUNT;

12 END LOOP;

13 DBMS_OUTPUT.PUT_LINE('NO OF ROWS AFFECTED' || ' ' || V_NO_ROWS);

14* END;

15 /

7782 CLARK 2450

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

245

Page 246: Oracle Queries

ORACLE7839 KING 5000 7934 MILLER 1300

NO OF ROWS AFFECTED 3

PL/SQL procedure successfully completed.

8 9 PL/SQL procedure successfully completed.

EXCEPTION HANDLING:

1 DECLARE

2 V_EMPNO NUMBER(10);

3 V_ENAME VARCHAR2(10);

4 V_SAL NUMBER(10);

5 V_DEPTNO NUMBER(10);

6 BEGIN

7 V_DEPTNO := &DEPARTMENT_NO;

8 SELECT EMPNO,ENAME,SAL INTO V_EMPNO,V_ENAME,V_SAL

FROM EMP WHERE DEPTNO=V_DEPTNO;

9 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);

10* END;

SQL> /Enter value for department_no: 10/

DECLARE

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

246

Page 247: Oracle Queries

ORACLE*ERROR at line 1:ORA-01422: exact fetch returns more than requested number of rows ORA-06512: at line 8

HANDLING EXCEPTION WITHEXCEPTION HANDLER:

1 DECLARE

2 V_EMPNO NUMBER(10);

3 V_ENAME VARCHAR2(10);

4 V_SAL NUMBER(10);

5 V_DEPTNO NUMBER(10);

6 BEGIN

7 V_DEPTNO := &DEPARTMENT_NO;

9 SELECT EMPNO,ENAME,SAL INTO V_EMPNO,V_ENAME,V_SAL FROM EMP WHERE DEPTNO=V_DEPTNO;

10 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);

11 EXCEPTION

11 WHEN NO_DATA_FOUND THEN

12 DBMS_OUTPUT.PUT_LINE('DEPRTMENT NO:'||V_DEPTNO|| 'IS NOT PRESENT IN THE EMPTABLE');

13 WHEN TOO_MANY_ROWS THEN

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

247

Page 248: Oracle Queries

ORACLE14 DBMS_OUTPUT.PUT_LINE('DEPRTMENT NO:'||V_DEPTNO|| 'IS RETRIVING MORE THAN ONE ROW');

15* END;

/16 /

Enter value for department_no: 10

DEPRTMENT NO:10IS RETRIVING MORE THAN ONE ROW

PL/SQL procedure successfully completed.

1 DECLARE

2 V_EMPNO NUMBER(10);

3 V_ENAME VARCHAR2(10);

4 V_SAL NUMBER(10);

5 V_DEPTNO NUMBER(10);

6 BEGIN

7 V_DEPTNO := &DEPARTMENT_NO;

8 SELECT EMPNO,ENAME,SAL INTO V_EMPNO,V_ENAME,V_SAL9 FROM EMP WHERE DEPTNO=V_DEPTNO;

9 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);

10 EXCEPTION

11 WHEN TOO_MANY_ROWS THEN

12 DBMS_OUTPUT.PUT_LINE('DEPRTMENT NO:'||V_DEPTNO||13 'IS RETRIVING MORE THAN ONE ROW');

13* END;

SQL> /Enter value for department_no: 1DECLARE*ERROR at line 1:ORA-01403: no data found ORA-06512: at line 8

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

248

Page 249: Oracle Queries

ORACLE 1 DECLARE

2 V_EMPNO NUMBER(10);

3 V_ENAME VARCHAR2(10);

4 V_SAL NUMBER(10);

5 V_DEPTNO NUMBER(10);

6 BEGIN

7 V_DEPTNO := &DEPARTMENT_NO;

8 SELECT EMPNO,ENAME,SAL INTO V_EMPNO,V_ENAME,V_SAL 9 FROM EMP WHERE DEPTNO=V_DEPTNO;

9 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);

10 EXCEPTION

11 WHEN NO_DATA_FOUND THEN

12 DBMS_OUTPUT.PUT_LINE('DEPRTMENT NO:'||V_DEPTNO||13 'IS NOT PRESENT IN THE EMPTABLE');

13 WHEN TOO_MANY_ROWS THEN

14 DBMS_OUTPUT.PUT_LINE('DEPRTMENT NO:'||V_DEPTNO|| 15 'IS RETRIVING MORE THAN ONE ROW');

15* END;SQL> /

Enter value for department_no: 1DEPRTMENT NO:1 IS NOT PRESENT IN THE EMPTABLE PL/SQL procedure successfully completed.

SQL> CREATE TABLE DEPARTMENT 2 AS 3 SELECT * FROM DEPT;

Table created.

SQL> SELECT * FROM DEPARTMENT;

DEPTNO DNAME LOC ---------- -------------- -------------

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

249

Page 250: Oracle Queries

ORACLE 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

SQL> ALTER TABLE DEPARTMENT 2 ADD CONSTRAINT DEPT_PK PRIMARY KEY(DEPTNO);

Table altered.

1 DECLARE

2 V_DEPTNO NUMBER(10);

3 V_DNAME VARCHAR2(10);

4 V_LOC VARCHAR2(10);

5 BEGIN

6 V_DEPTNO := &DEPARTMENT_NO;

7 V_DNAME :='&DEPARTMENT_NAME';

8 V_LOC :='&LOC';

9 INSERT INTO DEPARTMENT VALUES (V_DEPTNO,V_DNAME,V_LOC);

10* END;SQL> /

Enter value for department_no: 10Enter value for department_name: COMPUTERSEnter value for loc: MIAMI DECLARE*ERROR at line 1:ORA-00001: unique constraint (SCOTT.DEPT_PK) violated ORA-06512: at line 9

1 DECLARE

2 V_DEPTNO NUMBER(10);

3 V_DNAME VARCHAR2(10);

4 V_LOC VARCHAR2(10);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

250

Page 251: Oracle Queries

ORACLE 5 BEGIN

6 V_DEPTNO := &DEPARTMENT_NO;

7 V_DNAME :='&DEPARTMENT_NAME';

8 V_LOC :='&LOC';

9 INSERT INTO DEPARTMENT VALUES (V_DEPTNO,V_DNAME,V_LOC);

10 EXCEPTION

11 WHEN DUP_VAL_ON_INDEX THEN

12 DBMS_OUTPUT.PUT_LINE('DEPARTMENT NO:'||' '||V_DEPTNO|| 'IS ALREADY ENTERED IN THE DEPARTMENT TABLE');

13* END;

SQL> /Enter value for department_no: 10

Enter value for department_name: COMPUTERS

Enter value for loc: MIAMI

DEPARTMENT NO: 10 IS ALREADY ENTERED IN THE DEPARTMENT TABLE

PL/SQL procedure successfully completed.

1 DECLARE

2 V_DEPTNO NUMBER(10);

3 V_DNAME VARCHAR2(10);

4 V_LOC VARCHAR2(10);

5 BEGIN

6 V_DEPTNO := &DEPARTMENT_NO; 7 V_DNAME :='&DEPARTMENT_NAME';

8 V_LOC :='&LOC';

9 INSERT INTO DEPARTMENT VALUES (V_DEPTNO,V_DNAME,V_LOC);

10 EXCEPTION

11 WHEN DUP_VAL_ON_INDEX THEN

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

251

Page 252: Oracle Queries

ORACLE 12 DBMS_OUTPUT.PUT_LINE('DEPARTMENT NO:'||' '||V_DEPTNO|| 'IS ALREADY ENTERED IN THE DEPARTMENT TABLE');

13* END;

14 /Enter value for department_no: 10Enter value for department_name: COMPUTERS & TECHNOLOGYEnter value for loc: MIAMI DECLARE*ERROR at line 1:ORA-06502: PL/SQL: numeric or value error: character string buffer too small ORA-06512: at line 7

1 DECLARE

2 V_DEPTNO NUMBER(10);

3 V_DNAME VARCHAR2(10);

4 V_LOC VARCHAR2(10);

5 BEGIN

6 V_DEPTNO := &DEPARTMENT_NO;

7 V_DNAME :='&DEPARTMENT_NAME';

8 V_LOC :='&LOC';

9 INSERT INTO DEPARTMENT VALUES (V_DEPTNO,V_DNAME,V_LOC);

10 EXCEPTION

11 WHEN DUP_VAL_ON_INDEX THEN

12 DBMS_OUTPUT.PUT_LINE('DEPARTMENT NO:'||' '||V_DEPTNO|| 'IS ALREADY ENTERED IN THE DEPARTMENT TABLE');

13 WHEN VALUE_ERROR THEN

14 DBMS_OUTPUT.PUT_LINE('DATA TYPE OR DATA SIZE INVALID');

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

252

Page 253: Oracle Queries

ORACLE 15* END;

16 /

Enter value for department_no: 10

Enter value for department_name: COMPUTERS & TECHNOLOGY

Enter value for loc: MIAMI

DATA TYPE OR DATA SIZE INVALID

PL/SQL procedure successfully completed.

RAISE STATEMENT:

SQL> CREATE TABLE BANK_TRANS 2 (ACC_NO NUMBER(10), 3 CURRBAL NUMBER(10)) 4 /

Table created.

SQL> INSERT INTO BANK_TRANS 2 VALUES 3 (1,1000) 4 /

1 row created.

SQL> EDWrote file afiedt.buf

1 INSERT INTO BANK_TRANS 2 VALUES 3* (2,2000)SQL> /

1 row created.

SQL> EDWrote file afiedt.buf

1 INSERT INTO BANK_TRANS 2 VALUES 3* (3,3000)SQL> /

1 row created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

253

Page 254: Oracle Queries

ORACLESQL> EDWrote file afiedt.buf

1 DECLARE

2 V_ACCNO NUMBER(10);

3 V_CURRBAL NUMBER(10);

4 V_WITHDRAWAMT NUMBER(10);

5 MORE_THAN_BAL EXCEPTION;

6 BEGIN

7 V_ACCNO := &ACCOUNT_NO;

8 SELECT ACC_NO,CURRBAL INTO V_ACCNO,V_CURRBAL 9 FROM BANK_TRANS;

9 WHERE ACC_NO=V_ACCNO;

10 V_WITHDRAWAMT := &WITHDRAWAMT;

11 IF V_WITHDRAWAMT > V_CURRBAL THEN

12 RAISE MORE_THAN_BAL;

13 ELSE

14 DBMS_OUTPUT.PUT_LINE('YOU SUCCESSFULLY WITHDRAWN AMOUNT');

15 END IF;

16 EXCEPTION

17 WHEN MORE_THAN_BAL THEN

18 DBMS_OUTPUT.PUT_LINE('ATTEMPTED TO WITH 19 DRAW MORE THAN THE CURRENT BALANCE'20 || ' '|| V_CURRBAL ||' ' || ' FROM THE ACCOUNT NUMBER' || '

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

254

Page 255: Oracle Queries

ORACLE21 ' || V_ACCNO);

20* END;

21 /Enter value for account_no: 1

Enter value for withdrawamt: 500

YOU SUCCESSFULLY WITHDRAWN AMOUNT

PL/SQL procedure successfully completed.

SQL> /

Enter value for account_no: 2

Enter value for withdrawamt: 3000

ATTEMPTED TO WITH DRAW MORE THAN THE CURRENT

BALANCE 2000 FROM THE ACCOUNT NUMBER 2

PL/SQL procedure successfully completed.

PRAGMA EXCEPTION_INIT:

1 DECLARE

2 V_EMPNO NUMBER(10);

3 V_ENAME VARCHAR2(10);

4 V_SAL NUMBER(10);

5 V_DEPTNO NUMBER(10);

6 BEGIN

7 V_DEPTNO := &DEPARTMENT_NO;

8 SELECT EMPNO,ENAME,SAL INTO V_EMPNO,V_ENAME,V_SAL 9 FROM EMP WHERE DEPTNO=V_DEPTNO;

9 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);

10* END;

11 /

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

255

Page 256: Oracle Queries

ORACLEEnter value for department_no: 10

DECLARE*ERROR at line 1:ORA-01422: exact fetch returns more than requested number of rows ORA-06512: at line 8

1 DECLARE 2 V_EMPNO NUMBER(10);

3 V_ENAME VARCHAR2(10);

4 V_SAL NUMBER(10);

5 V_DEPTNO NUMBER(10);

6 E_TOOOOMANYROWS EXCEPTION;

7 PRAGMA EXCEPTION_INIT(E_TOOOOMANYROWS,-1422);

8 BEGIN

9 V_DEPTNO := &DEPARTMENT_NO;

10 SELECT EMPNO,ENAME,SAL INTO V_EMPNO,V_ENAME,V_SAL 11 FROM EMP WHERE DEPTNO=V_DEPTNO;

11 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);

12 EXCEPTION

13 WHEN E_TOOOOMANYROWS THEN

13 DBMS_OUTPUT.PUT_LINE('THE DEPTNO '||V_DEPTNO ||' 14 ' || 'FETCHING MORE THAN ONE ROW');

15* END;

SQL> /

Enter value for department_no: 10

THE DEPTNO 10 FETCHING MORE THAN ONE ROW

PL/SQL procedure successfully completed.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

256

Page 257: Oracle Queries

ORACLE 1 DECLARE

2 V_EMPNO NUMBER(10);

3 V_ENAME VARCHAR2(10);

4 V_SAL NUMBER(10);

5 V_DEPTNO NUMBER(10);

6 E_TOOOOMANYROWS EXCEPTION;

7 PRAGMA EXCEPTION_INIT(E_TOOOOMANYROWS,-1421);

8 BEGIN

9 V_DEPTNO := &DEPARTMENT_NO;

10 SELECT EMPNO,ENAME,SAL INTO V_EMPNO,V_ENAME,V_SAL11 FROM EMP WHERE DEPTNO=V_DEPTNO;

11 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);

12 EXCEPTION

13 WHEN E_TOOOOMANYROWS THEN

15 DBMS_OUTPUT.PUT_LINE('THE DEPTNO '||V_DEPTNO ||' 16 ' || 'FETCHING MORE THAN ONE ROW');

15* END;

SQL> /

Enter value for department_no: 10

DECLARE*ERROR at line 1:ORA-01422: exact fetch returns more than requested number of rows ORA-06512: at line 10

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

257

Page 258: Oracle Queries

ORACLE

1 DECLARE

2 V_EMPNO NUMBER(10);

3 V_ENAME VARCHAR2(10);

4 V_SAL NUMBER(10);

5 V_DEPTNO NUMBER(10);

6 BEGIN

7 V_DEPTNO := &DEPARTMENT_NO;

8 SELECT EMPNO,ENAME,SAL INTO V_EMPNO,V_ENAME,V_SAL9 FROM EMP WHERE DEPTNO=V_DEPTNO;

9 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);

10 EXCEPTION

11 WHEN TOO_MANY_ROWS THEN

12 DBMS_OUTPUT.PUT_LINE('THE DEPTNO 13 '||V_DEPTNO ||' ' || 'FETCHING MORE THAN ONE ROW');

13* END;

14 /

Enter value for department_no: 10

THE DEPTNO 10 FETCHING MORE THAN ONE ROW

PL/SQL procedure successfully completed.

WHEN OTHERS:

1 DECLARE

2 V_EMPNO NUMBER(10);

3 V_ENAME VARCHAR2(10);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

258

Page 259: Oracle Queries

ORACLE 4 V_SAL NUMBER(10);

5 V_DEPTNO NUMBER(10);

6 BEGIN

7 V_DEPTNO := &DEPARTMENT_NO;

8 SELECT EMPNO,ENAME,SAL INTO V_EMPNO,V_ENAME,V_SAL9 FROM EMP WHERE DEPTNO=V_DEPTNO;

9 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);

10 EXCEPTION

11 WHEN TOO_MANY_ROWS THEN

12 DBMS_OUTPUT.PUT_LINE('THE DEPTNO '||V_DEPTNO ||'13 ' || 'FETCHING MORE THAN ONE ROW');

13 WHEN OTHERS THEN

14 DBMS_OUTPUT.PUT_LINE('THE DEPTNO '||V_DEPTNO ||' ' 15 || 'IS NOT PRESENT IN THE TABLE');

15* END;SQL> /

Enter value for department_no: 10

THE DEPTNO 10 FETCHING MORE THAN ONE ROW

PL/SQL procedure successfully completed.

SQL> /

Enter value for department_no: 1

THE DEPTNO 1 IS NOT PRESENT IN THE TABLE

PL/SQL procedure successfully completed.

SQL CODE & SQLERRM:

SQL> DECLARE

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

259

Page 260: Oracle Queries

ORACLE 2 V_EMPNO NUMBER(10);

3 V_ENAME VARCHAR2(10);

4 V_SAL NUMBER(10);

5 V_DEPTNO NUMBER(10);

6 V_ERRORCODE NUMBER(10);

7 V_ERRORTEXT VARCHAR2(255);

10 BEGIN

9 V_DEPTNO := &DEPARTMENT_NO;

11 SELECT EMPNO,ENAME,SAL INTO V_EMPNO,V_ENAME,V_SAL12 FROM EMP WHERE DEPTNO=V_DEPTNO;

11 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);

12 EXCEPTION

13 WHEN TOO_MANY_ROWS THEN

13 DBMS_OUTPUT.PUT_LINE('THE DEPTNO '||V_DEPTNO ||' ' 14 || 'FETCHING MORE THAN ONE ROW');

15 WHEN OTHERS THEN

16 V_ERRORCODE:=SQLCODE;

17 V_ERRORTEXT:=SQLERRM;

18 DBMS_OUTPUT.PUT_LINE(V_ERRORCODE || V_ERRORTEXT);

19 END;

20 /

Enter value for department_no: 10

THE DEPTNO 10 FETCHING MORE THAN ONE ROW

PL/SQL procedure successfully completed.

1 DECLARE

2 V_EMPNO NUMBER(10);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

260

Page 261: Oracle Queries

ORACLE 3 V_ENAME VARCHAR2(10);

4 V_SAL NUMBER(10);

5 V_DEPTNO NUMBER(10);

6 V_ERRORCODE NUMBER(10);

7 V_ERRORTEXT VARCHAR2(255);

8 BEGIN

9 V_DEPTNO := &DEPARTMENT_NO;

10 SELECT EMPNO,ENAME,SAL INTO V_EMPNO,V_ENAME,V_SAL 11 FROM EMP WHERE DEPTNO=V_DEPTNO;

11 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);

12 EXCEPTION

13 WHEN TOO_MANY_ROWS THEN

15 DBMS_OUTPUT.PUT_LINE('THE DEPTNO '||V_DEPTNO ||' ' 16 || 'FETCHING MORE THAN ONE ROW');

15 WHEN OTHERS THEN

16 V_ERRORCODE:=SQLCODE;

17 V_ERRORTEXT:=SQLERRM;

18 DBMS_OUTPUT.PUT_LINE(V_ERRORCODE || V_ERRORTEXT);

19* END;

SQL> /

Enter value for department_no: 1

100ORA-01403: no data found

PL/SQL procedure successfully completed.

1 DECLARE

2 V_EMPNO NUMBER(10);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

261

Page 262: Oracle Queries

ORACLE 3 V_ENAME VARCHAR2(10);

4 V_SAL NUMBER(10);

5 V_DEPTNO NUMBER(10);

6 V_ERRORCODE NUMBER(10);

7 V_ERRORTEXT VARCHAR2(255);

8 BEGIN

9 V_DEPTNO := &DEPARTMENT_NO;

10 SELECT EMPNO,ENAME,SAL INTO V_EMPNO,V_ENAME,V_SAL11 FROM EMP WHERE DEPTNO=V_DEPTNO;

11 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);

12 EXCEPTION

13 WHEN TOO_MANY_ROWS THEN

14 DBMS_OUTPUT.PUT_LINE('THE DEPTNO '||V_DEPTNO ||' 15 ' || 'FETCHING MORE THAN ONE ROW');

15 WHEN OTHERS THEN

16 V_ERRORCODE:=SQLCODE;

17 V_ERRORTEXT:=SQLERRM;

18 DBMS_OUTPUT.PUT_LINE(V_ERRORCODE);

19 DBMS_OUTPUT.PUT_LINE(V_ERRORTEXT);

20* END;

21 /Enter value for department_no: 1100 ORA-01403: no data found

PL/SQL procedure successfully completed.

1 DECLARE

2 V_EMPNO NUMBER(10);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

262

Page 263: Oracle Queries

ORACLE 3 V_ENAME VARCHAR2(10);

4 V_SAL NUMBER(10);

5 V_DEPTNO NUMBER(10);

6 V_ERRORCODE NUMBER(10);

7 V_ERRORTEXT VARCHAR2(255);

8 BEGIN

9 V_DEPTNO := &DEPARTMENT_NO;

10 SELECT EMPNO,ENAME,SAL INTO V_EMPNO,V_ENAME,V_SAL11 FROM EMP WHERE DEPTNO=V_DEPTNO;

11 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);

12 EXCEPTION

13 WHEN OTHERS THEN

14 V_ERRORCODE:=SQLCODE;

15 V_ERRORTEXT:=SQLERRM;

16 DBMS_OUTPUT.PUT_LINE(V_ERRORCODE);

17 DBMS_OUTPUT.PUT_LINE(V_ERRORTEXT);

18* END;

19 /Enter value for department_no: 10

-1422

ORA-01422: exact fetch returns more than requested number of rows

PL/SQL procedure successfully completed.

SQL> DECLARE

2 V_EMPNO NUMBER(10);

3 V_ENAME NUMBER(10);

4 V_SAL NUMBER(10);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

263

Page 264: Oracle Queries

ORACLE 5 V_DEPTNO NUMBER(10);

6 V_ERRORCODE NUMBER(10);

7 V_ERRORTEXT VARCHAR2(255);

8 BEGIN

9 V_EMPNO := &EMPLOYEE_NO;

10 SELECT EMPNO,ENAME,SAL INTO V_EMPNO,V_ENAME,V_SAL11 FROM EMP WHERE EMPNO=V_EMPNO;

11 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);

12 EXCEPTION

13 WHEN OTHERS THEN

14 V_ERRORCODE:=SQLCODE;

15 V_ERRORTEXT:=SQLERRM;

16 DBMS_OUTPUT.PUT_LINE(V_ERRORCODE);

17 DBMS_OUTPUT.PUT_LINE(V_ERRORTEXT);

18 END;

19 /Enter value for employee_no: 7369-6502 ORA-06502: PL/SQL: numeric or value error: character to number conversion error

PL/SQL procedure successfully completed.

SQL> DECLARE

2 V_ACCNO NUMBER(10);

3 V_CURRBAL NUMBER(10);

4 V_WITHDRAWAMT NUMBER(10);

5 V_ERRORCODE NUMBER(10);

6 V_ERRORTEXT VARCHAR2(255);

7 MORE_THAN_BAL EXCEPTION;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

264

Page 265: Oracle Queries

ORACLE 8 BEGIN

9 V_ACCNO := &ACCOUNT_NO;

10 SELECT ACC_NO,CURRBAL INTO V_ACCNO,V_CURRBAL 11 FROM BANK_TRANS;

11 WHERE ACC_NO=V_ACCNO;

12 V_WITHDRAWAMT := &WITHDRAWAMT;

13 IF V_WITHDRAWAMT > V_CURRBAL THEN

14 RAISE MORE_THAN_BAL;

15 ELSE

16 DBMS_OUTPUT.PUT_LINE('YOU SUCCESSFULLY WITHDRAWN AMOUNT');

17 END IF;

18 EXCEPTION

19 WHEN OTHERS THEN

20 V_ERRORCODE:=SQLCODE;

21 V_ERRORTEXT:=SQLERRM;

22 DBMS_OUTPUT.PUT_LINE(V_ERRORCODE);

23 DBMS_OUTPUT.PUT_LINE(V_ERRORTEXT);

24 END;

25 /

Enter value for account_no: 1

Enter value for withdrawamt: 20001 User-Defined Exception

PL/SQL procedure successfully completed.RAISE_APPLICATION_ERROR:

USE CAN USE THE BUILT- IN FUNCTION RAISE_APPLICATION_ERRORTO CREATE YOUR OWN ERROR MESSAGES, WHICH CAN BE MORE DESCRIPTIVE THAN NAMED EXCEPTIONS.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

265

Page 266: Oracle Queries

ORACLERAISE_APPLICATION_ERROR(ERROR_NUMBER, ERROR_MESSAGE).

WHERE ERROR_NUMBER IS A VALUE BETWEEN –20,000 AND –20,999.ERROR MESSAGE IS THE TEXT ASSOCIATED WITH THIS ERROR.

1 DECLARE 2 V_SAL NUMBER(10);

3 V_EMPNO NUMBER(10);

4 BEGIN

5 V_EMPNO:=&EMPLOYEE_NO;

6 SELECT SAL INTO V_SAL FROM EMP

7 WHERE EMPNO=V_EMPNO;

8 IF LENGTH(V_EMPNO) > 4 THEN

9 RAISE_APPLICATION_ERROR(-20000,'YOU CANNOT ENTER EMPNO WITH MORE THAN 4 NUMBERS');

10 END IF; 11 DBMS_OUTPUT.PUT_LINE(V_SAL);

12 EXCEPTION

13 WHEN NO_DATA_FOUND THEN

14 RAISE_APPLICATION_ERROR(-20001,'THERE IS NO DATA FOR THE EMPNO YOU ENTERED');

15* END;

SQL> /

Enter value for employee_no: 7369

PL/SQL procedure successfully completed.

SQL> SET SERVEROUTPUT ON

SQL> /

Enter value for employee_no: 7369

800

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

266

Page 267: Oracle Queries

ORACLEPL/SQL procedure successfully completed.

SQL> /

Enter value for employee_no: 99999

DECLARE*ERROR at line 1:ORA-20001: THERE IS NO DATA FOR THE EMPNO YOU ENTERED ORA-06512: at line 14

1 DECLARE

2 V_SAL NUMBER(10);

3 V_EMPNO NUMBER(10);

4 BEGIN

5 V_EMPNO:=&EMPLOYEE_NO;

6 IF LENGTH(V_EMPNO) > 4 THEN

7 RAISE_APPLICATION_ERROR(-20000,'YOU CANNOT ENTER EMPNO WITH MORE THAN 4 NUMBERS');

8 END IF;

9 SELECT SAL INTO V_SAL FROM EMP

10 WHERE EMPNO=V_EMPNO;

11 DBMS_OUTPUT.PUT_LINE(V_SAL);

12 EXCEPTION 13 WHEN NO_DATA_FOUND THEN

14 RAISE_APPLICATION_ERROR(-20001,'THERE IS NO DATA FOR THE EMPNO YOU ENTERED');

15* END;

SQL> /

Enter value for employee_no: 7369

800

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

267

Page 268: Oracle Queries

ORACLEPL/SQL procedure successfully completed.

SQL> /

Enter value for employee_no: 9999

DECLARE*ERROR at line 1:ORA-20001: THERE IS NO DATA FOR THE EMPNO YOU ENTERED ORA-06512: at line 14

SQL> /

Enter value for employee_no: 99999

DECLARE*ERROR at line 1:ORA-20000: YOU CANNOT ENTER EMPNO WITH MORE THAN 4 NUMBERS ORA-06512: at line 7

PARAMETERISED CURSORS:

1 DECLARE2 CURSOR C (V_DEPTNO NUMBER) IS SELECT EMPNO,ENAME FROM EMP WHERE DEPTNO=V_DEPTNO;

3 V_EMPNO EMP.EMPNO%TYPE; 4 V_ENAME EMP.ENAME%TYPE; 5 BEGIN 6 OPEN C(10); 7 LOOP 8 FETCH C INTO V_EMPNO,V_ENAME; 9 EXIT WHEN C%NOTFOUND; 10 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME); 11 END LOOP; 12* END;SQL> /7782CLARK 7839KING 7934MILLER

PL/SQL procedure successfully completed.

1 DECLARE2 CURSOR C (V_DEPTNO NUMBER) IS SELECT EMPNO,ENAME

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

268

Page 269: Oracle Queries

ORACLE FROM EMP WHERE DEPTNO=V_DEPTNO;

3 V_EMPNO EMP.EMPNO%TYPE; 4 V_ENAME EMP.ENAME%TYPE; 5 BEGIN 6 OPEN C(&DEPTNO); 7 LOOP 8 FETCH C INTO V_EMPNO,V_ENAME; 9 EXIT WHEN C%NOTFOUND; 10 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME); 11 END LOOP; 12* END;SQL> /Enter value for deptno: 107782CLARK 7839KING 7934MILLER

PL/SQL procedure successfully completed.

SQL> /Enter value for deptno: 207369SMITH 7566JONES 7788SCOTT 7876ADAMS 7902FORD

PL/SQL procedure successfully completed.

SQL> /Enter value for deptno: 307499ALLEN 7521WARD 7654MARTIN 7698BLAKE 7844TURNER 7900JAMES

PL/SQL procedure successfully completed.

1 DECLARE2 CURSOR C (V_DEPTNO NUMBER) IS SELECT EMPNO,ENAME FROM EMP WHERE DEPTNO=V_DEPTNO;

3 V_EMPNO EMP.EMPNO%TYPE; 4 V_ENAME EMP.ENAME%TYPE; 5 BEGIN 6 FOR V_FOR IN C(&DEPTNO) LOOP 7 DBMS_OUTPUT.PUT_LINE(V_FOR.EMPNO||V_FOR.ENAME); 8 END LOOP; 9* END;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

269

Page 270: Oracle Queries

ORACLE 10 /Enter value for deptno: 107782CLARK 7839KING 7934MILLER

PL/SQL procedure successfully completed.

PARAMETERISED CURSORS WITH FOR LOOP:

1 DECLARE 2 CURSOR C (V_DEPTNO NUMBER) IS SELECT EMPNO,ENAME FROM EMP WHERE DEPTNO=V_DEPTNO; 3 BEGIN 4 FOR V_FOR IN C(&DEPTNO) LOOP 5 DBMS_OUTPUT.PUT_LINE(V_FOR.EMPNO||V_FOR.ENAME); 6 END LOOP; 7* END;SQL> /Enter value for deptno: 107782CLARK 7839KING 7934MILLER

PL/SQL procedure successfully completed.

SQL> /Enter value for deptno: 207369SMITH 7566JONES 7788SCOTT 7876ADAMS 7902FORD

PL/SQL procedure successfully completed.

SQL> /Enter value for deptno: 307499ALLEN 7521WARD 7654MARTIN 7698BLAKE 7844TURNER 7900JAMES

PL/SQL procedure successfully completed.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

270

Page 271: Oracle Queries

ORACLE

PL/SQL RECORDS:

1 DECLARE

2 V_DEPTNO DEPT.DEPTNO%TYPE;

3 V_DNAME DEPT.DNAME%TYPE;

4 V_LOC DEPT.LOC%TYPE;

5 BEGIN

6 SELECT DEPTNO,DNAME,LOC INTO V_DEPTNO,V_DNAME,V_LOC

7 FROM DEPT WHERE DEPTNO=&DEPTNO;

8 DBMS_OUTPUT.PUT_LINE(V_DEPTNO||V_DNAME||V_LOC);

9* END; 10 /Enter value for deptno: 10PL/SQL procedure successfully completed.

SQL> SET SERVEROUTPUT ONEnter value for deptno: 10

10ACCOUNTINGNEW YORK PL/SQL procedure successfully completed.

SQL> /Enter value for deptno: 2020RESEARCHDALLAS

PL/SQL procedure successfully completed.

SQL> /

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

271

Page 272: Oracle Queries

ORACLEEnter value for deptno: 3030SALESCHICAGO

PL/SQL procedure successfully completed.

SQL> /Enter value for deptno: 4040OPERATIONSBOSTON

PL/SQL procedure successfully completed.

DECLARING A RECORD TYPE:

1 DECLARE

2 TYPE DEPT_RECORD IS RECORD 3 ( 4 V_DEPTNO DEPT.DEPTNO%TYPE, 5 V_DNAME DEPT.DNAME%TYPE, 6 V_LOC DEPT.LOC%TYPE);

7 DEPT_REC DEPT_RECORD; 8 BEGIN 9 SELECT DEPTNO,DNAME,LOC INTO DEPT_REC 10 FROM DEPT WHERE DEPTNO=&DEPTNO; 11 DBMS_OUTPUT.PUT_LINE(DEPT_REC.V_DEPTNO||DEPT_REC.V_DNAME||DEPT_REC.V_LOC); 12* END; 13 /Enter value for deptno: 1010ACCOUNTINGNEW YORK

PL/SQL procedure successfully completed.

SQL> /Enter value for deptno: 2020RESEARCHDALLAS

PL/SQL procedure successfully completed.

SQL> /Enter value for deptno: 3030SALESCHICAGO

PL/SQL procedure successfully completed.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

272

Page 273: Oracle Queries

ORACLESQL> /Enter value for deptno: 4040OPERATIONSBOSTON

PL/SQL procedure successfully completed.

1 DECLARE 2 TYPE DEPT_RECORD IS RECORD 3 ( 4 V_DEPTNO DEPT.DEPTNO%TYPE, 5 V_DNAME DEPT.DNAME%TYPE, 6 V_LOC DEPT.LOC%TYPE); 7 DEPT_REC DEPT_RECORD; 8 BEGIN 9 SELECT DEPTNO,DNAME,LOC INTO DEPT_REC FROM DEPT; 10 DBMS_OUTPUT.PUT_LINE(DEPT_REC.V_DEPTNO||DEPT_REC.V_DNAME||DEPT_REC.V_LOC); 11* END;SQL> /DECLARE*ERROR at line 1:ORA-01422: exact fetch returns more than requested number of rows ORA-06512: at line 9

USING CURSOR TO SLOVE THE ERROR:

1 DECLARE 2 CURSOR C IS SELECT DEPTNO,DNAME,LOC FROM DEPT; 3 TYPE DEPT_RECORD IS RECORD 4 ( 5 V_DEPTNO DEPT.DEPTNO%TYPE, 6 V_DNAME DEPT.DNAME%TYPE, 7 V_LOC DEPT.LOC%TYPE); 8 DEPT_REC DEPT_RECORD;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

273

Page 274: Oracle Queries

ORACLE 9 BEGIN 10 OPEN C; 11 LOOP 12 FETCH C INTO DEPT_REC; 13 EXIT WHEN C%NOTFOUND; 14 DBMS_OUTPUT.PUT_LINE(DEPT_REC.V_DEPTNO||DEPT_REC.V_DNAME||DEPT_REC.V_LOC); 15 END LOOP; 16 CLOSE C; 17* END; 18 /10ACCOUNTINGNEW YORK 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTON

PL/SQL procedure successfully completed.

USING %ROWTYPE:

1 DECLARE 2 CURSOR C IS SELECT DEPTNO,DNAME,LOC FROM DEPT; 3 DEPT_REC DEPT%ROWTYPE; 4 BEGIN 5 OPEN C; 6 LOOP 7 FETCH C INTO DEPT_REC; 8 EXIT WHEN C%NOTFOUND; 9 DBMS_OUTPUT.PUT_LINE(DEPT_REC.DEPTNO||DEPT_REC.DNAME||DEPT_REC.LOC); 10 END LOOP; 11 CLOSE C; 12* END;SQL> /10ACCOUNTINGNEW YORK 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTON

PL/SQL procedure successfully completed.

1 DECLARE 2 CURSOR C IS SELECT * FROM DEPT; 3 DEPT_REC DEPT%ROWTYPE;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

274

Page 275: Oracle Queries

ORACLE 4 BEGIN 5 OPEN C; 6 LOOP 7 FETCH C INTO DEPT_REC; 8 EXIT WHEN C%NOTFOUND; 9 DBMS_OUTPUT.PUT_LINE(DEPT_REC.DEPTNO||DEPT_REC.DNAME||DEPT_REC.LOC); 10 END LOOP; 11 CLOSE C; 12* END;SQL> /10ACCOUNTINGNEW YORK 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTON

PL/SQL procedure successfully completed.

1 DECLARE 2 CURSOR C IS SELECT * FROM EMP; 3 EMP_REC EMP%ROWTYPE; 4 BEGIN 5 OPEN C; 6 LOOP 7 FETCH C INTO EMP_REC; 8 EXIT WHEN C%NOTFOUND; 9 DBMS_OUTPUT.PUT_LINE(EMP_REC.EMPNO||EMP_REC.ENAME||EMP_REC.JOB|| 10 EMP_REC.MGR||EMP_REC.HIREDATE||EMP_REC.SAL|| 11 EMP_REC.COMM||EMP_REC.DEPTNO); 12 END LOOP; 13 CLOSE C; 14* END; 15 /7369SMITHCLERK790217-DEC-8080020 7499ALLENSALESMAN769820-FEB-81160030030 7521WARDSALESMAN769822-FEB-81125050030 7566JONESMANAGER783902-APR-81297520 7654MARTINSALESMAN769828-SEP-811250140030 7698BLAKEMANAGER783901-MAY-81285030

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

275

Page 276: Oracle Queries

ORACLE7782CLARKMANAGER783909-JUN-81245010 7788SCOTTANALYST756619-APR-87300020 7839KINGPRESIDENT17-NOV-81500010 7844TURNERSALESMAN769808-SEP-811500030 7876ADAMSCLERK778823-MAY-87110020 7900JAMESCLERK769803-DEC-8195030 7902FORDANALYST756603-DEC-81300020 7934MILLERCLERK778223-JAN-82130010

PL/SQL procedure successfully completed.

PL/SQL TABLES:

1 DECLARE 2 TYPE NUMBERTAB IS TABLE OF NUMBER 3 INDEX BY BINARY_INTEGER; 4 V_NUMBERS NUMBERTAB; 5 BEGINFOR ASSIGNING VALUES: 6 FOR V_COUNT IN 1..10 LOOP 7 V_NUMBERS(V_COUNT) := V_COUNT*10;

8 END LOOP;FOR RETRIVING VALUES FROM TABLE: 9 FOR V_COUNT IN 1..10 LOOP 10 DBMS_OUTPUT.PUT_LINE(V_NUMBERS(V_COUNT)); 11 END LOOP;

12* END; 13 /10 20 30 40 50 60 70 80 90 100

PL/SQL procedure successfully completed.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

276

Page 277: Oracle Queries

ORACLE

1 DECLARE 2 TYPE NUMBERTAB IS TABLE OF NUMBER 3 INDEX BY BINARY_INTEGER; 4 V_NUMBERS NUMBERTAB; 5 BEGIN 6 FOR V_COUNT IN 1..10 LOOP 7 V_NUMBERS(V_COUNT) := V_COUNT*10; 8 END LOOP;

9 FOR V_COUNT IN 1..10 LOOP 10 DBMS_OUTPUT.PUT_LINE('V_NUMBERS('|| V_COUNT ||'):'); 11 DBMS_OUTPUT.PUT_LINE(V_NUMBERS(V_COUNT)); 12 END LOOP; 13* END; 14 /V_NUMBERS(1): 10 V_NUMBERS(2): 20 V_NUMBERS(3): 30 V_NUMBERS(4): 40 V_NUMBERS(5): 50 V_NUMBERS(6): 60 V_NUMBERS(7): 70 V_NUMBERS(8): 80 V_NUMBERS(9): 90 V_NUMBERS(10): 100

PL/SQL procedure successfully completed.

SQL> EDWrote file afiedt.buf

1 DECLARE 2 TYPE NUMBERTAB IS TABLE OF NUMBER 3 INDEX BY BINARY_INTEGER; 4 V_NUMBERS NUMBERTAB;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

277

Page 278: Oracle Queries

ORACLE 5 BEGIN

6 FOR V_COUNT IN 1..10 LOOP 7 V_NUMBERS(V_COUNT) := V_COUNT*10; 8 END LOOP;

9 FOR V_COUNT IN 1..10 LOOP 10 DBMS_OUTPUT.PUT_LINE('V_NUMBERS('|| V_COUNT ||'):'||V_NUMBERS(V_COUNT)); 11 END LOOP;

12* END; 13 /V_NUMBERS(1):10 V_NUMBERS(2):20 V_NUMBERS(3):30 V_NUMBERS(4):40 V_NUMBERS(5):50 V_NUMBERS(6):60 V_NUMBERS(7):70 V_NUMBERS(8):80 V_NUMBERS(9):90 V_NUMBERS(10):100

PL/SQL procedure successfully completed.

1 DECLARE

2 TYPE NUMBERTAB IS TABLE OF NUMBER 3 INDEX BY BINARY_INTEGER;

4 V_NUMBERS NUMBERTAB;

5 BEGIN

6 FOR V_COUNT IN 1..10 LOOP 7 V_NUMBERS(V_COUNT) := V_COUNT*10; 8 END LOOP;

9 FOR V_COUNT IN 1..10 LOOP 10 DBMS_OUTPUT.PUT_LINE('V_NUMBERS('|| V_COUNT ||'):'||V_NUMBERS(V_COUNT)); 11 END LOOP;

12 DBMS_OUTPUT.PUT_LINE(V_NUMBERS.COUNT); 13 DBMS_OUTPUT.PUT_LINE(V_NUMBERS.FIRST); 14 DBMS_OUTPUT.PUT_LINE(V_NUMBERS.LAST);

15* END; 16 /V_NUMBERS(1):10

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

278

Page 279: Oracle Queries

ORACLEV_NUMBERS(2):20 V_NUMBERS(3):30 V_NUMBERS(4):40 V_NUMBERS(5):50 V_NUMBERS(6):60 V_NUMBERS(7):70 V_NUMBERS(8):80 V_NUMBERS(9):90 V_NUMBERS(10):100 10 1 10

PL/SQL procedure successfully completed.

1 DECLARE 2 TYPE NUMBERTAB IS TABLE OF NUMBER 3 INDEX BY BINARY_INTEGER; 4 V_NUMBERS NUMBERTAB; 5 BEGIN 6 FOR V_COUNT IN 1..10 LOOP 7 V_NUMBERS(V_COUNT) := V_COUNT*10; 8 END LOOP; 9 FOR V_COUNT IN 1..10 LOOP 10 DBMS_OUTPUT.PUT_LINE('V_NUMBERS('|| V_COUNT ||'):'||V_NUMBERS(V_COUNT)); 11 END LOOP;

12 DBMS_OUTPUT.PUT_LINE('NUMBER OF ELEMENTS IN TABLE: '|| V_NUMBERS.COUNT); 13 DBMS_OUTPUT.PUT_LINE('FIRST ELEMENT IN TABLE : ' ||V_NUMBERS.FIRST); 14 DBMS_OUTPUT.PUT_LINE('THE LAST ELEMENT IN TABLE : '||V_NUMBERS.LAST);

15* END;SQL> /V_NUMBERS(1):10 V_NUMBERS(2):20 V_NUMBERS(3):30 V_NUMBERS(4):40 V_NUMBERS(5):50 V_NUMBERS(6):60 V_NUMBERS(7):70 V_NUMBERS(8):80 V_NUMBERS(9):90 V_NUMBERS(10):100 NUMBER OF ELEMENTS IN TABLE: 10 FIRST ELEMENT IN TABLE : 1 THE LAST ELEMENT IN TABLE : 10

PL/SQL procedure successfully completed.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

279

Page 280: Oracle Queries

ORACLE 1 DECLARE 2 TYPE NUMBERTAB IS TABLE OF NUMBER 3 INDEX BY BINARY_INTEGER; 4 V_NUMBERS NUMBERTAB; 5 BEGIN 6 FOR V_COUNT IN 1..10 LOOP 7 V_NUMBERS(V_COUNT) := V_COUNT*10; 8 END LOOP; 9 FOR V_COUNT IN 1..10 LOOP 10 DBMS_OUTPUT.PUT_LINE('V_NUMBERS('|| V_COUNT ||'):'||V_NUMBERS(V_COUNT)); 11 END LOOP;

12 DBMS_OUTPUT.PUT_LINE('NUMBER OF ELEMENTS IN TABLE: '|| V_NUMBERS.COUNT); 13 DBMS_OUTPUT.PUT_LINE('FIRST ELEMENT IN TABLE : ' ||V_NUMBERS.FIRST); 14 DBMS_OUTPUT.PUT_LINE('THE LAST ELEMENT IN TABLE : '||V_NUMBERS.LAST); 15 DBMS_OUTPUT.PUT_LINE('NUMBER OF ELEMENTS IN TABLE: '|| V_NUMBERS.COUNT); 16 DBMS_OUTPUT.PUT_LINE('VALUE OF THE FIRST ELEMENT IN TABLE : ' ||V_NUMBERS(V_NUMBERS.FIRST)); 17 DBMS_OUTPUT.PUT_LINE('VALUE OF THE LAST ELEMENT THE LAST ELEMENT IN TABLE : '||V_NUMBERS(V_NUMBERS.LAST));

18* END; 19 /V_NUMBERS(1):10 V_NUMBERS(2):20 V_NUMBERS(3):30 V_NUMBERS(4):40 V_NUMBERS(5):50 V_NUMBERS(6):60 V_NUMBERS(7):70 V_NUMBERS(8):80 V_NUMBERS(9):90 V_NUMBERS(10):100 NUMBER OF ELEMENTS IN TABLE: 10 FIRST ELEMENT IN TABLE : 1 THE LAST ELEMENT IN TABLE : 10 NUMBER OF ELEMENTS IN TABLE: 10 VALUE OF THE FIRST ELEMENT IN TABLE : 10 VALUE OF THE LAST ELEMENT THE LAST ELEMENT IN TABLE : 100

PL/SQL procedure successfully completed.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

280

Page 281: Oracle Queries

ORACLE

1 DECLARE

2 TYPE NUMBERTAB IS TABLE OF NUMBER 3 INDEX BY BINARY_INTEGER;

4 V_NUMBERS NUMBERTAB;

5 BEGIN

6 FOR V_COUNT IN 1..10 LOOP 7 V_NUMBERS(V_COUNT) := V_COUNT*10; 8 END LOOP; 9 FOR V_COUNT IN 1..10 LOOP 10 DBMS_OUTPUT.PUT_LINE('V_NUMBERS('|| V_COUNT ||'):'||V_NUMBERS(V_COUNT)); 11 END LOOP;

12 DBMS_OUTPUT.PUT_LINE(V_NUMBERS.PRIOR(3));

13* END; 14 /V_NUMBERS(1):10 V_NUMBERS(2):20 V_NUMBERS(3):30 V_NUMBERS(4):40 V_NUMBERS(5):50 V_NUMBERS(6):60 V_NUMBERS(7):70 V_NUMBERS(8):80 V_NUMBERS(9):90 V_NUMBERS(10):100 2

PL/SQL procedure successfully completed.

1 DECLARE

2 TYPE NUMBERTAB IS TABLE OF NUMBER 3 INDEX BY BINARY_INTEGER;

4 V_NUMBERS NUMBERTAB;

5 BEGIN

6 FOR V_COUNT IN 1..10 LOOP

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

281

Page 282: Oracle Queries

ORACLE 7 V_NUMBERS(V_COUNT) := V_COUNT*10; 8 END LOOP;

9 FOR V_COUNT IN 1..10 LOOP 10 DBMS_OUTPUT.PUT_LINE('V_NUMBERS('|| V_COUNT ||'):'||V_NUMBERS(V_COUNT)); 11 END LOOP;

12 DBMS_OUTPUT.PUT_LINE('THE VALUE OF PRIOR: '|| V_NUMBERS(V_NUMBERS.PRIOR(3))); 13* END;SQL> /V_NUMBERS(1):10 V_NUMBERS(2):20 V_NUMBERS(3):30 V_NUMBERS(4):40 V_NUMBERS(5):50 V_NUMBERS(6):60 V_NUMBERS(7):70 V_NUMBERS(8):80 V_NUMBERS(9):90 V_NUMBERS(10):100 THE VALUE OF PRIOR: 20

PL/SQL procedure successfully completed.

1 DECLARE

2 TYPE NUMBERTAB IS TABLE OF NUMBER 3 INDEX BY BINARY_INTEGER;

4 V_NUMBERS NUMBERTAB;

5 BEGIN

6 FOR V_COUNT IN 1..10 LOOP 7 V_NUMBERS(V_COUNT) := V_COUNT*10; 8 END LOOP;

9 FOR V_COUNT IN 1..10 LOOP 10 DBMS_OUTPUT.PUT_LINE('V_NUMBERS('|| V_COUNT ||'):'||V_NUMBERS(V_COUNT)); 11 END LOOP;

12 DBMS_OUTPUT.PUT_LINE('THE VALUE OF PRIOR: '|| V_NUMBERS(V_NUMBERS.NEXT(3))); 13* END;SQL> /V_NUMBERS(1):10 V_NUMBERS(2):20

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

282

Page 283: Oracle Queries

ORACLEV_NUMBERS(3):30 V_NUMBERS(4):40 V_NUMBERS(5):50 V_NUMBERS(6):60 V_NUMBERS(7):70 V_NUMBERS(8):80 V_NUMBERS(9):90 V_NUMBERS(10):100 THE VALUE OF PRIOR: 40

PL/SQL procedure successfully completed.

1 DECLARE

2 TYPE NUMBERTAB IS TABLE OF NUMBER 3 INDEX BY BINARY_INTEGER;

4 V_NUMBERS NUMBERTAB;

5 BEGIN

6 FOR V_COUNT IN 1..10 LOOP 7 V_NUMBERS(V_COUNT) := V_COUNT*10; 8 END LOOP;

9 V_NUMBERS.DELETE;

10 FOR V_COUNT IN 1..10 LOOP 11 DBMS_OUTPUT.PUT_LINE('V_NUMBERS('|| V_COUNT ||'):'||V_NUMBERS(V_COUNT)); 12 END LOOP; 13* END; 14 /DECLARE*ERROR at line 1:ORA-01403: no data found ORA-06512: at line 11

1 DECLARE

2 TYPE NUMBERTAB IS TABLE OF NUMBER 3 INDEX BY BINARY_INTEGER;

4 V_NUMBERS NUMBERTAB;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

283

Page 284: Oracle Queries

ORACLE 5 BEGIN

6 FOR V_COUNT IN 1..10 LOOP 7 V_NUMBERS(V_COUNT) := V_COUNT*10; 8 END LOOP;

9 V_NUMBERS.DELETE(8);

10 FOR V_COUNT IN 1..10 LOOP 11 DBMS_OUTPUT.PUT_LINE('V_NUMBERS('|| V_COUNT ||'):'||V_NUMBERS(V_COUNT)); 12 END LOOP;

13* END;SQL> /V_NUMBERS(1):10 V_NUMBERS(2):20 V_NUMBERS(3):30 V_NUMBERS(4):40 V_NUMBERS(5):50 V_NUMBERS(6):60 V_NUMBERS(7):70

DECLARE*ERROR at line 1:ORA-01403: no data found ORA-06512: at line 11

1 DECLARE 2 TYPE NUMBERTAB IS TABLE OF NUMBER 3 INDEX BY BINARY_INTEGER; 4 V_NUMBERS NUMBERTAB; 5 BEGIN 6 FOR V_COUNT IN 1..10 LOOP 7 V_NUMBERS(V_COUNT) := V_COUNT*10; 8 END LOOP; 9 V_NUMBERS.DELETE(4,6); 10 FOR V_COUNT IN 1..10 LOOP 11 DBMS_OUTPUT.PUT_LINE('V_NUMBERS('|| V_COUNT ||'):'||V_NUMBERS(V_COUNT)); 12 END LOOP; 13* END;SQL> /V_NUMBERS(1):10 V_NUMBERS(2):20 V_NUMBERS(3):30 DECLARE*ERROR at line 1:ORA-01403: no data found ORA-06512: at line 11

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

284

Page 285: Oracle Queries

ORACLE 1 DECLARE 2 TYPE NUMBERTAB IS TABLE OF NUMBER 3 INDEX BY BINARY_INTEGER;

4 V_NUMBERS NUMBERTAB;

5 BEGIN

6 FOR V_COUNT IN 1..10 LOOP 7 V_NUMBERS(V_COUNT) := V_COUNT*10; 8 END LOOP;

9 V_NUMBERS.DELETE(4,6); 10 FOR V_COUNT IN 1..10 LOOP 11 DBMS_OUTPUT.PUT_LINE('V_NUMBERS('|| V_COUNT ||'):'||V_NUMBERS(V_COUNT)); 12 END LOOP;

13 EXCEPTION 14 WHEN NO_DATA_FOUND THEN

15 FOR V_COUNT IN 7..10 LOOP 16 DBMS_OUTPUT.PUT_LINE('V_NUMBERS('|| V_COUNT ||'):'||V_NUMBERS(V_COUNT)); 17 END LOOP;

18* END;

SQL> /V_NUMBERS(1):10 V_NUMBERS(2):20 V_NUMBERS(3):30 V_NUMBERS(7):70 V_NUMBERS(8):80 V_NUMBERS(9):90 V_NUMBERS(10):100

PL/SQL procedure successfully completed.

1 DECLARE

2 TYPE NUMBERTAB IS TABLE OF NUMBER 3 INDEX BY BINARY_INTEGER;

4 V_NUMBERS NUMBERTAB;

5 V_BOOL BOOLEAN;

6 BEGIN

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

285

Page 286: Oracle Queries

ORACLE 7 FOR V_COUNT IN 1..10 LOOP 8 V_NUMBERS(V_COUNT) := V_COUNT*10; 9 END LOOP;

10 FOR V_COUNT IN 1..10 LOOP 11 DBMS_OUTPUT.PUT_LINE('V_NUMBERS('|| V_COUNT ||'):'||V_NUMBERS(V_COUNT)); 12 END LOOP;

13 V_BOOL := V_NUMBERS.EXISTS(3);

14 IF V_BOOL THEN 15 DBMS_OUTPUT.PUT_LINE('THE ELEMENT EXISITS'); 16 ELSE 17 DBMS_OUTPUT.PUT_LINE('THE ELEMENT NOT EXISITS'); 18 END IF; 19* END;SQL> /V_NUMBERS(1):10 V_NUMBERS(2):20 V_NUMBERS(3):30 V_NUMBERS(4):40 V_NUMBERS(5):50 V_NUMBERS(6):60 V_NUMBERS(7):70 V_NUMBERS(8):80 V_NUMBERS(9):90 V_NUMBERS(10):100 THE ELEMENT EXISITS

PL/SQL procedure successfully completed.

1 DECLARE

2 TYPE NUMBERTAB IS TABLE OF NUMBER 3 INDEX BY BINARY_INTEGER;

4 V_NUMBERS NUMBERTAB;

5 V_BOOL BOOLEAN;

6 BEGIN

7 FOR V_COUNT IN 1..10 LOOP 8 V_NUMBERS(V_COUNT) := V_COUNT*10; 9 END LOOP;

10 FOR V_COUNT IN 1..10 LOOP 11 DBMS_OUTPUT.PUT_LINE('V_NUMBERS('|| V_COUNT ||'):'||V_NUMBERS(V_COUNT));

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

286

Page 287: Oracle Queries

ORACLE 12 END LOOP;

13 V_BOOL := V_NUMBERS.EXISTS(&NUMBER);

14 IF V_BOOL THEN 15 DBMS_OUTPUT.PUT_LINE('THE ELEMENT EXISITS'); 16 ELSE 17 DBMS_OUTPUT.PUT_LINE('THE ELEMENT NOT EXISITS'); 18 END IF; 19* END;SQL> /Enter value for number: 1V_NUMBERS(1):10 V_NUMBERS(2):20 V_NUMBERS(3):30 V_NUMBERS(4):40 V_NUMBERS(5):50 V_NUMBERS(6):60 V_NUMBERS(7):70 V_NUMBERS(8):80 V_NUMBERS(9):90 V_NUMBERS(10):100 THE ELEMENT EXISITS

PL/SQL procedure successfully completed.

SQL> /Enter value for number: 11V_NUMBERS(1):10 V_NUMBERS(2):20 V_NUMBERS(3):30 V_NUMBERS(4):40 V_NUMBERS(5):50 V_NUMBERS(6):60 V_NUMBERS(7):70 V_NUMBERS(8):80 V_NUMBERS(9):90 V_NUMBERS(10):100 THE ELEMENT NOT EXISITS

PL/SQL procedure successfully completed.

1 DECLARE

2 TYPE CHARTAB IS TABLE OF VARCHAR2(10) 3 INDEX BY BINARY_INTEGER;

4 V_CHAR CHARTAB;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

287

Page 288: Oracle Queries

ORACLE 5 BEGIN

6 V_CHAR(1):='PAVAN';

7 V_CHAR(-2):='KUMAR';

8 V_CHAR(0) := 'GAYATRI';

9 DBMS_OUTPUT.PUT_LINE(V_CHAR(1));

10 DBMS_OUTPUT.PUT_LINE(V_CHAR(-2));

11 DBMS_OUTPUT.PUT_LINE(V_CHAR(0));

12* END;

13 /PAVAN KUMAR GAYATRI

PL/SQL procedure successfully completed.

1 DECLARE 2 TYPE DATETAB IS TABLE OF DATE 3 INDEX BY BINARY_INTEGER; 4 V_DATE DATETAB; 5 BEGIN 6 V_DATE(1):='01-DEC-05'; 7 V_DATE(-2):='11-MAR-02'; 8 V_DATE(0) :='01-DEC-09'; 9 DBMS_OUTPUT.PUT_LINE(V_DATE(1)); 10 DBMS_OUTPUT.PUT_LINE(V_DATE(-2)); 11 DBMS_OUTPUT.PUT_LINE(V_DATE(0)); 12* END;SQL> /01-DEC-05 11-MAR-02 01-DEC-09

PL/SQL procedure successfully completed.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

288

Page 289: Oracle Queries

ORACLEPL/SQL TABLES WITH %ROWTYPE:

1 DECLARE

2 CURSOR C IS SELECT * FROM DEPT;

3 TYPE DEPT_TABLE_TYPE IS TABLE OF DEPT%ROWTYPE 4 INDEX BY BINARY_INTEGER;

5 DEPT_TABLE DEPT_TABLE_TYPE;

6 V_COUN NUMBER(10):=0;

7 BEGIN 8 OPEN C; 9 LOOP 10 V_COUN := V_COUN+1; 11 FETCH C INTO DEPT_TABLE(V_COUN); 12 EXIT WHEN C%NOTFOUND; 13 END LOOP; 14 CLOSE C; 15* END;SQL> /

PL/SQL procedure successfully completed.

1 DECLARE

2 CURSOR C IS SELECT * FROM DEPT;

3 TYPE DEPT_TABLE_TYPE IS TABLE OF DEPT%ROWTYPE 4 INDEX BY BINARY_INTEGER;

5 DEPT_TABLE DEPT_TABLE_TYPE;

6 V_DEPTREC DEPT%ROWTYPE;

7 V_COUN NUMBER(10):=0;

8 BEGIN

9 OPEN C;

10 LOOP 11 V_COUN := V_COUN+1; 12 FETCH C INTO DEPT_TABLE(V_COUN); 13 EXIT WHEN C%NOTFOUND; 14 END LOOP;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

289

Page 290: Oracle Queries

ORACLE15 CLOSE C;

16 V_DEPTREC :=DEPT_TABLE(1); 17 DBMS_OUTPUT.PUT_LINE(V_DEPTREC.DEPTNO||V_DEPTREC.DNAME|| 18 V_DEPTREC.LOC); 19* END; 20 /10ACCOUNTINGNEW YORK

PL/SQL procedure successfully completed.

1 DECLARE 2 CURSOR C IS SELECT * FROM DEPT;

3 TYPE DEPT_TABLE_TYPE IS TABLE OF DEPT%ROWTYPE 4 INDEX BY BINARY_INTEGER;

5 DEPT_TABLE DEPT_TABLE_TYPE;

6 V_DEPTREC DEPT%ROWTYPE;

7 V_COUN NUMBER(10):=0; 8 BEGIN 9 OPEN C; 10 LOOP 11 V_COUN := V_COUN+1; 12 FETCH C INTO DEPT_TABLE(V_COUN); 13 EXIT WHEN C%NOTFOUND; 14 END LOOP; 15 CLOSE C;

16 V_DEPTREC :=DEPT_TABLE(1); 17 DBMS_OUTPUT.PUT_LINE(V_DEPTREC.DEPTNO||V_DEPTREC.DNAME|| 18 V_DEPTREC.LOC);

19 V_DEPTREC :=DEPT_TABLE(2); 20 DBMS_OUTPUT.PUT_LINE(V_DEPTREC.DEPTNO||V_DEPTREC.DNAME|| 21 V_DEPTREC.LOC);

22 V_DEPTREC :=DEPT_TABLE(3); 23 DBMS_OUTPUT.PUT_LINE(V_DEPTREC.DEPTNO||V_DEPTREC.DNAME|| 24 V_DEPTREC.LOC);

25 V_DEPTREC :=DEPT_TABLE(4); 26 DBMS_OUTPUT.PUT_LINE(V_DEPTREC.DEPTNO||V_DEPTREC.DNAME|| 27 V_DEPTREC.LOC); 28* END; 29 /

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

290

Page 291: Oracle Queries

ORACLE10ACCOUNTINGNEW YORK 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTON

PL/SQL procedure successfully completed.

STORED PROCEDURES:

SQL> CREATE TABLE EMP_DUP 2 AS 3 SELECT * FROM EMP;

Table created.

SQL> SELECT * FROM EMP_DUP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

14 rows selected.PROCEDURE WITH IN PARAMETER:

1 CREATE OR REPLACE PROCEDURE BALAJI 2 (V_EMPNO IN EMP_DUP.EMPNO%TYPE)

3 IS

4 BEGIN

5 UPDATE EMP_DUP

6 SET SAL = SAL + 1000

7 WHERE EMPNO = V_EMPNO;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

291

Page 292: Oracle Queries

ORACLE 8* END;

SQL> /

Procedure created.

SQL> EXECUTE BALAJI(7369);

PL/SQL procedure successfully completed.

SQL> SELECT * FROM EMP_DUP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 1800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

14 rows selected.

PROCEDURE WITH OUT PARAMETER:

1 CREATE OR REPLACE PROCEDURE BALAJI1

2 (V_EMPNO IN EMP.EMPNO%TYPE,

3 V_ENAME OUT EMP.ENAME%TYPE,

4 V_SAL OUT EMP.SAL%TYPE,

5 V_DEPTNO OUT EMP.DEPTNO%TYPE)

6

7 IS

8 BEGIN

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

292

Page 293: Oracle Queries

ORACLE 9 SELECT ENAME,SAL,DEPTNO INTO V_ENAME,V_SAL,V_DEPTNO

10 FROM EMP WHERE EMPNO=V_EMPNO;

11* END;SQL> /

Procedure created.

1 DECLARE 2 P_ENAME EMP.ENAME%TYPE;

3 P_SAL EMP.SAL%TYPE;

4 P_DEPTNO EMP.DEPTNO%TYPE;

5 P_EMPNO EMP.EMPNO%TYPE:=7369;

6 BEGIN

7 BALAJI1(P_EMPNO,P_ENAME,P_SAL,P_DEPTNO);

8 DBMS_OUTPUT.PUT_LINE(P_ENAME||P_SAL||P_DEPTNO);

9* END;SQL> /

PL/SQL procedure successfully completed.

SQL> SET SERVEROUTPUT ONSQL> /

SMITH80020

PL/SQL procedure successfully completed.

SQL> VARIABLE G_ENAME VARCHAR2(10)

SQL> VARIABLE G_SAL NUMBER

SQL> VARIABLE G_DEPTNO NUMBER

SQL> EXECUTE BALAJI1(7369,:G_ENAME,:G_SAL,:G_DEPTNO);

PL/SQL procedure successfully completed.

SQL> PRINT G_ENAME

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

293

Page 294: Oracle Queries

ORACLEG_ENAME -------------------------------- SMITH

SQL> PRINT G_SAL

G_SAL ---------- 800

SQL> PRINT G_DEPTNO

G_DEPTNO ---------- 20

PROCEDURE WITH IN OUT PARAMETER:

1 CREATE OR REPLACE PROCEDURE BALAJI2

2 (V_EMPNO_SAL IN OUT NUMBER)

3 IS

4 BEGIN

5 SELECT SAL INTO V_EMPNO_SAL

6 FROM EMP WHERE EMPNO=V_EMPNO_SAL;

7* END;

8 /

Procedure created.

1 DECLARE

2 P_EMPNO_SAL NUMBER:=7369;

3 BEGIN

4 BALAJI2(P_EMPNO_SAL);

5 DBMS_OUTPUT.PUT_LINE(P_EMPNO_SAL);

6* END;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

294

Page 295: Oracle Queries

ORACLE 7 /

800

PL/SQL procedure successfully completed.

SQL> VARIABLE G_EMPNO_SAL NUMBER

1 BEGIN 2 :G_EMPNO_SAL:=7369; 3* END;SQL> /

PL/SQL procedure successfully completed.

SQL> EXECUTE BALAJI2(:G_EMPNO_SAL);

PL/SQL procedure successfully completed.

SQL> PRINT G_EMPNO_SAL

G_EMPNO_SAL ----------- 800

USING DEFAULT IN PROCEDURES:

SQL> CREATE TABLE DEPT1 2 AS 3 SELECT * FROM DEPT;

Table created.

SQL> DELETE FROM DEPT1;

4 rows deleted.

SQL> COMMIT;

Commit complete.

SQL> CREATE SEQUENCE ADD_DEPT_SEQ 2 INCREMENT BY 1 3 START WITH 100 4 MAXVALUE 120 5 NOCACHE;

Sequence created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

295

Page 296: Oracle Queries

ORACLE 1 CREATE OR REPLACE PROCEDURE ADD_DEPT

2 (V_DNAME IN DEPT1.DNAME%TYPE DEFAULT 'PAVAN',

3 V_LOC IN DEPT1.LOC%TYPE DEFAULT 'GAYATRI')

4 IS

5 BEGIN

6 INSERT INTO DEPT1

7 VALUES

8 (ADD_DEPT_SEQ.NEXTVAL,V_DNAME,V_LOC);

9* END;

SQL> /

Procedure created.

1 BEGIN

2 ADD_DEPT;

3 ADD_DEPT('SALES','NEWYORK');

4 ADD_DEPT(V_LOC => 'DALLAS',V_DNAME => 'EDUCATION');

5 ADD_DEPT(V_LOC => 'BOSTON');

6* END;

SQL> /

PL/SQL procedure successfully completed.

SQL> SELECT * FROM DEPT1;

DEPTNO DNAME LOC ---------- -------------- ------------- 100 PAVAN GAYATRI 101 SALES NEWYORK 102 EDUCATION DALLAS 103 PAVAN BOSTON

SQL> CREATE TABLE LOG_TABLE

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

296

Page 297: Oracle Queries

ORACLE 2 (USERID VARCHAR2(10), 3 LOG_DATE DATE);

Table created.

DECLARING SUBPROGRAMS:

SQL> CREATE OR REPLACE PROCEDURE LEAVE_EMP2

2 (V_EMPNO IN EMP.EMPNO%TYPE)

3 IS

4 PROCEDURE LOG_EXEC

5 IS

6 BEGIN

7 INSERT INTO LOG_TABLE(USERID,LOG_DATE)

8 VALUES (USER,SYSDATE);

9 END LOG_EXEC;

10 BEGIN

11 DELETE FROM EMP_DUP

12 WHERE EMPNO=V_EMPNO;

13 LOG_EXEC;

14 END;

15 /

Procedure created.

SQL> SELECT * FROM LOG_TABLE;

no rows selectedSQL> SELECT * FROM EMP_DUP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

297

Page 298: Oracle Queries

ORACLE 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

14 rows selected.

SQL> BEGIN

2 LEAVE_EMP2(7369);

3 END;

4 /

PL/SQL procedure successfully completed.

SQL> SELECT * FROM LOG_TABLE;

USERID LOG_DATE ---------- --------- SCOTT 09-JUN-05

SQL> SELECT * FROM EMP_DUP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

298

Page 299: Oracle Queries

ORACLE 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

13 rows selected.

SQL> CREATE OR REPLACE PROCEDURE RAISE_SALARY

2 (V_EMPNO IN EMP.EMPNO%TYPE)

3 IS

4 BEGIN

5 UPDATE EMP_DUP

6 SET SAL = SAL* 1.10

7 WHERE EMPNO=V_EMPNO;

8 END;

9 /

Procedure created.

SQL> SELECT * FROM EMP_DUP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

299

Page 300: Oracle Queries

ORACLE 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

14 rows selected.

INVOKING A PROCEDURE FROM A STORED PROCEDURE:

1 CREATE OR REPLACE PROCEDURE GAYATRI

2 IS

3 CURSOR C IS SELECT EMPNO FROM EMP_DUP;

4 BEGIN

5 FOR E IN C

6 LOOP

7 RAISE_SALARY(E.EMPNO);

8 END LOOP;

9 COMMIT;

10* END;

SQL> /

Procedure created.

SQL> EXECUTE GAYATRI;

PL/SQL procedure successfully completed.

SQL> SELECT * FROM EMP_DUP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 880 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1760 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1375 500 30

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

300

Page 301: Oracle Queries

ORACLE 7566 JONES MANAGER 7839 02-APR-81 3272.5 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1375 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 3135 30 7782 CLARK MANAGER 7839 09-JUN-81 2695 10 7788 SCOTT ANALYST 7566 19-APR-87 3300 20 7839 KING PRESIDENT 17-NOV-81 5500 10 7844 TURNER SALESMAN 7698 08-SEP-81 1650 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1210 20 7900 JAMES CLERK 7698 03-DEC-81 1045 30 7902 FORD ANALYST 7566 03-DEC-81 3300 20 7934 MILLER CLERK 7782 23-JAN-82 1430 10

14 rows selected.

DROPING A STORED PROCEDURE:

SQL> DROP PROCEDURE GAYATRI;

Procedure dropped.

QUERING STORED PROCEDURES STORED IN DATABASE:

SQL> SELECT OBJECT_NAME,OBJECT_TYPE 2 FROM USER_OBJECTS 3 WHERE OBJECT_TYPE = 'PROCEDURE';

OBJECT_NAME -------------------------------------------------------------------------------------------------------------------------------- OBJECT_TYPE ------------------ ADD_DEPT PROCEDURE BALAJI PROCEDURE BALAJI1 PROCEDURE BALAJI2 PROCEDURE LEAVE_EMP2 PROCEDURE RAISE_SALARY PROCEDURE

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

301

Page 302: Oracle Queries

ORACLE6 rows selected.

QUERING STORED PROCEDURES TEXT STORED IN DATABASE:

SQL> DESC USER_SOURCE Name Null? Type ----------------------------------------------------------------------- -------- ------------------------------------------------ NAME VARCHAR2(30) TYPE VARCHAR2(12) LINE NUMBER TEXT VARCHAR2(4000)

SQL> SELECT TEXT FROM USER_SOURCE 2 WHERE NAME='BALAJI' 3 ORDER BY LINE;

TEXT ----------------------------------------------------------------------------------------------------------------------------------PROCEDURE BALAJI (V_EMPNO IN EMP.EMPNO%TYPE) IS BEGIN UPDATE EMP_DUP SET SAL = SAL + 1000 WHERE EMPNO = V_EMPNO; END;

8 rows selected.

1 SELECT TEXT FROM USER_SOURCE 2 WHERE NAME='BALAJI1' 3* ORDER BY LINESQL> /

TEXT ----------------------------------------------------------------------------------------------------------------------------------PROCEDURE BALAJI1 (V_EMPNO IN EMP.EMPNO%TYPE, V_ENAME OUT EMP.ENAME%TYPE, V_SAL OUT EMP.SAL%TYPE, V_DEPTNO OUT EMP.DEPTNO%TYPE ) IS BEGIN

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

302

Page 303: Oracle Queries

ORACLESELECT ENAME,SAL,DEPTNO INTO V_ENAME,V_SAL,V_DEPTNO FROM EMP WHERE EMPNO=V_EMPNO; END;

11 rows selected.

1 SELECT TEXT FROM USER_SOURCE 2 WHERE NAME='BALAJI2' 3* ORDER BY LINESQL> /

TEXT ----------------------------------------------------------------------------------------------------------------------------------PROCEDURE BALAJI2 (V_EMPNO_SAL IN OUT NUMBER) IS BEGIN SELECT SAL INTO V_EMPNO_SAL FROM EMP WHERE EMPNO=V_EMPNO_SAL; END;

7 rows selected.

SQL> CREATE OR REPLACE PROCEDURE LOG_EXECUTION

2 IS

3 BEGIN

4 INPUT INTO LOG_TABLE

5 VALUES

6 (USER,SYSDATE);

7 END;

8 /

Warning: Procedure created with compilation errors.QUERING ERRORS IN STORED PROCEDURES STORED IN DATABASE:

SQL> DESC USER_ERRORS Name Null? Type ----------------------------------------------------------------------- -------- ------------------------------------------------ NAME NOT NULL VARCHAR2(30) TYPE VARCHAR2(12)

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

303

Page 304: Oracle Queries

ORACLE SEQUENCE NOT NULL NUMBER LINE NOT NULL NUMBER POSITION NOT NULL NUMBER TEXT NOT NULL VARCHAR2(4000)

SQL> SELECT LINE||'/'|| POSITION POS,TEXT FROM 2 USER_ERRORS 3 WHERE NAME='LOG_EXECUTION' 4 ORDER BY LINE;

POS --------------------------------------------------------------------------------- TEXT ----------------------------------------------------------------------------------------------------------------------------------4/7 PLS-00103: Encountered the symbol "INTO" when expecting one of the following: := . ( @ % ; 7/1 PLS-00103: Encountered the symbol "END"

SQL> SHOW ERRORS PROCEDURE LOG_EXECUTIONErrors for PROCEDURE LOG_EXECUTION:

LINE/COL ERROR -------- ----------------------------------------------------------------- 4/7 PLS-00103: Encountered the symbol "INTO" when expecting one of the following: := . ( @ % ; 7/1 PLS-00103: Encountered the symbol "END"

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

304

Page 305: Oracle Queries

ORACLE

STORED FUNCTIONS:

SQL> CREATE OR REPLACE FUNCTION GET_SAL 2 (V_EMPNO IN EMP.EMPNO%TYPE) 3 RETURN NUMBER 4 IS 5 V_SAL EMP.SAL%TYPE; 6 BEGIN 7 SELECT SAL INTO V_SAL FROM EMP 8 WHERE EMPNO=V_EMPNO; 9 RETURN V_SAL; 10 END; 11 /

Function created.

CALLING FUNTION:

SQL> VARIABLE G_SALARY NUMBERSQL> EXECUTE :G_SALARY :=GET_SAL(7369)

PL/SQL procedure successfully completed.

SQL> PRINT G_SALARY

G_SALARY ---------- 800

1 DECLARE 2 V_SALARY NUMBER(10); 3 BEGIN 4 V_SALARY:=GET_SAL(7369); 5 DBMS_OUTPUT.PUT_LINE(V_SALARY); 6* END;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

305

Page 306: Oracle Queries

ORACLESQL> /800

PL/SQL procedure successfully completed.

CALLING FUNCTION IN VARIOUS PLACES:

SQL> CREATE OR REPLACE FUNCTION TAX 2 (V_VALUE IN NUMBER) 3 RETURN NUMBER 4 IS 5 BEGIN 6 RETURN (V_VALUE*0.08); 7 END; 8 /

Function created.

SQL> SELECT EMPNO,ENAME,SAL,TAX(SAL) FROM EMP;

EMPNO ENAME SAL TAX(SAL) ---------- ---------- ---------- ---------- 7369 SMITH 800 64 7499 ALLEN 1600 128 7521 WARD 1250 100 7566 JONES 2975 238 7654 MARTIN 1250 100 7698 BLAKE 2850 228 7782 CLARK 2450 196 7788 SCOTT 3000 240 7839 KING 5000 400 7844 TURNER 1500 120 7876 ADAMS 1100 88 7900 JAMES 950 76 7902 FORD 3000 240 7934 MILLER 1300 104

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

306

Page 307: Oracle Queries

ORACLE14 rows selected.

1 SELECT EMPNO FROM EMP 2 WHERE TAX(SAL) > (SELECT MAX(TAX(SAL)) FROM EMP 3* WHERE DEPTNO=30) ORDER BY TAX(SAL) DESC 4 /

EMPNO ---------- 7839 7788 7902 7566

1 SELECT * FROM EMP 2 WHERE TAX(SAL) > (SELECT MAX(TAX(SAL)) FROM EMP 3* WHERE DEPTNO=30) ORDER BY TAX(SAL) DESCSQL> /

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7839 KING PRESIDENT 17-NOV-81 5000 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7566 JONES MANAGER 7839 02-APR-81 2975 20

SQL> SELECT SAL,TAX(SAL) FROM EMP 2 WHERE TAX(SAL) > (SELECT MAX(TAX(SAL)) FROM EMP 3 WHERE DEPTNO=30) ORDER BY TAX(SAL) DESC;

SAL TAX(SAL) ---------- ---------- 5000 400 3000 240 3000 240 2975 238

DROPING A FUNCTION:

SQL> DROP FUNCTION TAX;

Function dropped.

SELECTING FUNCTION FROM DATABASE:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

307

Page 308: Oracle Queries

ORACLESQL> SELECT OBJECT_NAME,OBJECT_TYPE 2 FROM USER_OBJECTS 3 WHERE OBJECT_TYPE='FUNCTION';

OBJECT_NAME -------------------------------------------------------------------------------------------------------------------------------- OBJECT_TYPE ------------------ GET_SAL FUNCTION SOURCE CODE OF FUNCTION:

1 SELECT TEXT FROM USER_SOURCE 2* WHERE NAME='GET_SAL' 3 /

TEXT ----------------------------------------------------------------------------------------------------------------------------------FUNCTION GET_SAL (V_EMPNO IN EMP.EMPNO%TYPE) RETURN NUMBER IS V_SAL EMP.SAL%TYPE; BEGIN SELECT SAL INTO V_SAL FROM EMP WHERE EMPNO=V_EMPNO; RETURN V_SAL; END;

10 rows selected.

DESCRIBING FUNCTION IN SQL*PLUS:

SQL> DESC GET_SALFUNCTION GET_SAL RETURNS NUMBER Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- V_EMPNO NUMBER(4) IN

DESCRIBING PROCEDURE IN SQL*PLUS:

SQL> DESC PROCEDURE_NAME;

YOU WILL GET ALL PARAMETER INFORMATION OF THE PROCEDURE.LIKE ABOVE OUTPUT FOR FUNCTION.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

308

Page 309: Oracle Queries

ORACLE

LOCATIONS TO CALL USER-DEFINED FUNCTIONS:

SELECT LIST OF A SELECT COMMAND.

CONDITION OF WHERE AND HAVING CLAUSES.

CONNECT BY ,START WITH ,ORDER BY AND GROUP BY CLAUSES.

VALUES CLAUSES OF INSERT COMMAND.

SET CLAUSE OF THE UPDATE COMMAND.

COMPARING PROCEDURES AND FUNCTIONS:

PROCEDURE FUNCTION

EXECUTE AS A PL/SQL STATEMENT. INVOKE AS PART OF A N EXPRESSION.

NO RETURN DATA TYPE. MUST CONTAIN A RETURN DATA TYPE.

CAN RETURN NONE,ONE OR MANY VALUES

MUST RETURN A SINGLE VALUE.

BENEFITS OF STORED PROCEDURES AND STORED FUNCTIONS:

IMPROVED PERFORMANCE.

IMPROVED MAINTENANCE.

IMPROVED DATA SECURITY AND INTEGRITY.

TRIGGERS:

A TRIGGER IS A PL/SQL BLOCK THAT EXECUTES IMPLICITLY WHENEVER A PARTICULAR EVENT TAKES PLACE.

CREATING TRIGGERS:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

309

Page 310: Oracle Queries

ORACLETRIGGER TIMING:

-FOR TABLE : BEFORE,AFTER

-FOR VIEW : INSTEAD OF.

TRIGGERING EVENT: INSERT,UPDATE OR DELETE.

TABLE NAME: ON TABLE OR VIEW.

TRIGGER TYPE : ROW OR STATEMENT.

WHEN CLAUSE : RESTRICTING CONDITION

TRIGGER BODY : PL/SQL BLOCK.

TRIGGER COMPONENTS:

TRIGGER TIMING: WHEN SHOULD THE TRIGGER FIRE?

BEFORE: EXECUTE THE TRIGGER BODY BEFORE THE TRIGGERING DML EVENT ON A TABLE.

AFTER: EXECUTE THE TRIGGER BODY AFTER THE TRIGGERING DML EVENT ON A TABLE.

INSTEAD OF:EXECUTE THE TRIGGER BODY INSTEAD OF THE TRIGGERING STATEMENT. USED FOR VIEWS THAT ARE NOT OTHERWISE MODIFIABLE.

WHAT DML STATEMENT WIL CAUSE THE TRIGGER TO EXECUTE?

INSERT.

UPDATE.

DELETE.

TRIGGER TYPE:

STATEMENT: THE TRIGGER BODY EXECUTES ONCE FOR THE TRIGGERING EVENT. THIS IS THE DEFAULT.

ROW:THE TRIGGER BODY EXECUTES ONCE FOR EACH ROW AFFECTED BY THE TRIGGERING EVENT.

WHAT ACTION SHOULD THE TRIGGER PERFORM?

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

310

Page 311: Oracle Queries

ORACLETHE TRIGGER BODY IS A PL/SQL BLOCK OR A CALL TO A PROCEDURE.

FIRING SEQUENCE:

FIRING SEQUENCE OF A TRIGGER ON A TABLE, WHEN A SINGLE ROW IS MANIPULATED.

DML STATEMENT:

INSERT INTO DEPTVALUES(50,’COMPUTERS’,’NEW YORK’);

TRIGGERING ACTION:

BEFORE STATEMENT TRIGGER.

DEPTNO DNAME LOC10 ACCOUNTING NEW YORK20 RESEARCH DALLAS30 SALES CHICAGO40 OPERATIONS BOSTON50 COMPUTERS NEW YORK BEFORE ROW TRIGGER.

AFTER ROW TRIGGER.

AFTER STATEMENT TRIGGER.

FIRING SEQUENCE OF A TRIGGER ON A TABLE, WHEN MANY ROWS ARE MANUPULATED.

UPDATE EMPSET SAL = SAL*1.1WHERE DEPTNO=30;

BEFORE STATEMENT TRIGGEREMPNO ENAME DEPTNO7839 KING 30

BEFORE ROW TRIGGER

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

311

Page 312: Oracle Queries

ORACLEAFTER ROW TRIGGER.

7698 BLAKE 30BEFORE ROW TRIGGERAFTER ROW TRIGGER.

7788 SMITH 30BEFORE ROW TRIGGER

AFTER ROW TRIGGER.

AFTER STATEMENT TRIGGER.

WHEN THE TRIGGERING DATA MANIPULATION STATEMENT AFFECTS MANY ROWS, THE STATEMENT TRIGGER FIRES EXACTLY ONCE, AND THE ROW TRIGGER FIRES ONCE FOR EVERY ROW AFFECTED BY STATEMENT.

THE SQL STATEMENT IN THE SLIDE ABOVE CAUSES A ROW-LEVEL TRIGGER TO FIRE A NUMBER OF TIMES EQUAL TO THE NUMBER OF ROWS THAT SATISFY THE WHERE CLAUSE, THAT IS, THE NUMBER OF EMPLOYEES REPORTING TO DEPARTMENT 30.

CREATING STATEMENT TRIGGERS:

SQL> CREATE OR REPLACE TRIGGER SECURE_EMP 2 BEFORE INSERT ON EMP

3 BEGIN

4 IF (TO_CHAR(SYSDATE,'DY') IN ('SAT','SUN')) OR

5 (TO_CHAR(SYSDATE,'HH24') NOT BETWEEN '08' AND '18')

6 THEN RAISE_APPLICATION_ERROR (-20500, 'YOU MAY ONLY INSERT INTO EMP

7 DURING BUSINESS HOURS');

8 END IF;

9 END;

10 /

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

312

Page 313: Oracle Queries

ORACLETrigger created.

INSERT IN TO EMP DURING NON OFFICE HOURS.

SQL> INSERT INTO EMP 2 (EMPNO,ENAME,DEPTNO) 3 VALUES 4 (1,'PAVAN',40);INSERT INTO EMP *ERROR at line 1:ORA-20500: YOU MAY ONLY INSERT INTO EMP DURING BUSINESS HOURS ORA-06512: at "SCOTT.SECURE_EMP", line 4 ORA-04088: error during execution of trigger 'SCOTT.SECURE_EMP'

INSERT IN TO EMP DURING OFFICE HOURS.

SQL> INSERT INTO EMP 2 (EMPNO,ENAME,DEPTNO) 3 VALUES 4 (1,'PAVAN',40);

1 row created.

USING CONDITIONAL PREDICATES:

1 CREATE OR REPLACE TRIGGER SECURE_EMP1

2 BEFORE INSERT OR UPDATE OR DELETE ON EMP

3 BEGIN

4 IF (TO_CHAR(SYSDATE,'DY') IN ('SAT','SUN')) OR 5 (TO_CHAR(SYSDATE,'HH24') NOT BETWEEN '08' AND '18')

6 THEN

7 IF DELETING

8 THEN RAISE_APPLICATION_ERROR (-20502, 'YOU MAY ONLY DELETE FROM EMP DURING BUSINESS HOURS');

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

313

Page 314: Oracle Queries

ORACLE 9 ELSIF INSERTING

10 THEN RAISE_APPLICATION_ERROR (-20500, 'YOU MAY ONLY INSERT INTO EMP DURING BUSINESS HOURS');

11 ELSIF UPDATING ('SAL')

12 THEN RAISE_APPLICATION_ERROR (-20503, 'YOU MAY ONLY UPDATE SAL IN EMP DURING BUSINESS HOURS');

13 ELSE

14 RAISE_APPLICATION_ERROR (-20504, 'YOU MAY ONLY UPDATE EMP DURING BUSINESS HOURS');

15 END IF;

16 END IF;

17* END;

18 /

Trigger created.

CREATING ROW LEVEL TRIGGERS:

USING OLD AND NEW QUALIFIERS:

1 CREATE TABLE DEPT1 2 AS 3* SELECT * FROM DEPT 4 /

Table created.

1 CREATE TABLE AUDIT_DEPT_TABLE

2 (USERNAME VARCHAR2(10),

3 TODAYDATE TIMESTAMP,

4 NEW_DEPTNO NUMBER(10),

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

314

Page 315: Oracle Queries

ORACLE 5 OLD_DEPTNO NUMBER(10),

6 NEW_DNAME VARCHAR2(10),

7 OLD_DNAME VARCHAR2(10),

8 NEW_LOC VARCHAR2(10),

9* OLD_LOC VARCHAR2(10))

SQL> /

Table created.

1 CREATE OR REPLACE TRIGGER AUDIT_DEPT_VALUES

2 AFTER DELETE OR INSERT OR UPDATE ON DEPT1

3 FOR EACH ROW

4 BEGIN

5 INSERT INTO AUDIT_DEPT_TABLE

6 VALUES

7 (USER,SYSTIMESTAMP,:NEW.DEPTNO,:OLD.DEPTNO,:NEW.DNAME,:OLD.DNAME, 8 :NEW.LOC,:OLD.LOC);

9* END;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

315

Page 316: Oracle Queries

ORACLESQL> /

Trigger created.

DATA OPERATION. OLD VALUE. NEW VALUE.INSERT. NULL. INSERTED VALUE.UPDATE. VALUE BEFORE

UPDATE.VALUE AFTER UPDATE.

DELETE. VALUE BEFORE DELETE.

NULL.

THE OLD AND NEW QUALIFIERS ARE ONLY AVAILABLEIN ROW TRIGGERS.

PREFIX THESE QUALIFIERS WITH A COLON(:) IN EVERY SQL AND PL/SQL STATEMENT.

DELETING:

SQL> DELETE FROM DEPT1 2 WHERE DEPTNO=10;

1 row deleted.

SQL> SELECT * FROM AUDIT_DEPT_TABLE;

USERNAME TIMESTAMP NEW_DEPTNO OLD_DEPTNO NEW_DNAME OLD_DNAME NEW_LOC OLD_LOC ---------- --------- ---------- ---------- ---------- ---------- ---------- ---------- SCOTT 09-JUN-05 10 ACCOUNTING NEW YORK

INSERTING:

SQL> INSERT INTO DEPT1 2 VALUES 3 (50,'COMPUTERS','NEW YORK');

1 row created.

SQL> SELECT * FROM AUDIT_DEPT_TABLE;

USERNAME TIMESTAMP NEW_DEPTNO OLD_DEPTNO NEW_DNAME OLD_DNAME NEW_LOC OLD_LOC ---------- --------- ---------- ---------- ---------- ---------- ---------- ---------- SCOTT 09-JUN-05 10 ACCOUNTING

NEW YORK

SCOTT 09-JUN-05 50 COMPUTERS NEW YORK

UPDATING WITH WHERE CLAUSE:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

316

Page 317: Oracle Queries

ORACLESQL> UPDATE DEPT1 2 SET DNAME='PAVAN' 3 WHERE DEPTNO=50;

1 row updated.

SQL> SELECT * FROM AUDIT_DEPT_TABLE;

USERNAME TIMESTAMP NEW_DEPTNO OLD_DEPTNO NEW_DNAME OLD_DNAME NEW_LOC OLD_LOC ---------- --------- ---------- ---------- ---------- ---------- ---------- ---------- SCOTT 09-JUN-05 10 ACCOUNTING NEW YORK

SCOTT 09-JUN-05 50 COMPUTERS NEW YORK

SCOTT 09-JUN-05 50 50 PAVAN COMPUTERS NEW YORK NEW YORK

UPDATING WITHOUT WHERE CLAUSE:

SQL> UPDATE DEPT1 2 SET DEPTNO=1;

4 rows updated.

SQL> SELECT * FROM AUDIT_DEPT_TABLE;

USERNAME TIMESTAMP NEW_DT OLD_DT NEW_DNAME OLD_DNAME NEW_LOC OLD_LOC ---------- --------- ---------- ---------- ---------- ---------- ---------- ---------- SCOTT 09-JUN-05 10 ACCOUNTING NEW YORK

SCOTT 09-JUN-05 50 COMPUTERS NEW YORK

SCOTT 09-JUN-05 50 50 PAVAN COMPUTERS NEW YORK NEW YORK

SCOTT 09-JUN-05 1 20 RESEARCH RESEARCH DALLAS DALLAS

SCOTT 09-JUN-05 1 30 SALES SALES CHICAGO CHICAGO

SCOTT 09-JUN-05 1 40 OPERATIONS OPERATIONS BOSTON BOSTON

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

317

Page 318: Oracle Queries

ORACLESCOTT 09-JUN-05 1 50 PAVAN PAVAN NEW YORK NEW YORK

7 rows selected.

PROCEDURE VS TRIGGERS:

TRIGGER PROCEDURE

DEFINED WITH CREATE TRIGGER. DEFINED WITH CREATE PROCEDURE.

DATA DICTIONARY CONTAINSSOURCE CODE.

DATA DICTIONARY CONTAINSSOURCE CODE.

IMPLICITLY INVOKED. EXPLICTLY INVOKED.

COMMIT,SAVEPOINT,ROLL BACK ARE NOT ALLOWED.

COMMIT,SAVEPOINT,ROLL BACKARE ALLOWED.

USER_TRIGGERS FOR SOURCE CODE:

SQL> DESC USER_TRIGGERS; NAME NULL? TYPE ----------------------------------------------------------------------- -------- ------------------------------------------------ TRIGGER_NAME VARCHAR2(30) TRIGGER_TYPE VARCHAR2(16) TRIGGERING_EVENT VARCHAR2(227) TABLE_OWNER VARCHAR2(30) BASE_OBJECT_TYPE VARCHAR2(16) TABLE_NAME VARCHAR2(30) COLUMN_NAME VARCHAR2(4000) REFERENCING_NAMES VARCHAR2(128) WHEN_CLAUSE VARCHAR2(4000) STATUS VARCHAR2(8) DESCRIPTION VARCHAR2(4000) ACTION_TYPE VARCHAR2(11) TRIGGER_BODY LONG

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

318

Page 319: Oracle Queries

ORACLESQL> SELECT TRIGGER_NAME,TRIGGER_BODY FROM USER_TRIGGERS;

TRIGGER_NAME TRIGGER_BODY ------------------------------ -------------------------------------------------------------------------------- SECURE_EMP BEGIN IF (TO_CHAR(SYSDATE,'DY') IN ('SAT','SUN')) OR (TO_CHAR(SYSDATE,'HH24'

SELECTTRIGGER_NAME,TRIGGER_TYPE,TRIGGERING_EVENT,TRIGGER_BODY FROM USER_TRIGGERS;

TRIGGER_NAME TRIGGER_TYPE ------------------------------ ---------------- TRIGGERING_EVENT ----------------------------------------------------------------------------------------------------------------------------------TRIGGER_BODY -------------------------------------------------------------------------------- SECURE_EMP BEFORE STATEMENT INSERT BEGIN IF (TO_CHAR(SYSDATE,'DY') IN ('SAT','SUN')) OR (TO_CHAR(SYSDATE,'HH24'

DISABLE OR REENABLE A CL DATABASE TRIGGER:

ALTER TRIGGER TRIGGER_NAME DISABLE/ENABLE.

DISABLE OR REENABLE ALL TRIGGERS FOR A TABLE:

ALTER TABLE TABLE_NAME DISABLE/ENABLE ALL TRIGGERS.

RECOMIPLE A TRIGGER FOR A TABLE:ALTER TRIGGER TRIGGER_NAME COMPILE.

CREATNG DATABASE TRIGGERS:

TRIGGERING USER EVENT:

CREATE , ALTER OR DROP

LOGGING ON OR OFF

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

319

Page 320: Oracle Queries

ORACLE

TRIGGERING DATABASE OR SYSTEM EVENT:

DATA BASE SHUTTING DOWN OR STARTING UP.

A SPECIFIC ERROR OR ANY ERROR BEING RAISED.

CREATE:

SQL> CREATE TABLE DDL_CREATIONS

2 (USER_ID VARCHAR2(10),

3 OBJECT_TYPE VARCHAR2(30),

4 OBJECT_NAME VARCHAR2(30),

5 OBJECT_OWNER VARCHAR2(20),

6 CREATIONDATE TIMESTAMP(5));

Table created.

SQL> CREATE OR REPLACE TRIGGER LOGCREATIONS

2 AFTER CREATE ON SCHEMA

3 BEGIN

4 INSERT INTO DDL_CREATIONS

5 VALUES

6 (USER,SYS.DICTIONARY_OBJ_TYPE,SYS.DICTIONARY_OBJ_NAME,

7 SYS.DICTIONARY_OBJ_OWNER,SYSTIMESTAMP);

8 END; 9 /

Trigger created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

320

Page 321: Oracle Queries

ORACLE

1 CREATE TABLE BALAJI11

2* (EMPNO NUMBER(10))SQL> /

Table created.

SQL> SELECT * FROM DDL_CREATIONS;

USER_ID OBJECT_TYPE OBJECT_NAME OBJECT_OWNER ---------- ------------------------------ ------------------------------ -------------------- CREATIONDATE --------------------------------------------------------------------------- SCOTT TABLE BALAJI11 SCOTT 15-JUN-05 12.03.24.00000 AM

DROP:

SQL> CREATE OR REPLACE TRIGGER PREVENT_DROP

2 BEFORE DROP ON SCOTT.SCHEMA

3 BEGIN

4 IF ORA_DICT_OBJ_OWNER='SCOTT'

5 AND ORA_DICT_OBJ_TYPE ='TABLE'

6 THEN RAISE_APPLICATION_ERROR

7 (-20002,'OPERATION NOT PERMITTED');

8 END IF;

9 END;

10 /

Trigger created.

SQL> DROP TABLE EMP100;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

321

Page 322: Oracle Queries

ORACLE DROP TABLE EMP100*ERROR at line 1:ORA-00604: error occurred at recursive SQL level 1 ORA-20002: OPERATION NOT PERMITTED ORA-06512: at line 4

SQL> CREATE OR REPLACE TRIGGER PREVENT_DROP1

2 BEFORE DROP ON SCOTT.SCHEMA

3 BEGIN

4 IF ORA_DICT_OBJ_OWNER='SCOTT'

5 AND ORA_DICT_OBJ_NAME LIKE 'E%'

6 AND ORA_DICT_OBJ_TYPE ='TABLE'

7 THEN RAISE_APPLICATION_ERROR

8 (-20002,'OPERATION NOT PERMITTED TABLES BEGINING WITH E LETTER');

9 END IF;

10 END;

11 /

Trigger created.

SQL> DROP TABLE EMP100;DROP TABLE EMP100*ERROR at line 1:ORA-00604: error occurred at recursive SQL level 1 ORA-20002: OPERATION NOT PERMITTED TABLES BEGINING WITH E LETTER ORA-06512: at line 5

LOGGING AND LOGOFF ON SCHEMA:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

322

Page 323: Oracle Queries

ORACLE 1 CREATE TABLE LOG_TRIG_TABLE

2 (USER_ID VARCHAR2(10),

3 LOG_DATE DATE,

4* ACTION VARCHAR2(10))

SQL> /

Table created.

1 CREATE OR REPLACE TRIGGER LOGON_TRIG

2 AFTER LOGON ON SCHEMA

3 BEGIN

4 INSERT INTO LOG_TRIG_TABLE/

5 VALUES

6 (USER,SYSDATE,'LOGGGING ON');

7* END;

SQL> /

Trigger created.

1 CREATE OR REPLACE TRIGGER LOGOFF_TRIG

2 BEFORE LOGOFF ON SCHEMA

3 BEGIN

4 INSERT INTO LOG_TRIG_TABLE

5 VALUES

6 (USER,SYSDATE,'LOGGGING OFF');

7* END;SQL> /

Trigger created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

323

Page 324: Oracle Queries

ORACLELOGGING AND LOGOFF ON DATABASE:

1 CREATE TABLE LOG_TRIG_TABLE1

2 (USER_ID VARCHAR2(20),

3 DATETIME TIMESTAMP(5),

4* ACTION VARCHAR2(20))

SQL> /

Table created.

1 CREATE OR REPLACE TRIGGER LOGOFF_TRIG1

2 BEFORE LOGOFF ON DATABASE

3 BEGIN

4 INSERT INTO LOG_TRIG_TABLE1

5 VALUES

6 (USER,SYSTIMESTAMP,'LOGGGING OFF');

7* END;

SQL> /

Trigger created.

1 CREATE OR REPLACE TRIGGER LOGON_TRIG1

2 AFTER LOGON ON DATABASE

3 BEGIN

4 INSERT INTO LOG_TRIG_TABLE1

5 VALUES

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

324

Page 325: Oracle Queries

ORACLE 6 (USER,SYSTIMESTAMP,'LOGGGING ON');

7* END;

SQL> /

Trigger created.

STARTUP AND SHUTDOWN OF DATABASE:

CREATE TABLE START_SHUT_DBASE

(DATETIME TIMESTAMP(5));

Table created.

SQL> CREATE OR REPLACE TRIGGER DATABASE_UP

2 AFTER STARTUP

3 ON DATABASE

4 BEGIN

5 INSERT INTO

6 START_SHUT_DBASE

7 VALUES

8 (SYSTIMESTAMP);

9 END;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

325

Page 326: Oracle Queries

ORACLE 10 /

Trigger created.

SQL> CREATE OR REPLACE TRIGGER DATABASE_SHUTDOWN

2 BEFORE SHUTDOWN

3 ON DATABASE

4 BEGIN

5 INSERT INTO

6 START_SHUT_DBASE

7 VALUES

8 (SYSTIMESTAMP);

9 END;

10 /

Trigger created.

A SPECIFIC ERROR OR ANY ERROR:

1 CREATE TABLE ERROR_LOG

2 (DATETIME TIMESTAMP(5),

3 USER_ID VARCHAR2(20),

4 INSTANCE NUMBER,

5 DATABASE_NAME VARCHAR2(100),

6* ERROR_STACK VARCHAR2(2000))

SQL> /

Table created.

1 CREATE OR REPLACE TRIGGER LOGERROS

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

326

Page 327: Oracle Queries

ORACLE 2 AFTER SERVERERROR ON DATABASE

3 BEGIN

4 INSERT INTO ERROR_LOG

5 VALUES

6 (SYSTIMESTAMP,SYS.LOGIN_USER,SYS.INSTANCE_NUM,

7 SYS.DATABASE_NAME,DBMS_UTILITY.FORMAT_ERROR_STACK);

8* END;

SQL> /

Trigger created.

SQL> SELECT * FORM EMP;

SELECT * FORM EMP *ERROR at line 1:ORA-00923: FROM keyword not found where expected

SQL> SELECT * FROM DDDDDD;SELECT * FROM DDDDDD *ERROR at line 1:ORA-00942: table or view does not exist

SQL> BEGIN 2 INSERT INTO LLL VALUES (1); 3 END; 4 /INSERT INTO LLL VALUES (1); *ERROR at line 2:ORA-06550: line 2, column 13: PL/SQL: ORA-00942: table or view does not exist ORA-06550: line 2, column 1: PL/SQL: SQL Statement ignored

SQL> BEGIN 2 DELETE FROM DDDD; 3

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

327

Page 328: Oracle Queries

ORACLE 4 /BEGIN*ERROR at line 1:ORA-06550: line 3, column 0: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: begin case declare end exception exit for goto if loop mod null pragma raise return select update while with <an identifier> <a double-quoted delimited-identifier> <a bind variable> << close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge <a single-quoted SQL string> pipe

SQL> SELECT * FROM ERROR_LOG;

DATETIME USER_ID INSTANCE --------------------------------------------------------------------------- -------------------- ---------- DATABASE_NAME ---------------------------------------------------------------------------------------------------- ERROR_STACK ----------------------------------------------------------------------------------------------------------------------------------15-JUN-05 12.09.25.00000 AM SCOTT 1 ORCL.US.ORACLE.COM ORA-00923: FROM keyword not found where expected 15-JUN-05 12.09.35.00000 AM SCOTT 1 ORCL.US.ORACLE.COM ORA-00942: table or view does not exist 15-JUN-05 12.09.54.00000 AM SCOTT 1 ORCL.US.ORACLE.COM ORA-06550: line 2, column 13: PL/SQL: ORA-00942: table or view does not exist ORA-06550: line 2, column 1: PL/SQL: SQL Statement ignored 15-JUN-05 12.10.28.00000 AM SCOTT 1 ORCL.US.ORACLE.COM ORA-06550: line 3, column 0: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: begin case declare end exception exit for goto if loop mod null pragma raise return select update while with <an identifier> <a double-quoted delimited-identifier> <a bind variable> << close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge <a single-quoted SQL string> pipe

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

328

Page 329: Oracle Queries

ORACLERESTRICTING A ROW TRIGGER WITH WHEN CLAUSE:

SQL> CREATE TABLE WHEN_MANAGER

2 (ACTION VARCHAR2(10),

3 DATETIME TIMESTAMP(5));

Table created.

1 CREATE OR REPLACE TRIGGER WHEN_JOB

2 BEFORE INSERT ON EMP

3 FOR EACH ROW

4 WHEN (NEW.JOB='MANAGER')

5 BEGIN

6 INSERT INTO WHEN_MANAGER

7 VALUES

8 ('MANAGER',SYSTIMESTAMP);

9* END;

SQL> /

Trigger created.

SQL> INSERT INTO EMP

2 VALUES

3 (1,'PAVAN','MAANGER',12,'01-DEC-81',1000,100,10);

1 row created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

329

Page 330: Oracle Queries

ORACLE 1 INSERT INTO EMP

2 VALUES

3* (2,'PAVAN','MANAGER',12,'01-DEC-81',1000,100,10)SQL> /

1 row created.

1 INSERT INTO EMP

2 VALUES

3* (3,'KUMAR','MANAGER',12,'01-DEC-81',1000,100,10)SQL> /

1 row created.

SQL> SELECT * FROM WHEN_MANAGER;

ACTION DATETIME ---------- --------------------------------------------------------------------------- MANAGER 15-JUN-05 12.20.55.00000 AM MANAGER 15-JUN-05 12.21.09.00000 AM

1 INSERT INTO EMP

2 VALUES

3* (4,'KUMAR','GER',12,'01-DEC-81',1000,100,10)SQL> /

1 row created.

SQL> SELECT * FROM WHEN_MANAGER;

ACTION DATETIME ---------- --------------------------------------------------------------------------- MANAGER 15-JUN-05 12.20.55.00000 AM MANAGER 15-JUN-05 12.21.09.00000 AM

1 INSERT INTO EMP

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

330

Page 331: Oracle Queries

ORACLE 2 VALUES

3* (5,'MANAGER','MANAGER',12,'01-DEC-81',1000,100,10)SQL> /

1 row created.

SQL> SELECT * FROM WHEN_MANAGER;

ACTION DATETIME ---------- --------------------------------------------------------------------------- MANAGER 15-JUN-05 12.20.55.00000 AM MANAGER 15-JUN-05 12.21.09.00000 AM MANAGER 15-JUN-05 12.22.51.00000 AM

CALLING A PROCEDURE FROM TRIGGER:

1 CREATE TABLE LOG_TABLE

2 (USER VARCHAR2(10),

3* TDATE TIMESTAMP)SQL> /

Table created.

SQL> CREATE OR REPLACE PROCEDURE CALL_TRIGGER

2 AS

3 BEGIN

4 INSERT INTO LOG_TABLE

5 VALUES

6 (USER,SYSTIMESTAMP);

7 END;

8 /

Procedure created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

331

Page 332: Oracle Queries

ORACLE 1 CREATE OR REPLACE TRIGGER CALL_PROC

2 BEFORE INSERT ON EMP

3* CALL CALL_TRIGGERSQL> /

Trigger created.

SQL> SELECT * FROM LOG_TABLE;

no rows selected

1 INSERT INTO EMP 2 (EMPNO,DEPTNO) 3 VALUES 4* (6,10)SQL> /

1 row created.

SQL> SELECT * FROM LOG_TABLE;

US D ---------- --------- SCOTT 15-JUN-05

CREATING PACKAGES:

WE USE PACKAGES TO GROUP LOGICALLY RELATED PL/SQL TYPES,SUBPROGRAMS.

PACKAGE CONSISTS OF PACKAGE SPECIFICATION AND PACKAGE BODY.

PACKAGE SPECIFICATION CONTAINS DECLARATIONS OF ALL LOGICALLY RELATED ITEMS.

PACKAGE BODY CONTAINS BODY FOR ALL WHAT ALL WE DECLARED IN THE PACKAGE SPECIFICATION.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

332

Page 333: Oracle Queries

ORACLECREATING PACKAGE SPECIFICATION:

1 CREATE OR REPLACE PACKAGE HANUMAN IS

2 G_SAL NUMBER;

3 PROCEDURE FIND_SAL

4 (V_EMPNO IN NUMBER);

5* END;

6 /

Package created.

CREATING PACKAGE BODY:

1 CREATE OR REPLACE PACKAGE BODY HANUMAN IS

2 FUNCTION FINDFUN_SAL

3 (V_EMPNO IN NUMBER)

4 RETURN NUMBER IS

5 V_SAL NUMBER(10);

6 BEGIN

7 SELECT SAL INTO V_SAL FROM EMP

8 WHERE EMPNO = V_EMPNO;

9 RETURN V_SAL;

10 END;

11 PROCEDURE FIND_SAL

12 (V_EMPNO IN NUMBER)

13 IS

14 BEGIN

15 G_SAL:=FINDFUN_SAL(V_EMPNO);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

333

Page 334: Oracle Queries

ORACLE 16 DBMS_OUTPUT.PUT_LINE(G_SAL);

17 END;

18* END;

SQL> /

Package body created.

SQL> EXECUTE HANUMAN.FIND_SAL(7369)

PL/SQL procedure successfully completed.

SQL> SET SERVEROUTPUT ON

SQL> EXECUTE HANUMAN.FIND_SAL(7369)800

PL/SQL procedure successfully completed.

DECLARING GLOBAL_VARIABLES IN A PACKAGE:

SQL> CREATE OR REPLACE PACKAGE GOLBAL_VARS IS

2 V_EMPNO CONSTANT NUMBER:=7369;

3 V_DEPTNO CONSTANT NUMBER:=10;

4 END;

5 /

Package created.

1 CREATE OR REPLACE PROCEDURE GLOBALFIND_SAL

2 IS

3 V_SAL NUMBER(10);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

334

Page 335: Oracle Queries

ORACLE 4 BEGIN

5 SELECT SAL INTO V_SAL FROM EMP

6 WHERE EMPNO=GOLBAL_VARS.V_EMPNO;

7 DBMS_OUTPUT.PUT_LINE(V_SAL);

8* END;

SQL> /

Procedure created.

SQL> EXECUTE GLOBALFIND_SAL;800

PL/SQL procedure successfully completed.

OVERLOADING IN PACKAGES:

1 CREATE OR REPLACE PACKAGE OVERLOAD_DEPT IS

2 PROCEDURE ADD_DEPT

3 (V_DEPTNO IN DEPT.DEPTNO%TYPE);

4 PROCEDURE ADD_DEPT

5 (V_DEPTNO IN DEPT.DEPTNO%TYPE,

6 V_DNAME IN DEPT.DNAME%TYPE);

7 PROCEDURE ADD_DEPT

8 (V_DEPTNO IN DEPT.DEPTNO%TYPE,

9 V_DNAME IN DEPT.DNAME%TYPE,

10 V_LOC IN DEPT.LOC%TYPE);

11* END;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

335

Page 336: Oracle Queries

ORACLESQL> /

Package created.

1 CREATE OR REPLACE PACKAGE BODY OVERLOAD_DEPT IS

2 PROCEDURE ADD_DEPT

3 (V_DEPTNO IN DEPT.DEPTNO%TYPE)

4 IS

5 BEGIN

6 INSERT INTO DEPT

7 (DEPTNO)

8 VALUES

9 (V_DEPTNO);

10 END;

11 PROCEDURE ADD_DEPT

12 (V_DEPTNO IN DEPT.DEPTNO%TYPE,

13 V_DNAME IN DEPT.DNAME%TYPE)

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

336

Page 337: Oracle Queries

ORACLE 14 IS

15 BEGIN

16 INSERT INTO DEPT

17 (DEPTNO,DNAME)

18 VALUES

19 (V_DEPTNO,V_DNAME);

20 END;

21 PROCEDURE ADD_DEPT

22 (V_DEPTNO IN DEPT.DEPTNO%TYPE,

23 V_DNAME IN DEPT.DNAME%TYPE,

24 V_LOC IN DEPT.LOC%TYPE)

25 IS

26 BEGIN

27 INSERT INTO DEPT

28 (DEPTNO,DNAME,LOC)

29 VALUES

30 (V_DEPTNO,V_DNAME,V_LOC);

31 END;

32* END;

33 /

Package body created.

SQL> EXECUTE OVERLOAD_DEPT.ADD_DEPT(50);

PL/SQL procedure successfully completed.

SQL> EXECUTE OVERLOAD_DEPT.ADD_DEPT(60,'COMPUTERS');

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

337

Page 338: Oracle Queries

ORACLEPL/SQL procedure successfully completed.

SQL> EXECUTE OVERLOAD_DEPT.ADD_DEPT(70,'IP','LONDON');

PL/SQL procedure successfully completed.

SQL> SELECT * FROM DEPT;

DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 50 60 COMPUTERS 70 IP LONDON

7 rows selected.

CREATING TYPES:

SQL> CREATE TYPE ADDRESS_TY AS OBJECT

2 (STREET VARCHAR2(10),

3 CITY VARCHAR2(10),

4 STATE VARCHAR2(10),

5 ZIP NUMBER);

6 /

Type created.

SQL> CREATE TYPE PERSON_TY AS OBJECT

2 (NAME VARCHAR2(10),

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

338

Page 339: Oracle Queries

ORACLE 3 ADDRESS ADDRESS_TY);

4 /

TYPE CREATED.

SQL> CREATE TABLE CUSTOMER

2 (CUSTOMER_ID NUMBER,

3 PERSON PERSON_TY);

Table created.

SQL> DESC CUSTOMER

Name Null? Type ------------------------------------------------------/

----- -------- ---------------------------------------- CUSTOMER_ID NUMBER PERSON PERSON_TY

SQL> DESC PERSON_TY

Name Null? Type ----------------------------------------------- -------- -------------------------------- NAME VARCHAR2(10) ADDRESS ADDRESS_TY

SQL> DESC ADDRESS_TY

Name Null? Type ----------------------------------------------- -------- -------------------------------- STREET VARCHAR2(10) CITY VARCHAR2(10) STATE VARCHAR2(10) ZIP NUMBER

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

339

Page 340: Oracle Queries

ORACLE

THE USER_TAB_COLUMNS DATA DICTIONARY VIEW CAN BE QUERIED TO SEE THE DATA TYPE ASSOCIATED WITH EACH COLUMN IN THE CUSTOMER TABLE.

SQL> SELECT COLUMN_NAME,DATA_TYPE FROM USER_TAB_COLUMNS 2 WHERE TABLE_NAME = 'CUSTOMER';

COLUMN_NAME DATA_TYPE

CUSTOMER_ID NUMBER PERSON PERSON_TY IN THE FOLLOWING QUERY , THE NAME, LENGTH, AND DATA TYPE ARE SELECTED FOR EACH OF THE ATTRIBUTES WITHIN THE PWESON_TY DATATYPE.

SELECT ATTR_NAME,LENGTH,ATTR_TYPE_NAME FROM USER_TYPE_ATTRSWHERE TYPE_NAME = 'PERSON_TY';

SQL> /

ATTR_NAME LENGTH ATTR_TYPE_NAME ------------------------------ ---------- ------------------------------ NAME 10 VARCHAR2 ADDRESS ADDRESS_TY

QUERY USER_TYPE_ATTRS AGAIN TO SEE THE ATTRIBUTES OF THE ADDRESS_TY DATATYPE.

SELECT ATTR_NAME,LENGTH,ATTR_TYPE_NAME FROM USER_TYPE_ATTRSWHERE TYPE_NAME = 'ADDRESS_TY';

SQL> /

ATTR_NAME LENGTH ATTR_TYPE_NAME ------------------------------ ---------- ------------------------------ STREET 10 VARCHAR2 CITY 10 VARCHAR2 STATE 10 VARCHAR2 ZIP NUMBER

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

340

Page 341: Oracle Queries

ORACLEINSERTING RECORDS IN TO THE CUSTOMER TABLE:

1 INSERT INTO CUSTOMER VALUES 2* (1,PERSON_TY('PAVAN',ADDRESS_TY('RAMNAGAR','HYD','A.P',500044)))SQL> /

1 row created.

1 INSERT INTO CUSTOMER VALUES 2* (2,PERSON_TY('GAYATRI',ADDRESS_TY('RAMNAGAR','HYD','A.P',500044))) 3 /

1 row created.

1 INSERT INTO CUSTOMER VALUES 2* (3,PERSON_TY('GAYATRIJI',ADDRESS_TY('RAMNAGAR','HYD','A.P',500044)))SQL> /

1 row created.

SQL> DESC CUSTOMER Name Null? Type ----------------------------------------------- -------- -------------------------------- CUSTOMER_ID NUMBER PERSON PERSON_TY

SELECTING RECORDS IN TO THE CUSTOMER TABLE:

SQL> SELECT * FROM CUSTOMER;

CUSTOMER_ID ----------- PERSON(NAME, ADDRESS(STREET, CITY, STATE, ZIP)) ------------------------------------------------------------------------------------------ 1 PERSON_TY('PAVAN', ADDRESS_TY('RAMNAGAR', 'HYD', 'A.P', 500044))

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

341

Page 342: Oracle Queries

ORACLE 2 PERSON_TY('GAYATRI', ADDRESS_TY('RAMNAGAR', 'HYD', 'A.P', 500044)) 3 PERSON_TY('GAYATRIJI', ADDRESS_TY('RAMNAGAR', 'HYD', 'A.P', 500044))

SQL> SELECT CUSTOMER_ID FROM CUSTOMER;

CUSTOMER_ID ----------- 1 2 3

SQL> SELECT CUSTOMER_ID,CLIENT.PERSON.NAME FROM CUSTOMER CLIENT;

CUSTOMER_ID PERSON.NAM ----------- ---------- 1 PAVAN 2 GAYATRI 3 GAYATRIJI

SQL> DESC CUSTOMER Name Null? Type ----------------------------------------------- -------- -------------------------------- CUSTOMER_ID NUMBER PERSON PERSON_TY

SQL> DESC PERSON_TY Name Null? Type ----------------------------------------------- -------- -------------------------------- NAME VARCHAR2(10) ADDRESS ADDRESS_TY

SQL> DESC ADDRESS_TY Name Null? Type ----------------------------------------------- -------- -------------------------------- STREET VARCHAR2(10) CITY VARCHAR2(10) STATE VARCHAR2(10) ZIP NUMBER

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

342

Page 343: Oracle Queries

ORACLEUPDATING RECORDS IN TO THE CUSTOMER TABLE:

1 SELECT CUSTOMER_ID,CLIENT.PERSON.NAME,

2* CLIENT.PERSON.ADDRESS.CITY FROM CUSTOMER CLIENT.

SQL> /

CUSTOMER_ID PERSON.NAM PERSON.ADD ----------- ---------- ---------- 1 PAVAN HYD 2 GAYATRI HYD / 3 GAYATRIJI HYD

SQL> UPDATE CUSTOMER CLIENT

2 SET CLIENT.PERSON.ADDRESS.CITY='NEW YORK'

3 WHERE CLIENT.PERSON.NAME='GAYATRIJI';

1 row updated.

SQL> SELECT CUSTOMER_ID,CLIENT.PERSON.NAME,

2 CLIENT.PERSON.ADDRESS.CITY FROM CUSTOMER CLIENT;

CUSTOMER_ID PERSON.NAM PERSON.ADD ----------- ---------- ---------- 1 PAVAN HYD 2 GAYATRI HYD 3 GAYATRIJI NEW YORK

DELETING RECORDS IN TO THE CUSTOMER TABLE:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

343

Page 344: Oracle Queries

ORACLESQL> DELETE FROM CUSTOMER CLIENT

2 WHERE CLIENT.PERSON.NAME='PAVAN';

1 ROW DELETED.

SQL> SELECT CUSTOMER_ID,CLIENT.PERSON.NAME,

2 CLIENT.PERSON.ADDRESS.CITY FROM CUSTOMER CLIENT;

CUSTOMER_ID PERSON.NAM PERSON.ADD ----------- ---------- ---------- 2 GAYATRI HYD 3 GAYATRIJI NEW YORK

OBJECT VIEWS:

WHAT IF TABLES ALREADY EXIST?

WHAT IF A RELATIONAL DATABASE APPLICATION IS ALREADY CREATED AND EXISTING AND OBJECT-RELATIONAL CONCEPTS ARE TO BE IMPLEMENTED IN THE APPLICATION WITHOUT REBUILDING AND RECREATING THE ENTIRE APPLICATION.

THE NEED WOULD BE THE ABLITY TO OVELAY OBJECT-ORIENTED STRUCTURES,SUCH AS ABSTRACT DATATYPES ON EXISTING RELATIONAL TABLES.

ORACLE PROVIDES OBJECT-VIEWS AS A MEANS FOR DOING THIS.

FOR CREATING OBJECT VIEWS BASED ON EXISTING RELATIONAL TABLES,THE ORDER OF OPERATION IS:

CREATE THE CUSTOMER TABLE.(RETATIONAL TYPE USING 8I/9I DATA TYPES)

CREATE THE ADDRESS_TY DATATYPE.

CREATE THE PERSON_TYPE DATA TYPE USING ADDRESS_TY DATATYPE.

CREATE THE CUSTOMER_TY DATA TYPE USING PERSON_TY DATATYPE.

CREATE THE CUSTOMER_OV OBJECT VIEW,USING THE DEFINED DATATYPES.

CREATE THE CUSTOMER TABLE.(RETATIONAL TYPE USING 8I/9I DATA TYPES):

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

344

Page 345: Oracle Queries

ORACLE 1 CREATE TABLE CUSTOMER1

2 (CUSTOMER_ID NUMBER PRIMARY KEY,

3 NAME VARCHAR2(10),

4 STREET VARCHAR2(10),

5 CITY VARCHAR2(10),

6 STATE VARCHAR2(10),

7* ZIP NUMBER(10))SQL> /

Table created.

CREATE THE ADDRESS_TY DATATYPE:

1 CREATE OR REPLACE TYPE ADDRESS_TY1 AS OBJECT

2 (STREET VARCHAR2(10),

3 CITY VARCHAR2(10),

4 STATE VARCHAR2(10),

5* ZIP NUMBER(10));

SQL> /

Type created.

CREATE THE PERSON_TYPE DATA TYPE USING ADDRESS_TY DATATYPE:

1 CREATE OR REPLACE TYPE PERSON_TY1 AS OBJECT

2 (NAME VARCHAR2(10),

3* ADDRESS ADDRESS_TY1);

4 /

Type created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

345

Page 346: Oracle Queries

ORACLE

CREATE THE CUSTOMER_TY DATA TYPE USING PERSON_TY DATATYPE:

1 CREATE OR REPLACE TYPE CUSTOMER_TY1 AS OBJECT

2 (CUSTOMER_ID NUMBER,

3* PERSON PERSON_TY);

SQL> /

Type created.

CREATE THE CUSTOMER_OV OBJECT VIEW,USING THE DEFINED DATATYPES:

SQL> CREATE OR REPLACE VIEW CUSTOMER_VIEW

2 (CUSTOMER_ID,PERSON)

3 AS

4 SELECT CUSTOMER_ID,PERSON_TY1

5 (NAME,ADDRESS_TY1(STREET,CITY,STATE,ZIP))

6 FROM CUSTOMER1;

View created.

SQL> SELECT * FROM CUSTOMER_VIEW;

no rows selected

INSERTING VALUES IN TO CUSTOMER1 TABLE VIA TABLE:

1 INSERT INTO CUSTOMER1

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

346

Page 347: Oracle Queries

ORACLE 2 VALUES 3* (1,'PAVAN','RAMNAGAR','HYD','AP',500044)SQL> /

1 row created.

1 INSERT INTO CUSTOMER1

2 VALUES

3* (2,'GAYATRI','RAMNAGAR','HYD','AP',500044) 4 /

1 row created.

1 INSERT INTO CUSTOMER1

2 VALUES

3* (3,'GAYATRIJI','RAMNAGAR','HYD','AP',500044)

SQL> /

1 row created.

SELECTING VALUES THROUGH OBJECT VIEWS:

SQL> SELECT * FROM CUSTOMER_VIEW;

CUSTOMER_ID ----------- PERSON(NAME, ADDRESS(STREET, CITY, STATE, ZIP)) ------------------------------------------------------------------------------------------ 1 PERSON_TY1('PAVAN', ADDRESS_TY1('RAMNAGAR', 'HYD', 'AP', 500044)) 2 PERSON_TY1('GAYATRI', ADDRESS_TY1('RAMNAGAR', 'HYD', 'AP', 500044)) 3 PERSON_TY1('GAYATRIJI', ADDRESS_TY1('RAMNAGAR', 'HYD', 'AP', 500044))

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

347

Page 348: Oracle Queries

ORACLEINSERTING VALUES THROUGH OBJECT VIEW:

1 INSERT INTO CUSTOMER_VIEW

2 VALUES

3* (4,PERSON_TY1('GAYAANGEL',

ADDRESS_TY1('RAMNAGAR','HYD','AP',500044)))

SQL> /

1 row created.

SQL> SELECT * FROM CUSTOMER_VIEW;

CUSTOMER_ID ----------- PERSON(NAME, ADDRESS(STREET, CITY, STATE, ZIP)) ------------------------------------------------------------------------------------------ 1 PERSON_TY1('PAVAN', ADDRESS_TY1('RAMNAGAR', 'HYD', 'AP', 500044)) 2 PERSON_TY1('GAYATRI', ADDRESS_TY1('RAMNAGAR', 'HYD', 'AP', 500044)) 3 PERSON_TY1('GAYATRIJI', ADDRESS_TY1('RAMNAGAR', 'HYD', 'AP', 500044)) 4 PERSON_TY1('GAYAANGEL', ADDRESS_TY1('RAMNAGAR', 'HYD', 'AP', 500044))

UPDATING TABLE VIA OBJECT VIEW: SQL> UPDATE CUSTOMER_VIEW E

2 SET E.PERSON.ADDRESS.CITY='NEW YORK'

3 WHERE E.PERSON.NAME='PAVAN';

1 row updated.

SQL> SELECT * FROM CUSTOMER1;

CUSTOMER_ID NAME STREET CITY STATE ZIP ----------- ---------- ---------- ---------- ---------- ---------- 1 PAVAN RAMNAGAR NEW YORK AP 500044 2 GAYATRI RAMNAGAR HYD AP 500044 3 GAYATRIJI RAMNAGAR HYD AP 500044

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

348

Page 349: Oracle Queries

ORACLE4 GAYAANGELRAMNAGAR HYD AP 500044

SQL> SELECT * FROM CUSTOMER_VIEW;

CUSTOMER_ID ----------- PERSON(NAME, ADDRESS(STREET, CITY, STATE, ZIP)) ------------------------------------------------------------------------------------------ 1 PERSON_TY1('PAVAN', ADDRESS_TY1('RAMNAGAR', 'NEW YORK', 'AP', 500044)) 2 PERSON_TY1('GAYATRI', ADDRESS_TY1('RAMNAGAR', 'HYD', 'AP', 500044)) 3 PERSON_TY1('GAYATRIJI', ADDRESS_TY1('RAMNAGAR', 'HYD', 'AP', 500044)) 4 PERSON_TY1('GAYAANGEL', ADDRESS_TY1('RAMNAGAR', 'HYD', 'AP', 50004)) DELETING VALUES THROUGH OBJECT_VIEWS:

SQL> DELETE FROM CUSTOMER_VIEW E

2 WHERE E.CUSTOMER_ID=1;

1 row deleted.

SQL> SELECT * FROM CUSTOMER_VIEW;

CUSTOMER_ID ----------- PERSON(NAME, ADDRESS(STREET, CITY, STATE, ZIP)) ------------------------------------------------------------------------------------------ 2 PERSON_TY1('GAYATRI', ADDRESS_TY1('RAMNAGAR', 'HYD', 'AP', 500044)) 3 PERSON_TY1('GAYATRIJI', ADDRESS_TY1('RAMNAGAR', 'HYD', 'AP', 500044)) 4 PERSON_TY1('GAYAANGEL', ADDRESS_TY1('RAMNAGAR', 'HYD', 'AP', 50004))

SQL> DELETE FROM CUSTOMER_VIEW E

2 WHERE E.PERSON.NAME='GAYAANGEL';

1 row deleted.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

349

Page 350: Oracle Queries

ORACLESQL> SELECT * FROM CUSTOMER_VIEW;

CUSTOMER_ID ----------- PERSON(NAME, ADDRESS(STREET, CITY, STATE, ZIP)) ------------------------------------------------------------------------------------------ 2 PERSON_TY1('GAYATRI', ADDRESS_TY1('RAMNAGAR', 'HYD', 'AP', 500044)) 3 PERSON_TY1('GAYATRIJI', ADDRESS_TY1('RAMNAGAR', 'HYD', 'AP', 500044))

SQL> SELECT * FROM CUSTOMER1;

CUSTOMER_ID NAME STREET CITY STATE ZIP ----------- ---------- ---------- ---------- ---------- ---------- 2 GAYATRI RAMNAGAR HYD AP 500044 3 GAYATRIJI RAMNAGAR HYD AP 500044

DBMS_OUTPUT PACKAGE:

SQL> DECLARE

2 V_SAL NUMBER(10);

3 BEGIN

4 SELECT SAL INTO V_SAL FROM EMP

5 WHERE EMPNO=&EMPNO;

6 DBMS_OUTPUT.PUT_LINE(V_SAL);

7 END;

8 /

Enter value for empno: 7369

old 5: WHERE EMPNO=&EMPNO;

new 5: WHERE EMPNO=7369;

PL/SQL procedure successfully completed.

SQL> SET SERVEROUTPUT ON

SQL> /

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

350

Page 351: Oracle Queries

ORACLEEnter value for empno: 7369

old 5: WHERE EMPNO=&EMPNO;

new 5: WHERE EMPNO=7369;

800

PL/SQL procedure successfully completed.

SQL> BEGIN

2 DBMS_OUTPUT.DISABLE;

3 END;

4 /

PL/SQL procedure successfully completed.

SQL> DECLARE

2 V_SAL NUMBER(10);

3 BEGIN

4 SELECT SAL INTO V_SAL FROM EMP

5 WHERE EMPNO=&EMPNO;

6 DBMS_OUTPUT.PUT_LINE(V_SAL);

7 END;

8 /

Enter value for empno: 7369

old 5: WHERE EMPNO=&EMPNO;

new 5: WHERE EMPNO=7369;

PL/SQL procedure successfully completed.

SQL> BEGIN

2 DBMS_OUTPUT.ENABLE;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

351

Page 352: Oracle Queries

ORACLE 3 END;

4 /

PL/SQL procedure successfully completed.

SQL> DECLARE

2 V_SAL NUMBER(10);

3 BEGIN

4 SELECT SAL INTO V_SAL FROM EMP

5 WHERE EMPNO=&EMPNO;

6 DBMS_OUTPUT.PUT_LINE(V_SAL);

7 END;

8 /Enter value for empno: 7369

old 5: WHERE EMPNO=&EMPNO;

new 5: WHERE EMPNO=7369;

800

PL/SQL procedure successfully completed.

1 DECLARE

2 BEGIN

3 DBMS_OUTPUT.ENABLE(2000);

4 DBMS_OUTPUT.PUT_LINE('THREE NAMES WILL BE WRITTEN.');

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

352

Page 353: Oracle Queries

ORACLE 5 DBMS_OUTPUT.PUT('PAVAN');

6 DBMS_OUTPUT.NEW_LINE;

7 DBMS_OUTPUT.PUT('GAYATRI');

8 DBMS_OUTPUT.NEW_LINE;

9 DBMS_OUTPUT.PUT('PRATHIMA');

10 DBMS_OUTPUT.NEW_LINE;

11* END;

12 /

THREE NAMES WILL BE WRITTEN.

PAVAN

GAYATRI

PRATHIMA

PL/SQL procedure successfully completed.

SQL> SET SERVEROUTPUT OFF

SQL> BEGIN

2 DBMS_OUTPUT.ENABLE(2000);

3 DBMS_OUTPUT.PUT_LINE('THREE NAMES WILL BE WRITTEN.');

4 DBMS_OUTPUT.PUT('PAVAN');

5 DBMS_OUTPUT.NEW_LINE;

6 DBMS_OUTPUT.PUT('GAYATRI');

7 DBMS_OUTPUT.NEW_LINE;

8 DBMS_OUTPUT.PUT('PRATHIMA');

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

353

Page 354: Oracle Queries

ORACLE 9 DBMS_OUTPUT.NEW_LINE;

10 END;

11 /

PL/SQL procedure successfully completed.

SQL> SET SERVEROUTPUT ON

1 DECLARE

2 THROW_AWAY VARCHAR2(50);

3 NAME1 VARCHAR2(10);

4 NAME2 VARCHAR2(10);

5 NAME3 VARCHAR2(10);

6 STATUS NUMBER;

7 BEGIN

8 DBMS_OUTPUT.GET_LINE(THROW_AWAY,STATUS);

9 DBMS_OUTPUT.GET_LINE(NAME1,STATUS);

10 DBMS_OUTPUT.GET_LINE(NAME2,STATUS);

11 DBMS_OUTPUT.GET_LINE(NAME3,STATUS);

12 DBMS_OUTPUT.PUT_LINE(NAME1||'AND'||NAME2||'AND'||NAME3);

13* END;

SQL> /

PAVAN AND GAYATRI AND PRATHIMA

PL/SQL procedure successfully completed.

UTL_FILE PACKAGE:

1 DECLARE

2 FILE_HANDLE UTL_FILE.FILE_TYPE;

3 DATA_LINE VARCHAR2(100);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

354

Page 355: Oracle Queries

ORACLE 4 BEGIN

5 FILE_HANDLE :=UTL_FILE.FOPEN('C:\PAVAN','PAVAN.TXT','R');

6 UTL_FILE.GET_LINE(FILE_HANDLE,DATA_LINE);

7 DBMS_OUTPUT.PUT_LINE(DATA_LINE);

8 UTL_FILE.GET_LINE(FILE_HANDLE,DATA_LINE);

9 DBMS_OUTPUT.PUT_LINE(DATA_LINE);

10 UTL_FILE.GET_LINE(FILE_HANDLE,DATA_LINE);

11 DBMS_OUTPUT.PUT_LINE(DATA_LINE);

12 UTL_FILE.FCLOSE(FILE_HANDLE);

13* END;

SQL> /

PL/SQL procedure successfully completed.

SQL> SET SERVEROUTPUT ON

SQL> /

GOD IS GREAT.

PAVAN IS GOOD BOY.

GAYATRI IS CUTE GIRL.

PL/SQL procedure successfully completed.

1 DECLARE

2 FILE_HANDLE UTL_FILE.FILE_TYPE;

3 DATA_LINE VARCHAR2(100);

4 BEGIN

5 FILE_HANDLE :=UTL_FILE.FOPEN('C:\PAVAN','KUMAR.TXT','W');

6 FOR V_EMP IN (SELECT EMPNO,ENAME,JOB FROM EMP) LOOP

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

355

Page 356: Oracle Queries

ORACLE 7 UTL_FILE.PUT_LINE(FILE_HANDLE,TO_CHAR(V_EMP.EMPNO)||

8 ',"' || V_EMP.ENAME ||',"'||V_EMP.JOB||'"');

9 END LOOP;

10 UTL_FILE.FCLOSE(FILE_HANDLE);

11* END;

12 /

PL/SQL procedure successfully completed.

CREATION OF DIRECTORY:

SQL> CREATE OR REPLACE DIRECTORY BALAJI AS 'C:\ORACLE\HANUMAN';

Directory created.

DROPING DIRECTORY:

SQL> DROP DIRECTORY BALAJI;

Directory dropped.

CREATING EXTERNAL TABLE:

1 CREATE TABLE OLDEMP 2 (EMPNO NUMBER, 3 ENAME CHAR(20), 4 JOB CHAR(20)) 5 ORGANIZATION EXTERNAL 6 (TYPE ORACLE_LOADER 7 DEFAULT DIRECTORY BALAJI 8 ACCESS PARAMETERS 9 (RECORDS DELIMITED BY NEWLINE 10 BADFILE 'BAD_EMP' 11 LOGFILE 'LOG_EMP' 12 FIELDS TERMINATED BY ',' 13 (EMPNO CHAR, 14 ENAME CHAR,

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

356

Page 357: Oracle Queries

ORACLE 15 JOB CHAR)) 16 LOCATION ('EXT.TXT')) 17 PARALLEL 5 18* REJECT LIMIT 200 19 /

Table created.

SQL> DESC OLDEMP Name Null? Type ----------------------------------------------------------------------- -------- ------------------------------------------------ EMPNO NUMBER ENAME CHAR(20) JOB CHAR(20)

1 CREATE TABLE NEWEMP 2 (EMPNO NUMBER(10), 3 ENAME VARCHAR2(20), 4* JOB VARCHAR2(20))SQL> /

Table created.

SQL> INSERT INTO NEWEMP 2 SELECT EMPNO,ENAME,JOB FROM OLDEMP;

4 rows created.

SQL> SELECT * FROM NEWEMP;

EMPNO ENAME JOB ---------- -------------------- -------------------- 10 PAVAN MANAGER 20 GAYATRI MANAGER 30 PRATHIMA MANAGER 40 SRIDEVI MANAGER

SQL> SELECT * FROM OLDEMP;

EMPNO ENAME JOB

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

357

Page 358: Oracle Queries

ORACLE---------- -------------------- -------------------- 10 PAVAN MANAGER 20 GAYATRI MANAGER 30 PRATHIMA MANAGER 40 SRIDEVI MANAGER

SQL> DESC OLDEMP Name Null? Type ----------------------------------------------------------------------- -------- ------------------------------------------------ EMPNO NUMBER ENAME CHAR(20) JOB CHAR(20)

NVL2:

THE NVL2 FUNCTION EXAMINES THE FIRST EXPRESSION.

IF THE FIRST EXPRESSION IS NOT NULL,THEN NVL2 FUNCTION RETURNS THE SECOND EXPRESSION.

IF THE FIRST EXPRESSION IS NULL,THEN THE THIRD EXPRESSION IS RETURNED.

SQL> SELECT EMPNO,SAL,COMM,NVL2(COMM,'SAL+COMM','SAL') INCOME 2 FROM EMP;

EMPNO SAL COMM INCOME ---------- ---------- ---------- -------- 7369 800 SAL 7499 1600 300 SAL+COMM 7521 1250 500 SAL+COMM 7566 2975 SAL 7654 1250 1400 SAL+COMM 7698 2850 SAL 7782 2450 SAL 7788 3000 SAL 7839 5000 SAL 7844 1500 0 SAL+COMM 7876 1100 SAL 7900 950 SAL 7902 3000 SAL 7934 1300 SAL 4 rows selected.

SQL> SELECT EMPNO,SAL,COMM,NVL2(COMM,SAL+COMM,SAL) INCOME 2 FROM EMP;

EMPNO SAL COMM INCOME ---------- ---------- ---------- ---------- 7369 800 800

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

358

Page 359: Oracle Queries

ORACLE 7499 1600 300 1900 7521 1250 500 1750 7566 2975 2975 7654 1250 1400 2650 7698 2850 2850 7782 2450 2450 7788 3000 3000 7839 5000 5000 7844 1500 0 1500 7876 1100 1100 7900 950 950 7902 3000 3000 7934 1300 1300

14 rows selected.

SQL> SELECT EMPNO,SAL,COMM,SAL+NVL(COMM,0) INCOME FROM EMP;

EMPNO SAL COMM INCOME ---------- ---------- ---------- ---------- 7369 800 800 7499 1600 300 1900 7521 1250 500 1750 7566 2975 2975 7654 1250 1400 2650 7698 2850 2850 7782 2450 2450 7788 3000 3000 7839 5000 5000 7844 1500 0 1500 7876 1100 1100 7900 950 950 7902 3000 3000 7934 1300 1300

14 rows selected.

NULLIF:

THE NULLIF FUNCTION COMPARES TWO EXPRESSIONS.

IF THEY ARE EQUAL,THE FUNCTION RETURNS NULL.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

359

Page 360: Oracle Queries

ORACLEIF THEY ARE NOT EQUAL,THE FUNCTION RETURNS THE FIRST EXPRESSION.

SQL> SELECT ENAME,JOB FROM EMP;

ENAME JOB ---------- --------- SMITH CLERK ALLEN SALESMAN WARD SALESMAN JONES MANAGER MARTIN SALESMAN BLAKE MANAGER CLARK MANAGER SCOTT ANALYST KING PRESIDENT TURNER SALESMAN ADAMS CLERK JAMES CLERK FORD ANALYST MILLER CLERK

14 rows selected.

1 SELECT ENAME, 2 LENGTH(ENAME) "EXPR1", 3 LENGTH(JOB) "EXPR2", 4* NULLIF(LENGTH(ENAME),LENGTH(JOB)) "RESULT" FROM EMPSQL> /

ENAME EXPR1 EXPR2 RESULT ---------- ---------- ---------- ---------- SMITH 5 5 ALLEN 5 8 5 WARD 4 8 4 JONES 5 7 5 MARTIN 6 8 6 BLAKE 5 7 5 CLARK 5 7 5 SCOTT 5 7 5 KING 4 9 4 TURNER 6 8 6 ADAMS 5 5 JAMES 5 5 FORD 4 7 4 MILLER 6 5 6

14 rows selected.

COALESCE:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

360

Page 361: Oracle Queries

ORACLETHE COALESCE FUNCTION RETURNS THE FIRST NON-NULL EXPRESSION IN THE LIST.

COALESCE(EXPR1,EXPR2,……EXPRN)

IN SYNTAX:

EXPR1 RETURNS THIS EXPRESSION IF IT IS NOT NULL.

EXPR2 RETURNS THIS EXPRESSION IF THE FIRST EXPRESSION IS NULL AND THIS EXPRESSION IS NOT NULL.

EXPRN RETURNS THIS EXPRESSION IF THE PRECEDING EXPRESSIONS ARE NULL.

SELECT EMPNO,ENAME,COALESCE(COMM,SAL,10) COMM FROM EMP ORDER BY COMM;

EMPNO ENAME COMM ---------- ---------- ---------- 7844 TURNER 0 7499 ALLEN 300 7521 WARD 500 7369 SMITH 800 7900 JAMES 950 7876 ADAMS 1100 7934 MILLER 1300 7654 MARTIN 1400 7782 CLARK 2450 7698 BLAKE 2850 7566 JONES 2975 7788 SCOTT 3000 7902 FORD 3000 7839 KING 5000

14 rows selected.

1 SELECT EMPNO,ENAME,SAL,COMM,COALESCE(COMM,SAL,10) "COMMISSION" FROM EMP 2* ORDER BY COMMSQL> /

EMPNO ENAME SAL COMM COMMISSION ---------- ---------- ---------- ---------- ---------- 7844 TURNER 1500 0 0 7499 ALLEN 1600 300 300 7521 WARD 1250 500 500

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

361

Page 362: Oracle Queries

ORACLE 7654 MARTIN 1250 1400 1400 7369 SMITH 800 800 7566 JONES 2975 2975 7900 JAMES 950 950 7934 MILLER 1300 1300 7902 FORD 3000 3000 7876 ADAMS 1100 1100 7698 BLAKE 2850 2850 7782 CLARK 2450 2450 7788 SCOTT 3000 3000 7839 KING 5000 5000

14 rows selected.

SQL> INSERT INTO EMP 2 VALUES 3 (1,'PAVAN','MANAGER',7369,'01-DEC-05',NULL,NULL,10);

1 row created.

1 INSERT INTO EMP 2 VALUES 3* (2,'KUMAR','MANAGER',7369,'01-DEC-05',NULL,NULL,10)SQL> /

1 row created.

SQL> SELECT EMPNO,ENAME,SAL,COMM,COALESCE(COMM,SAL,10) "COMMISSION" FROM EMP 2 ORDER BY COMM;

EMPNO ENAME SAL COMM COMMISSION ---------- ---------- ---------- ---------- ---------- 7844 TURNER 1500 0 0 7499 ALLEN 1600 300 300 7521 WARD 1250 500 500 7654 MARTIN 1250 1400 1400 7369 SMITH 800 800 7566 JONES 2975 2975 7900 JAMES 950 950 7934 MILLER 1300 1300 2 KUMAR 10 1 PAVAN 10 7902 FORD 3000 3000 7876 ADAMS 1100 1100 7698 BLAKE 2850 2850 7782 CLARK 2450 2450 7788 SCOTT 3000 3000 7839 KING 5000 5000

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

362

Page 363: Oracle Queries

ORACLE16 rows selected.

CURSOR FOR UPDATE CLAUSE:

YOU MAY WANT TO LOCK ROWS BEFORE UPDATE OR DELETE ROWS.ADD THE FOR UPDATE CLAUSE IN THE CURSOR QUERY TO LOCK THE AFFECTED ROWS WHEN THE CUSOR IS OPENED.

SELECT … FROM …..FOR UPDATE [OF COLUMN_REFERENCE] [NO WAIT];

IN THE SYNTAX:

COLUMN_REFERENCE : IS A COLUMN IN THE TABLE AGAINST WHICH THE QUERY IS PERFORMED.(A LIST OF COLUMNS MAY ALSO BE USED);

NO WAIT: RETURNS AN ORACLE ERROR IF THE ROWS ARE LOCKED BY ANOTHER SESSION. IF YOU WON’T SPECIFY IT WAITS UNTILL THE LOCK RELEASES.

THIS IS USEFUL WHEN YOU WANT TO BASE AN UPDATE ON EXSITING VALUES IN A ROW. IN THAT CASE,YOU MUST MAKE SURE THE ROW IS NOT CHANGED BY ANOTHER USER BEFORE THE UPDATE.

THE FOR UPDATE CLAUSE WILL BE THE LAST CLAUSE IN A SELECT STATEMENT EVEN AFTER ORDER BY.

WHEN EVER YOU COMMIT OR ROLLBACK LOCKS WILL BE RELEASED.

DECLARECUSSOR EMP_CURSOR ISSELECT * FROM EMP WHERE DEPTNO=10 FOR UPDATE OF SAL NOWAIT;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

363

Page 364: Oracle Queries

ORACLE

THE WHERE CURRENT OF CLAUSE:

WHERE CURRENT OF CURSOR;

USE CURSORS TO UPDATE OR DELETE THE CURRENT ROW.

INCLUDE THE FOR UPDATE CLAUSE IN THE CURSOR QUERY TO LOCK THE ROWS FIRST.

USE THE WHERE CURRENT OF CLAUSE TO REFERENCE THE CURRENT ROW FROM AN EXPLICIT CURSOR.

DECLARECURSOR SAL_CURSOR ISSELECT * FROM EMP WHERE DEPTNO =10 FOR UPDATE OF SALARY NOWAIT;BEGINFOR EMP_RECORD IN SAL_CURSORLOOPIF EMP_RECORD.SAL < 5000 THENUPDATE EMPSET SAL = EMP_RECORD.SAL*1.10WHERE CURRENT OF SAL_CURSOR;END IF;END LOOP;END;

CREATING INDEXES:

AN INDEX:

IS A SCHEMA OBJECT.

IS USED BY THE ORACLE SERVER TO SPPED UP THE RETRIEVAL OF ROWS BY

USING A POINTER.

CAN REDUCE DISK I/O BY USING A RAPID PATH ACCESS METHOD TO LOCATE

DATA QUICKLY.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

364

Page 365: Oracle Queries

ORACLE IS INDEPENDENT OF THE TABLE IT INDEXES.

IS USED AND MAINTAINED AUTOMATICALLY BY THE ORACLE SERVER.

AUTOMATICALLY:

A UNQUE INDEX IS CREATED AUTOMATICALLY WHEN YOU DEFINE A PRIMARY KEY OR UNIQUE CONSTRAINT IN A TABLE DEFINITION.

MANUALLY:

USER EXPLICITLY CAN CREATE INDEXES FOR SPEED UP THE ACCESS TO THE ROWS.

CREATING NON-UNIQUE_INDEX:

SQL> CREATE INDEX EMP1_EMPNO_IDX 2 ON EMP1(EMPNO);

Index created.

SQL> SELECT INDEX_NAME,INDEX_TYPE,TABLE_NAME,UNIQUENESS 2 FROM USER_INDEXES;

INDEX_NAME INDEX_TYPE TABLE_NAME UNIQUENES ------------------------------ --------------------------- ------------------------------ --------- EMP1_EMPNO_IDX NORMAL EMP1 NONUNIQUE PK_DEPT NORMAL DEPT UNIQUE PK_EMP ORMAL EMP UNIQUE

CREATING UNIQUE_INDEX:

SQL> CREATE UNIQUE INDEX DEPT1_DEPTNO_IDX 2 ON DEPT1(DEPTNO);

Index created.

SQL> SELECT INDEX_NAME,INDEX_TYPE,TABLE_NAME,UNIQUENESS 2 FROM USER_INDEXES;

INDEX_NAME INDEX_TYPE TABLE_NAME UNIQUENES

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

365

Page 366: Oracle Queries

ORACLE------------------------------ --------------------------- ------------------------------ --------- DEPT1_DEPTNO_IDX NORMAL DEPT1 UNIQUE EMP1_EMPNO_IDX NORMAL EMP1 NONUNIQUE PK_DEPT NORMAL DEPT UNIQUE PK_EMP NORMAL EMP UNIQUE

CREATING COMPOSITE_INDEX:

SQL> CREATE INDEX EMP1_EMPNO_ENAME_IDX 2 ON EMP1(EMPNO,ENAME);

Index created.

SQL> SELECT INDEX_NAME,INDEX_TYPE,TABLE_NAME,UNIQUENESS 2 FROM USER_INDEXES;

INDEX_NAMEINDEX_TYPE TABLE_NAME UNIQUENES ------------------------------ --------------------------- ------------------------------ --------- DEPT1_DEPTNO_IDX NORMAL DEPT1 UNIQUE EMP1_EMPNO_ENAME_IDX NORMAL EMP1 NONUNIQUE EMP1_EMPNO_IDX NORMAL EMP1 NONUNIQUE PK_DEPT NORMAL DEPT UNIQUE PK_EMP NORMAL EMP UNIQUE

CREATING FUNCTIONBASED_INDEX:

SQL> CREATE INDEX DEPT1_FUNDNAME_IDX 2 ON DEPT1(UPPER(DNAME));

Index created.

SQL> SELECT INDEX_NAME,INDEX_TYPE,TABLE_NAME,UNIQUENESS 2 FROM USER_INDEXES;

CREATING BITMAP_INDEX:

SQL> CREATE BITMAP INDEX BITMAP_EMP1_JOB_IDX 2 ON EMP1(JOB);

Index created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

366

Page 367: Oracle Queries

ORACLE

SELECTING COLUMN NAMES ON WHICH INDEXES CREATED:

1 SELECT UC.INDEX_NAME,UC.COLUMN_NAME,UI.UNIQUENESS 2 FROM USER_INDEXES UI,USER_IND_COLUMNS UC 3 WHERE UI.INDEX_NAME=UC.INDEX_NAME 4* AND UC.TABLE_NAME = 'EMP1'SQL> /

INDEX_NAME ------------------------------ COLUMN_NAME ----------------------------------------------------------------------------------------------------------------------------------UNIQUENES --------- EMP1_EMPNO_IDX EMPNO NONUNIQUE EMP1_EMPNO_ENAME_IDX EMPNO NONUNIQUE EMP1_EMPNO_ENAME_IDX ENAME NONUNIQUE BITMAP_EMP1_JOB_IDX JOB NONUNIQUE REMOVING INDEX:

DROP INDEX INDEX_NAME;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

367

Page 368: Oracle Queries

ORACLEWHEN TO CREATE AN INDEX:

A COLUMN CONTAINS A WIDE RANGE OF VALUES.

A COLUMN CONTAINS LARGE NUMBER OF NULL VALES.

ONE OR MORE COLUMNS ARE FREQUENTLY USED TOGETHER

IN A WHERE CLAUSE.

WHEN TO NOT CREATE AN INDEX:

THE TABLE IS SMALL.

THE COLUMNS ARE NOT OFTEN USED AS CONDITION IN THE QUERY.

THE TABLE IS UPDATED FREQUENTLY.

BREAK (SQL * PLUS COMMAND):

TO SUPRESS DUPLICATES WE USE BREAK IN SQL PROMPT.

SQL> BREAK ON JOB

SQL> SELECT * FROM EMP ORDER BY JOB;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7902 FORD 7566 03-DEC-81 3000 20 7369 SMITH CLERK 7902 17-DEC-80 800 20 7876 ADAMS 7788 23-MAY-87 1100 20 7934 MILLER 7782 23-JAN-82 1300 10 7900 JAMES 7698 03-DEC-81 950 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7782 CLARK 7839 09-JUN-81 2450 10

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

368

Page 369: Oracle Queries

ORACLE 7698 BLAKE 7839 01-MAY-81 2850 30 7839 KING PRESIDENT 17-NOV-81 5000 10 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7654 MARTIN 7698 28-SEP-81 1250 1400 30 7844 TURNER 7698 08-SEP-81 1500 0 30 7521 WARD 7698 22-FEB-81 1250 500 30

14 rows selected.

SQL> CLEAR BREAK;breaks cleared

SQL> SELECT * FROM EMP ORDER BY JOB;

EMPNO ENAMEJOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7369 SMITH CLERK 7902 17-DEC-80 800 20 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 7900 JAMES CLERK 7698 03-DEC-81 950 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7839 KING PRESIDENT 17-NOV-81 5000 10 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7844 TURNER SALESMAN7698 08-SEP-81 1500 0 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30

14 rows selected.

VARRAYS:

VARRAYS ARE SIMILAR TO C OR JAVA ARRAYS.ARRAY IS COLLECTION OF SIMILAR DATATYPES.

SQL> CREATE TABLE FRIENDS 2 (NAME VARCHAR2(10), 3 FRIEND_NAME VARCHAR2(10));

Table created.

SQL> ALTER TABLE FRIENDS 2 ADD CONSTRAINT FRIENDS_PK PRIMARY KEY(NAME);

Table altered.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

369

Page 370: Oracle Queries

ORACLESQL> INSERT INTO FRIENDS 2 VALUES 3 ('PAVAN','RAM');

1 row created.

1 INSERT INTO FRIENDS 2 VALUES 3* ('PAVAN','SRIRAM')

SQL> /INSERT INTO FRIENDS*ERROR at line 1:ORA-00001: unique constraint (SCOTT.FRIENDS_PK) violated

SQL> ALTER TABLE FRIENDS 2 DROP CONSTRAINT FRIENDS_PK;

Table altered.

SQL> INSERT INTO FRIENDS 2 VALUES 3 ('PAVAN','SRIRAM');

1 row created.

1 INSERT INTO FRIENDS 2 VALUES 3* ('PAVAN','GAYATRI')SQL> /

1 row created.

1 INSERT INTO FRIENDS 2 VALUES 3* ('PAVAN','SRI DEVI')SQL> /

1 row created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

370

Page 371: Oracle Queries

ORACLE 1 INSERT INTO FRIENDS 2 VALUES 3* ('BALAJI','SRI DEVI')SQL> /

1 row created.

1 INSERT INTO FRIENDS 2 VALUES 3* ('BALAJI','GAYATRI')SQL> /

1 row created.

1 INSERT INTO FRIENDS 2 VALUES 3* ('BALAJI','PRATHIMA')SQL> /

1 row created.

1 INSERT INTO FRIENDS 2 VALUES 3* ('HANUMAN','PRATHIMA')SQL> /

1 row created.

1 INSERT INTO FRIENDS 2 VALUES 3* ('HANUMAN','SRI DEVI')SQL> /

1 row created.

1 INSERT INTO FRIENDS 2 VALUES 3* ('HANUMAN','SUNDARI')SQL> /

1 row created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

371

Page 372: Oracle Queries

ORACLESQL> SELECT * FROM FRIENDS;

NAME FRIEND_NAM ---------- ---------- PAVAN RAM PAVAN SRIRAM PAVAN GAYATRI PAVAN SRI DEVI BALAJI SRI DEVI BALAJI GAYATRI BALAJI PRATHIMA HANUMAN PRATHIMA HANUMAN SRI DEVI HANUMAN SUNDARI

10 rows selected.

CREATION OF VARRAY:

SQL> CREATE OR REPLACE TYPE FRIENDS_NAME AS VARRAY(5) OF VARCHAR2(10); 2 /

Type created.

CREATING TABLE USING VARRAY:

SQL> CREATE TABLE FRIENDS1 2 (NAME VARCHAR2(10), 3 FRIEND_NAME FRIENDS_NAME);

Table created.

SQL> ALTER TABLE FRIENDS1 2 ADD CONSTRAINT FRIENDS1_PK PRIMARY KEY(NAME);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

372

Page 373: Oracle Queries

ORACLETable altered.

DESCRIBING THE TABLE:

SQL> DESC FRIENDS1 Name Null? Type ----------------------------------------------------------------------- -------- ------------------------------------------------ NAME NOT NULL VARCHAR2(10) FRIEND_NAME FRIENDS_NAME

1 SELECT COLUMN_NAME,DATA_TYPE 2 FROM USER_TAB_COLUMNS 3* WHERE TABLE_NAME='FRIENDS1'SQL> /

COLUMN_NAME ------------------------------ DATA_TYPE ---------------------------------------------------------------------------------------------------------- NAME VARCHAR2 FRIEND_NAME FRIENDS_NAME

1 SELECT TYPECODE,ATTRIBUTES 2 FROM USER_TYPES 3* WHERE TYPE_NAME='FRIENDS_NAME'SQL> /

TYPECODE ATTRIBUTES ------------------------------ ---------- COLLECTION 0

SQL> SELECT COLL_TYPE,ELEM_TYPE_OWNER,ELEM_TYPE_NAME,UPPER_BOUND,LENGTH 2 FROM USER_COLL_TYPES 3 WHERE TYPE_NAME='FRIENDS_NAME';

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

373

Page 374: Oracle Queries

ORACLECOLL_TYPE ELEM_TYPE_OWNER ELEM_TYPE_NAME UPPER_BOUND LENGTH ------------------------------ ------------------------------ ------------------------------ ----------- ---------- VARYING ARRAY VARCHAR2 5 10

INSERTING VALUES IN TO THE TABLE:

1 INSERT INTO FRIENDS1 2 VALUES 3* ('PAVAN',FRIENDS_NAME('RAM','SRIRAM','GAYATRI','SRI DEVI')) 4 /

1 row created.

1 INSERT INTO FRIENDS1 2 VALUES 3* ('BALAJI',FRIENDS_NAME('PRATHIMA','GAYATRI','SRI DEVI')) 4 /

1 row created.

1 INSERT INTO FRIENDS1 2 VALUES 3* ('HANUMAN',FRIENDS_NAME('PRATHIMA','GAYATRI','SUNDARI'))SQL> /

1 row created.

SELECTING VALUES FROM THE TABLE:

SQL> SELECT * FROM FRIENDS1;

NAME ---------- FRIEND_NAME ----------------------------------------------------------------------------------------------------------------------------------PAVAN FRIENDS_NAME('RAM', 'SRIRAM', 'GAYATRI', 'SRI DEVI') BALAJI FRIENDS_NAME('PRATHIMA', 'GAYATRI', 'SRI DEVI')

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

374

Page 375: Oracle Queries

ORACLE HANUMAN FRIENDS_NAME('PRATHIMA', 'GAYATRI', 'SUNDARI') SELECTING VALUES FROM THE TABLE USING CURSOR: 1 DECLARE 2 CURSOR C IS SELECT * FROM FRIENDS1; 3 BEGIN 4 FOR C_REC IN C LOOP 5 DBMS_OUTPUT.PUT_LINE('NAME: ' ||C_REC.NAME); 6 FOR I IN 1.. C_REC.FRIEND_NAME.COUNT LOOP 7 DBMS_OUTPUT.PUT_LINE(C_REC.FRIEND_NAME(I)); 8 END LOOP; 9 END LOOP; 10* END;SQL> /

PL/SQL procedure successfully completed.

SQL> SET SERVEROUTPUT ONSQL> /NAME: PAVAN RAM SRIRAM GAYATRI SRI DEVI NAME: BALAJI PRATHIMA GAYATRI SRI DEVI NAME: HANUMAN PRATHIMA GAYATRI SUNDARI

PL/SQL procedure successfully completed.

1 SELECT F.NAME,N.* 2* FROM FRIENDS1 F, TABLE(F.FRIEND_NAME) N 3 /

NAME COLUMN_VAL ---------- ---------- PAVAN RAM PAVAN SRIRAM PAVAN GAYATRI PAVAN SRI DEVI BALAJI PRATHIMA

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

375

Page 376: Oracle Queries

ORACLEBALAJI GAYATRI BALAJI SRI DEVI HANUMAN PRATHIMA HANUMAN GAYATRI HANUMAN SUNDARI

10 rows selected.

CREATING NUMBER VARRAY:

1 DECLARE 2 TYPE NUMBERS IS VARRAY(20) OF NUMBER(3); 3 V_LIST1 NUMBERS := NUMBERS(1,2,3,4,5); 4 V_LIST2 NUMBERS; 5 BEGIN 6 FOR I IN 1..V_LIST1.COUNT LOOP 7 DBMS_OUTPUT.PUT_LINE(V_LIST1(I)); 8 END LOOP; 9 DBMS_OUTPUT.PUT_LINE('COUNT:'||V_LIST1.COUNT); 10* END;SQL> /1 2 3 4 5 COUNT:5

PL/SQL procedure successfully completed.

1 DECLARE 2 TYPE NUMBERS IS VARRAY(5) OF NUMBER(3); 3 V_LIST1 NUMBERS := NUMBERS(1,2,3,4,5); 4 V_LIST2 NUMBERS; 5 BEGIN 6 FOR I IN 1..V_LIST1.COUNT LOOP 7 DBMS_OUTPUT.PUT_LINE(V_LIST1(I)); 8 END LOOP; 9 DBMS_OUTPUT.PUT_LINE('COUNT:'||V_LIST1.COUNT); 10* END;SQL> /1 2 3 4 5 COUNT:5

PL/SQL procedure successfully completed.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

376

Page 377: Oracle Queries

ORACLE 1 DECLARE 2 TYPE NUMBERS IS VARRAY(5) OF NUMBER(3); 3 V_LIST1 NUMBERS := NUMBERS(1,2,3,4,5); 4 BEGIN 5 FOR I IN 1..V_LIST1.COUNT LOOP 6 DBMS_OUTPUT.PUT_LINE(V_LIST1(I)); 7 END LOOP; 8 DBMS_OUTPUT.PUT_LINE('COUNT:'||V_LIST1.COUNT); 9* END; 10 /1 2 3 4 5 COUNT:5

PL/SQL procedure successfully completed.

1 DECLARE 2 TYPE NUMBERS IS VARRAY(6) OF NUMBER(3); 3 V_LIST1 NUMBERS := NUMBERS(1,2,3,4,5); 4 BEGIN 5 FOR I IN 1..V_LIST1.COUNT LOOP 6 DBMS_OUTPUT.PUT_LINE(V_LIST1(I)); 7 END LOOP; 8 DBMS_OUTPUT.PUT_LINE('COUNT:'||V_LIST1.COUNT); 9 V_LIST1.EXTEND; 10 V_LIST1(6):=6; 11 DBMS_OUTPUT.PUT_LINE(V_LIST1(6)); 12* END;SQL> /1 2 3 4 5 COUNT:5 6

PL/SQL procedure successfully completed.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

377

Page 378: Oracle Queries

ORACLE 1 DECLARE 2 TYPE NUMBERS IS VARRAY(6) OF NUMBER(3); 3 V_LIST1 NUMBERS := NUMBERS(1,2,3,4,5); 4 BEGIN 5 FOR I IN 1..V_LIST1.COUNT LOOP 6 DBMS_OUTPUT.PUT_LINE(V_LIST1(I)); 7 END LOOP; 8 DBMS_OUTPUT.PUT_LINE('COUNT:'||V_LIST1.COUNT); 9 V_LIST1.EXTEND; 10 V_LIST1(6):=6; 11 V_LIST1.EXTEND; 12 DBMS_OUTPUT.PUT_LINE(V_LIST1(6)); 13* END;SQL> /1 2 3 4 5 COUNT:5 DECLARE*ERROR at line 1:ORA-06532: Subscript outside of limit ORA-06512: at line 11

1 DECLARE 2 TYPE NUMBERS IS VARRAY(6) OF NUMBER(3); 3 V_LIST1 NUMBERS := NUMBERS(1,2,3,4,5); 4 BEGIN 5 FOR I IN 1..V_LIST1.COUNT LOOP 6 DBMS_OUTPUT.PUT_LINE(V_LIST1(I)); 7 END LOOP; 8 DBMS_OUTPUT.PUT_LINE('COUNT:'||V_LIST1.COUNT); 9 V_LIST1.EXTEND; 10 V_LIST1(6):=6; 11 DBMS_OUTPUT.PUT_LINE(V_LIST1(6)); 12 DBMS_OUTPUT.PUT_LINE('LIMIT:'||V_LIST1.COUNT); 13* END; 14 /1 2 3 4 5 COUNT:5 6 LIMIT:6

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

378

Page 379: Oracle Queries

ORACLEPL/SQL procedure successfully completed.

1 DECLARE 2 TYPE NUMBERS IS VARRAY(6) OF NUMBER(3); 3 V_LIST1 NUMBERS := NUMBERS(1,2,3,4,5); 4 BEGIN 5 FOR I IN 1..V_LIST1.COUNT LOOP 6 DBMS_OUTPUT.PUT_LINE(V_LIST1(I)); 7 END LOOP; 8 DBMS_OUTPUT.PUT_LINE('COUNT:'||V_LIST1.COUNT); 9 V_LIST1.EXTEND; 10 V_LIST1(6):=6; 11 DBMS_OUTPUT.PUT_LINE(V_LIST1(6)); 12 DBMS_OUTPUT.PUT_LINE('LIMIT:'||V_LIST1.COUNT); 13 DBMS_OUTPUT.PUT_LINE('COUNT:'||V_LIST1.COUNT); 14* END;SQL> /1 2 3 4 5 COUNT:5 6 LIMIT:6 COUNT:6

PL/SQL procedure successfully completed.

1 DECLARE 2 TYPE NUMBERS IS VARRAY(6) OF NUMBER(3); 3 V_LIST1 NUMBERS := NUMBERS(1,2,3,4,5); 4 BEGIN 5 FOR I IN 1..V_LIST1.COUNT LOOP 6 DBMS_OUTPUT.PUT_LINE(V_LIST1(I)); 7 END LOOP; 8 DBMS_OUTPUT.PUT_LINE('COUNT:'||V_LIST1.COUNT); 9 V_LIST1.EXTEND; 10 V_LIST1(6):=6; 11 DBMS_OUTPUT.PUT_LINE(V_LIST1(6)); 12 DBMS_OUTPUT.PUT_LINE('LIMIT:'||V_LIST1.COUNT); 13 DBMS_OUTPUT.PUT_LINE('COUNT:'||V_LIST1.COUNT); 14 DBMS_OUTPUT.PUT_LINE('FIRST:'||V_LIST1.FIRST); 15 DBMS_OUTPUT.PUT_LINE('LAST:'||V_LIST1.LAST); 16 DBMS_OUTPUT.PUT_LINE('PRIOR:'||V_LIST1.PRIOR(2)); 17 DBMS_OUTPUT.PUT_LINE('NEXT:'||V_LIST1.NEXT(2));

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

379

Page 380: Oracle Queries

ORACLE 18* END; 19 /1 2 3 4 5 COUNT:5 6 LIMIT:6 COUNT:6 FIRST:1 LAST:6 PRIOR:1 NEXT:3

PL/SQL procedure successfully completed.

1 DECLARE 2 TYPE NUMBERS IS VARRAY(6) OF NUMBER(3); 3 V_LIST1 NUMBERS := NUMBERS(1,2,3,4,5); 4 BEGIN 5 FOR I IN 1..V_LIST1.COUNT LOOP 6 DBMS_OUTPUT.PUT_LINE(V_LIST1(I)); 7 END LOOP; 8 DBMS_OUTPUT.PUT_LINE('COUNT:'||V_LIST1.COUNT); 9 V_LIST1.EXTEND; 10 V_LIST1(6):=6; 11 DBMS_OUTPUT.PUT_LINE(V_LIST1(6)); 12 DBMS_OUTPUT.PUT_LINE('LIMIT:'||V_LIST1.COUNT); 13 DBMS_OUTPUT.PUT_LINE('COUNT:'||V_LIST1.COUNT); 14 DBMS_OUTPUT.PUT_LINE('FIRST:'||V_LIST1.FIRST); 15 DBMS_OUTPUT.PUT_LINE('LAST:'||V_LIST1.LAST); 16 DBMS_OUTPUT.PUT_LINE('PRIOR:'||V_LIST1.PRIOR(2)); 17 DBMS_OUTPUT.PUT_LINE('NEXT:'||V_LIST1.NEXT(2)); 18* END;SQL> /1 2 3 4 5 COUNT:5 6 LIMIT:6 COUNT:6 FIRST:1 LAST:6 PRIOR:1

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

380

Page 381: Oracle Queries

ORACLENEXT:3

PL/SQL procedure successfully completed.

NESTED TABLES:

CREATING FRIEND TYPE:

1 CREATE OR REPLACE TYPE FRIEND_TY AS OBJECT 2 (NAME VARCHAR2(10), 3 CITY VARCHAR2(10), 4 STATE VARCHAR2(10), 5* COUNTRY VARCHAR2(10));SQL> /

Type created.

CONVERTING FRIEND_TY AS NESTED TABLE:

THE FROEND_TY CONTAINS RECORD FOR EACH FRIEND. TO USE THIS DATA TYPE AS THE BASIS FOR A NESTED TABLE,YOU NEED TO CREATE NEW DATA TYPE.

SQL> CREATE TYPE FRIEND_NT AS TABLE OF FRIEND_TY; 2 /

Type created.

AS TABLE OF CLAUSE OF THIS CRETE TYPE COMMAND TELLS ORACLE THAT YOU WILL BE USING THIS TYPE AS THE BASIS FOR A NESTED TABLE.

THE FRIEND_NT STORES MULTIPLE ROWS.

CREATING TABLE USING NESTED TABLE:

SQL> CREATE TABLE FRIENDS_NESTED 2 (NAME VARCHAR2(10), 3 FRIENDS FRIEND_NT) 4 NESTED TABLE FRIENDS STORE AS FRIEND_NT_TAB;

Table created.

FIRST COLUMN IS NAME,THE SECOND COLUMN IS A COLUMN NAMED FRIENDS WHOSE DEFINITION IS THE NESTED TABLE FRIEND_NT.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

381

Page 382: Oracle Queries

ORACLEWHEN CREATING THE TABLE THAT INCLUDES A NESTED TABLE,YOU MUST SPECIFY THE NAME OF THE TABLE THAT WILL BE USED TO STORE THE NESTED TABLE’S DATA.THAT IS ,THE DATA FOR THE NESTED TABLE IS NOT STORED “INLINE” WITH THE REST OF THE TABLE’S DATA.INSTEAD,IT IS STORED APART FROM THE MAIN TABLE.THE DATA IN THE FRIENDS COLUMN WILL BE STORED IN ONE TABLE,AND THE DATA IN THE NAME COLUMN WILL BE STORED IN A SEPARATE TABLE.

ORACLE WILL MAINTAIN POINTERS BETWEEN THE TABLES.HERE THE OUT_OF_LINE DATA FOR THE NESTED TABLE IS STORED IN A TABLE NAMED FRIEND_NT_TAB.

INSERTING INTO NESTED TABLE:

1 INSERT INTO FRIENDS_NESTED 2 VALUES 3 ('PAVAN',FRIEND_NT 4 (FRIEND_TY('GAYATRI','HYD','AP','INDIA'), 5 FRIEND_TY('SRIDEVI','HYD','AP','INDIA'), 6* FRIEND_TY('PRATHIMA','HYD','AP','INDIA')))SQL> /

1 row created.

1 INSERT INTO FRIENDS_NESTED 2 VALUES 3 ('KUMAR',FRIEND_NT 4 (FRIEND_TY('GAYATRI','HYD','AP','INDIA'), 5 FRIEND_TY('SRIDEVI','HYD','AP','INDIA'), 6* FRIEND_TY('PRATHIMA','HYD','AP','INDIA'))) 7 /

1 row created.

1 INSERT INTO FRIENDS_NESTED 2 VALUES 3 ('SRIRAM',FRIEND_NT 4 (FRIEND_TY('SHILPA','HYD','AP','INDIA'), 5 FRIEND_TY('SRIDEVI','HYD','AP','INDIA'), 6* FRIEND_TY('LALITHA','HYD','AP','INDIA'))) 7 /

1 row created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

382

Page 383: Oracle Queries

ORACLE 1 INSERT INTO FRIENDS_NESTED 2 VALUES 3 ('RAVIKANTH',FRIEND_NT 4 (FRIEND_TY('USGIRL','HYD','AP','INDIA'), 5 FRIEND_TY('SRIDEVI','HYD','AP','INDIA'), 6* FRIEND_TY('LALITHA','HYD','AP','INDIA'))) 7 /

1 row created.

DESCRIBING THE NESTED TABLE:

SQL> SET DESCRIBE DEPTH 2

SQL> DESC FRIENDS_NESTED Name Null? Type ----------------------------------------------------------------------- -------- ------------------------------------------------ NAME VARCHAR2(10) FRIENDS FRIEND_NT NAME VARCHAR2(10) CITY VARCHAR2(10) STATE VARCHAR2(10) COUNTRY VARCHAR2(10)

SELECTING FROM NESTED TABLE:

SQL> SELECT * FROM FRIENDS_NESTED;

NAME ---------- FRIENDS(NAME, CITY, STATE, COUNTRY) ----------------------------------------------------------------------------------------------------------------------------------PAVAN FRIEND_NT(FRIEND_TY('GAYATRI', 'HYD', 'AP', 'INDIA'), FRIEND_TY('SRIDEVI', 'HYD', 'AP', 'INDIA'), FRIEND_TY('PRATHIMA', 'HYD', 'AP', 'INDIA')) KUMAR FRIEND_NT(FRIEND_TY('GAYATRI', 'HYD', 'AP', 'INDIA'), FRIEND_TY('SRIDEVI', 'HYD', 'AP', 'INDIA'), FRIEND_TY('PRATHIMA', 'HYD', 'AP', 'INDIA'))

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

383

Page 384: Oracle Queries

ORACLE SRIRAM FRIEND_NT(FRIEND_TY('SHILPA', 'HYD', 'AP', 'INDIA'), FRIEND_TY('SRIDEVI', 'HYD', 'AP', 'INDIA'), FRIEND_TY('LALITHA', 'HYD', 'AP', 'INDIA')) RAVIKANTH FRIEND_NT(FRIEND_TY('USGIRL', 'HYD', 'AP', 'INDIA'), FRIEND_TY('SRIDEVI', 'HYD', 'AP', 'INDIA'), FRIEND_TY('LALITHA', 'HYD', 'AP', 'INDIA'))

1 SELECT NAME,N.NAME,N.CITY,N.STATE,N.COUNTRY FROM FRIENDS_NESTED, 2* TABLE(FRIENDS_NESTED.FRIENDS) NSQL> /SELECT NAME,N.NAME,N.CITY,N.STATE,N.COUNTRY FROM FRIENDS_NESTED, *ERROR at line 1:ORA-00918: column ambiguously defined

1 SELECT FRIENDS_NESTED.NAME,N.NAME,N.CITY,N.STATE,N.COUNTRY FROM FRIENDS_NESTED, 2* TABLE(FRIENDS_NESTED.FRIENDS) NSQL> /

NAME NAME CITY STATE COUNTRY ---------- ---------- ---------- ---------- ---------- PAVAN GAYATRI HYD AP INDIA PAVAN SRIDEVI HYD AP INDIA PAVAN PRATHIMA HYD AP INDIA KUMAR GAYATRI HYD AP INDIA KUMAR SRIDEVI HYD AP INDIA KUMAR PRATHIMA HYD AP INDIA SRIRAM SHILPA HYD AP INDIA SRIRAM SRIDEVI HYD AP INDIA SRIRAM LALITHA HYD AP INDIA RAVIKANTH USGIRL HYD AP INDIA RAVIKANTH SRIDEVI HYD AP INDIA RAVIKANTH LALITHA HYD AP INDIA

12 rows selected.

1 SELECT FRIENDS_NESTED.NAME,N.NAME,N.CITY,N.STATE,N.COUNTRY FROM FRIENDS_NESTED,

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

384

Page 385: Oracle Queries

ORACLE 2 TABLE(FRIENDS_NESTED.FRIENDS) N 3* WHERE FRIENDS_NESTED.NAME='PAVAN' 4 /

NAME NAME CITY STATE COUNTRY ---------- ---------- ---------- ---------- ---------- PAVAN GAYATRI HYD AP INDIA PAVAN SRIDEVI HYD AP INDIA PAVAN PRATHIMAHYD AP INDIA

1 SELECT FRIENDS_NESTED.NAME,N.NAME,N.CITY,N.STATE,N.COUNTRY FROM FRIENDS_NESTED, 2 TABLE(FRIENDS_NESTED.FRIENDS) N 3* WHERE N.NAME='SRIDEVI' 4 /

NAME NAME CITY STATE COUNTRY ---------- ---------- ---------- ---------- ---------- PAVAN SRIDEVI HYD AP INDIA KUMAR SRIDEVI HYD AP INDIA SRIRAM SRIDEVI HYD AP INDIA RAVIKANTH SRIDEVI HYD AP INDIA

INSERTING ONLY TO NESTED TABLE FOR ONE RECORD:

SQL> INSERT INTO TABLE (SELECT FRIENDS FROM FRIENDS_NESTED 2 WHERE NAME='PAVAN') 3 VALUES 4 (FRIEND_TY('NEELIMA','WALES','CARDIF','LONDON'));

1 row created.

SQL> SELECT FRIENDS_NESTED.NAME,N.NAME,N.CITY,N.STATE,N.COUNTRY FROM FRIENDS_NESTED, 2 TABLE(FRIENDS_NESTED.FRIENDS) N 3 WHERE FRIENDS_NESTED.NAME='PAVAN';

NAME NAME CITY STATE COUNTRY ---------- ---------- ---------- ---------- ---------- PAVAN GAYATRI HYD AP INDIA PAVAN SRIDEVI HYD AP INDIA PAVAN PRATHIMA HYD AP INDIA PAVAN NEELIMA WALES CARDIF LONDON

UPDATING NESTED TABLE:

SQL> UPDATE TABLE (SELECT FRIENDS FROM FRIENDS_NESTED 2 WHERE NAME='PAVAN') N 3 SET N.COUNTRY='USA'

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

385

Page 386: Oracle Queries

ORACLE 4 WHERE N.NAME='SRIDEVI';

1 row updated.

SQL> SELECT FRIENDS_NESTED.NAME,N.NAME,N.CITY,N.STATE,N.COUNTRY FROM FRIENDS_NESTED, 2 TABLE(FRIENDS_NESTED.FRIENDS) N 3 WHERE FRIENDS_NESTED.NAME='PAVAN';

NAME NAME CITY STATE COUNTRY ---------- ---------- ---------- ---------- ---------- PAVAN GAYATRI HYD AP INDIA PAVAN SRIDEVI HYD AP USA PAVAN PRATHIMA HYD AP INDIA PAVAN NEELIMA WALES CARDIF LONDON DELETING FROM NESTED TABLE:

1 DELETE TABLE(SELECT FRIENDS FROM FRIENDS_NESTED 2 WHERE NAME='PAVAN') N 3* WHERE N.NAME='PRATHIMA'SQL> /

1 row deleted.

SQL> SELECT FRIENDS_NESTED.NAME,N.NAME,N.CITY,N.STATE,N.COUNTRY FROM FRIENDS_NESTED, 2 TABLE(FRIENDS_NESTED.FRIENDS) N 3 WHERE FRIENDS_NESTED.NAME='PAVAN';

NAME NAME CITY STATE COUNTRY ---------- ---------- ---------- ---------- ---------- PAVAN GAYATRI HYD AP INDIA PAVAN SRIDEVI HYD AP USA PAVAN NEELIMA WALES CARDIF LONDON

CREATING NUMBER NESTED AND VARRAYS:

SQL> CREATE OR REPLACE TYPE NUMTAB AS TABLE OF NUMBER; 2 /

Type created.

SQL> CREATE OR REPLACE TYPE NUMVAR AS VARRAY(25) OF NUMBER; 2 /

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

386

Page 387: Oracle Queries

ORACLEType created.

COUNT AND EXISTS:

COUNT GIVES NO OF ELEMENTS.

SQL> DECLARE 2 V_NESTEDTABLE NUMTAB :=NUMTAB(-7,14.3,3.1415,NULL,0); 3 V_COUNT NUMBER(2):=1; 4 BEGIN 5 LOOP 6 IF V_NESTEDTABLE.EXISTS(V_COUNT) THEN 7 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||V_COUNT||'):' || 8 V_NESTEDTABLE(V_COUNT)); 9 V_COUNT :=V_COUNT+1; 10 ELSE 11 EXIT; 12 END IF; 13 END LOOP; 14 END; 15 /

PL/SQL procedure successfully completed.

SQL> SET SERVEROUTPUT ONSQL> /

V_NESTEDTABLE(1):-7 V_NESTEDTABLE(2):14.3 V_NESTEDTABLE(3):3.1415 V_NESTEDTABLE(4): V_NESTEDTABLE(5):0

PL/SQL procedure successfully completed.

1 DECLARE 2 V_NESTEDTABLE NUMTAB :=NUMTAB(1,2,3); 3 V_VARRY NUMVAR := NUMVAR(-1,-2,-3,-4); 4 V_COUNT NUMBER(2):=1; 5 BEGIN 6 DBMS_OUTPUT.PUT_LINE('NESTED TABLE COUNT '|| 7 V_NESTEDTABLE.COUNT); 8 DBMS_OUTPUT.PUT_LINE('VARRAY COUNT '|| 9 V_VARRY.COUNT); 10* END;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

387

Page 388: Oracle Queries

ORACLE 11 /NESTED TABLE COUNT 3 VARRAY COUNT 4

PL/SQL procedure successfully completed.

LIMIT:

LIMIT WILL GIVE NO OF ELEMENTS AT TIME OF DECLARATION.

1 DECLARE 2 V_NESTEDTABLE NUMTAB :=NUMTAB(1,2,3); 3 V_VARRY NUMVAR := NUMVAR(-1,-2,-3,-4); 4 V_COUNT NUMBER(2):=1; 5 BEGIN 6 DBMS_OUTPUT.PUT_LINE('NESTED TABLE COUNT '|| 7 V_NESTEDTABLE.COUNT); 8 DBMS_OUTPUT.PUT_LINE('NESTED TABLE LIMIT '|| 9 V_NESTEDTABLE.LIMIT); 10 DBMS_OUTPUT.PUT_LINE('VARRAY COUNT '|| 11 V_VARRY.COUNT); 12 DBMS_OUTPUT.PUT_LINE('VARRAY LIMIT '|| 13 V_VARRY.LIMIT); 14* END; 15 /NESTED TABLE COUNT 3 NESTED TABLE LIMIT VARRAY COUNT 4 VARRAY LIMIT 25

PL/SQL procedure successfully completed.

FIRST,LAST,NEXT,PRIOR:

1 DECLARE 2 V_NESTEDTABLE NUMTAB :=NUMTAB(1,2,3); 3 V_VARRY NUMVAR := NUMVAR(-1,-2,-3,-4); 4 V_COUNT NUMBER(2):=1; 5 BEGIN 6 DBMS_OUTPUT.PUT_LINE('NESTED TABLE FIRST '|| 7 V_NESTEDTABLE.FIRST); 8 DBMS_OUTPUT.PUT_LINE('NESTED TABLE LAST '|| 9 V_NESTEDTABLE.LAST); 10 DBMS_OUTPUT.PUT_LINE('NESTED TABLE PRIOR OF 2 '|| 11 V_NESTEDTABLE.PRIOR(2)); 12 DBMS_OUTPUT.PUT_LINE('NESTED TABLE NEXT OF 2 '|| 13 V_NESTEDTABLE.NEXT(2));

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

388

Page 389: Oracle Queries

ORACLE 14 DBMS_OUTPUT.PUT_LINE('VARRAY FIRST '|| 15 V_VARRY.FIRST); 16 DBMS_OUTPUT.PUT_LINE('VARRAY LAST '|| 17 V_VARRY.LAST); 18 DBMS_OUTPUT.PUT_LINE('VARRAY PRIOR OF 2 '|| 19 V_VARRY.PRIOR(2)); 20 DBMS_OUTPUT.PUT_LINE('VARRAY NEXT OF 2 '|| 21 V_VARRY.NEXT(2)); 22* END; 23 /NESTED TABLE FIRST 1 NESTED TABLE LAST 3 NESTED TABLE PRIOR OF 2 1 NESTED TABLE NEXT OF 2 3 VARRAY FIRST 1 VARRAY LAST 4 VARRAY PRIOR OF 2 1 VARRAY NEXT OF 2 3

PL/SQL procedure successfully completed.

EXTEND:

1 DECLARE 2 V_NESTEDTABLE NUMTAB :=NUMTAB(1,2,3,4,5);

3 V_VARRY NUMVAR := NUMVAR(1,2,3,4,5);

4 BEGIN

5 BEGIN

6 V_NESTEDTABLE(26):=7;

7 EXCEPTION 8 WHEN SUBSCRIPT_BEYOND_COUNT THEN 9 DBMS_OUTPUT.PUT_LINE(SQLCODE||SQLERRM); 10 END;

11 V_NESTEDTABLE.EXTEND(30);

12 V_NESTEDTABLE(26):=7;

13 BEGIN 14 V_VARRY.EXTEND(30); 15 EXCEPTION 16 WHEN SUBSCRIPT_OUTSIDE_LIMIT THEN 17 DBMS_OUTPUT.PUT_LINE(SQLCODE||SQLERRM); 18 END;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

389

Page 390: Oracle Queries

ORACLE 19 V_VARRY.EXTEND(20); 20 V_VARRY(25):=25; 21* END;SQL> /-6533ORA-06533: Subscript beyond count -6532ORA-06532: Subscript outside of limit

PL/SQL procedure successfully completed.

1 DECLARE 2 V_NESTEDTABLE NUMTAB :=NUMTAB(1,2,3,4,5); 3 V_VARRY NUMVAR := NUMVAR(1,2,3,4,5); 4 BEGIN 5 FOR C IN 1..V_NESTEDTABLE.COUNT LOOP 6 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 7 V_NESTEDTABLE(C)); 8 END LOOP; 9* END; 10 /V_NESTEDTABLE(1)1 V_NESTEDTABLE(2)2 V_NESTEDTABLE(3)3 V_NESTEDTABLE(4)4 V_NESTEDTABLE(5)5

PL/SQL procedure successfully completed.

1 DECLARE 2 V_NESTEDTABLE NUMTAB :=NUMTAB(10,20,30,40,50); 3 V_VARRY NUMVAR := NUMVAR(1,2,3,4,5); 4 BEGIN 5 FOR C IN 1..V_NESTEDTABLE.COUNT LOOP 6 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'||

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

390

Page 391: Oracle Queries

ORACLE 7 V_NESTEDTABLE(C)); 8 END LOOP; 9* END;SQL> /V_NESTEDTABLE(1)10 V_NESTEDTABLE(2)20 V_NESTEDTABLE(3)30 V_NESTEDTABLE(4)40 V_NESTEDTABLE(5)50

PL/SQL procedure successfully completed.

TRIM:

TRIM WILL REMOVE ELEMENTS FROM END.

1 DECLARE 2 V_NESTEDTABLE NUMTAB :=NUMTAB(10,20,30,40,50); 3 V_VARRY NUMVAR := NUMVAR(1,2,3,4,5); 4 BEGIN 5 FOR C IN 1..V_NESTEDTABLE.COUNT LOOP 6 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 7 V_NESTEDTABLE(C)); 8 END LOOP; 9 DBMS_OUTPUT.PUT_LINE('OUTPUT AFTER TRIM'); 10 V_NESTEDTABLE.TRIM; 11 FOR C IN 1..V_NESTEDTABLE.COUNT LOOP 12 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 13 V_NESTEDTABLE(C)); 14 END LOOP; 15* END; 16 /V_NESTEDTABLE(1)10 V_NESTEDTABLE(2)20 V_NESTEDTABLE(3)30 V_NESTEDTABLE(4)40 V_NESTEDTABLE(5)50 OUTPUT AFTER TRIM V_NESTEDTABLE(1)10 V_NESTEDTABLE(2)20 V_NESTEDTABLE(3)30 V_NESTEDTABLE(4)40

PL/SQL procedure successfully completed.

1 DECLARE 2 V_NESTEDTABLE NUMTAB :=NUMTAB(10,20,30,40,50);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

391

Page 392: Oracle Queries

ORACLE 3 V_VARRY NUMVAR := NUMVAR(1,2,3,4,5); 4 BEGIN 5 FOR C IN 1..V_NESTEDTABLE.COUNT LOOP 6 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 7 V_NESTEDTABLE(C)); 8 END LOOP; 9 DBMS_OUTPUT.PUT_LINE('OUTPUT AFTER TRIM.'); 10 V_NESTEDTABLE.TRIM; 11 FOR C IN 1..V_NESTEDTABLE.COUNT LOOP 12 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 13 V_NESTEDTABLE(C)); 14 END LOOP; 15 DBMS_OUTPUT.PUT_LINE('OUTPUT AFTER TRIM(3)'); 16 V_NESTEDTABLE.TRIM(3); 17 FOR C IN 1..V_NESTEDTABLE.COUNT LOOP 18 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 19 V_NESTEDTABLE(C)); 20 END LOOP; 21* END;SQL> /V_NESTEDTABLE(1)10 V_NESTEDTABLE(2)20 V_NESTEDTABLE(3)30 V_NESTEDTABLE(4)40 V_NESTEDTABLE(5)50 OUTPUT AFTER TRIM. V_NESTEDTABLE(1)10 V_NESTEDTABLE(2)20 V_NESTEDTABLE(3)30 V_NESTEDTABLE(4)40 OUTPUT AFTER TRIM(3) V_NESTEDTABLE(1)10

PL/SQL procedure successfully completed.

DELETE:

1 DECLARE 2 V_NESTEDTABLE NUMTAB :=NUMTAB(10,20,30,40,50); 3 BEGIN 4 FOR C IN 1..V_NESTEDTABLE.COUNT LOOP 5 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 6 V_NESTEDTABLE(C)); 7 END LOOP; 8 DBMS_OUTPUT.PUT_LINE('OUTPUT AFTER DELETE.'); 9 V_NESTEDTABLE.DELETE; 10 FOR C IN 1..V_NESTEDTABLE.COUNT LOOP 11 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 12 V_NESTEDTABLE(C)); 13 END LOOP;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

392

Page 393: Oracle Queries

ORACLE 14* END; 15 /V_NESTEDTABLE(1)10 V_NESTEDTABLE(2)20 V_NESTEDTABLE(3)30 V_NESTEDTABLE(4)40 V_NESTEDTABLE(5)50 OUTPUT AFTER DELETE.

PL/SQL procedure successfully completed.

1 DECLARE 2 V_NESTEDTABLE NUMTAB :=NUMTAB(10,20,30,40,50); 3 BEGIN 4 FOR C IN 1..V_NESTEDTABLE.COUNT LOOP 5 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 6 V_NESTEDTABLE(C)); 7 END LOOP; 8 DBMS_OUTPUT.PUT_LINE('OUTPUT AFTER DELETE(2).'); 9 V_NESTEDTABLE.DELETE(2); 10 FOR C IN 1..V_NESTEDTABLE.COUNT LOOP 11 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 12 V_NESTEDTABLE(C)); 13 END LOOP; 14* END;SQL> /V_NESTEDTABLE(1)10 V_NESTEDTABLE(2)20 V_NESTEDTABLE(3)30 V_NESTEDTABLE(4)40 V_NESTEDTABLE(5)50 OUTPUT AFTER DELETE(2). V_NESTEDTABLE(1)10 DECLARE*ERROR at line 1:ORA-01403: no data found ORA-06512: at line 11

1 DECLARE 2 V_NESTEDTABLE NUMTAB :=NUMTAB(10,20,30,40,50); 3 BEGIN 4 FOR C IN 1..V_NESTEDTABLE.COUNT LOOP 5 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 6 V_NESTEDTABLE(C)); 7 END LOOP; 8 DBMS_OUTPUT.PUT_LINE('OUTPUT AFTER DELETE(2,4).'); 9 V_NESTEDTABLE.DELETE(2,4);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

393

Page 394: Oracle Queries

ORACLE 10 FOR C IN 1..V_NESTEDTABLE.COUNT LOOP 11 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 12 V_NESTEDTABLE(C)); 13 END LOOP; 14* END; 15 /

V_NESTEDTABLE(1)10 V_NESTEDTABLE(2)20 V_NESTEDTABLE(3)30 V_NESTEDTABLE(4)40 V_NESTEDTABLE(5)50 OUTPUT AFTER DELETE(2,4). V_NESTEDTABLE(1)10 DECLARE*ERROR at line 1:ORA-01403: no data found ORA-06512: at line 11

1 DECLARE 2 V_NESTEDTABLE NUMTAB :=NUMTAB(10,20,30,40,50,60,70,80); 3 BEGIN 4 FOR C IN 1..V_NESTEDTABLE.COUNT LOOP 5 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 6 V_NESTEDTABLE(C)); 7 END LOOP; 8 DBMS_OUTPUT.PUT_LINE('OUTPUT AFTER DELETE(2,4).'); 9 V_NESTEDTABLE.DELETE(2,4); 10 FOR C IN 1..V_NESTEDTABLE.COUNT LOOP 11 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 12 V_NESTEDTABLE(C)); 13 END LOOP; 14 EXCEPTION 15 WHEN NO_DATA_FOUND THEN 16 FOR C IN 5..V_NESTEDTABLE.COUNT LOOP 17 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 18 V_NESTEDTABLE(C)); 19 END LOOP; 20* END;SQL> /V_NESTEDTABLE(1)10 V_NESTEDTABLE(2)20 V_NESTEDTABLE(3)30 V_NESTEDTABLE(4)40 V_NESTEDTABLE(5)50 V_NESTEDTABLE(6)60 V_NESTEDTABLE(7)70 V_NESTEDTABLE(8)80

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

394

Page 395: Oracle Queries

ORACLEOUTPUT AFTER DELETE(2,4). V_NESTEDTABLE(1)10 V_NESTEDTABLE(5)50

PL/SQL procedure successfully completed.

1 DECLARE 2 V_NESTEDTABLE NUMTAB :=NUMTAB(10,20,30,40,50,60,70,80); 3 BEGIN 4 FOR C IN 1..V_NESTEDTABLE.COUNT LOOP 5 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 6 V_NESTEDTABLE(C)); 7 END LOOP; 8 DBMS_OUTPUT.PUT_LINE('OUTPUT AFTER DELETE(2,4).'); 9 V_NESTEDTABLE.DELETE(2,4); 10 FOR C IN 1..V_NESTEDTABLE.COUNT LOOP 11 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 12 V_NESTEDTABLE(C)); 13 END LOOP; 14 EXCEPTION 15 WHEN NO_DATA_FOUND THEN 16 FOR C IN 5..V_NESTEDTABLE.COUNT LOOP 17 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 18 V_NESTEDTABLE(C)); 19 END LOOP; 20* END; 21 /V_NESTEDTABLE(1)10 V_NESTEDTABLE(2)20 V_NESTEDTABLE(3)30 V_NESTEDTABLE(4)40 V_NESTEDTABLE(5)50 V_NESTEDTABLE(6)60 V_NESTEDTABLE(7)70 V_NESTEDTABLE(8)80 OUTPUT AFTER DELETE(2,4). V_NESTEDTABLE(1)10 V_NESTEDTABLE(5)50

PL/SQL procedure successfully completed.

1 DECLARE 2 V_NESTEDTABLE NUMTAB :=NUMTAB(10,20,30,40,50,60,70,80);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

395

Page 396: Oracle Queries

ORACLE 3 V_COUNT NUMBER :=V_NESTEDTABLE.COUNT; 4 BEGIN 5 FOR C IN 1..V_NESTEDTABLE.COUNT LOOP 6 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 7 V_NESTEDTABLE(C)); 8 END LOOP; 9 DBMS_OUTPUT.PUT_LINE('OUTPUT AFTER DELETE(2,4).'); 10 V_NESTEDTABLE.DELETE(2,4); 11 FOR C IN 1..V_NESTEDTABLE.COUNT LOOP 12 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 13 V_NESTEDTABLE(C)); 14 END LOOP; 15 EXCEPTION 16 WHEN NO_DATA_FOUND THEN 17 FOR C IN 5..V_COUNT LOOP 18 DBMS_OUTPUT.PUT_LINE('V_NESTEDTABLE('||C||')'|| 19 V_NESTEDTABLE(C)); 20 END LOOP; 21* END; 22 /V_NESTEDTABLE(1)10 V_NESTEDTABLE(2)20 V_NESTEDTABLE(3)30 V_NESTEDTABLE(4)40 V_NESTEDTABLE(5)50 V_NESTEDTABLE(6)60 V_NESTEDTABLE(7)70 V_NESTEDTABLE(8)80 OUTPUT AFTER DELETE(2,4). V_NESTEDTABLE(1)10 V_NESTEDTABLE(5)50 V_NESTEDTABLE(6)60 V_NESTEDTABLE(7)70 V_NESTEDTABLE(8)80

PL/SQL procedure successfully completed.

STORED SUBPROGRAMS AND THE DATA DICTIONARY:

SQL> CREATE OR REPLACE PROCEDURE SIMPLE 2 AS 3 V_COUNTER NUMBER; 4 BEGIN 5 V_COUNTER:=7; 6 END; 7 /

Procedure created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

396

Page 397: Oracle Queries

ORACLESQL> SELECT OBJECT_NAME,OBJECT_TYPE,STATUS 2 FROM USER_OBJECTS 3 WHERE OBJECT_NAME='SIMPLE';

OBJECT_NAME --------------------------------------------------------------------------------OBJECT_TYPE STATUS ------------------ ------- SIMPLE PROCEDURE VALID

SQL> SELECT TEXT FROM USER_SOURCE 2 WHERE NAME='SIMPLE';

TEXT ----------------------------------------------------------------------------------------------------PROCEDURE SIMPLE AS V_COUNTER NUMBER; BEGIN V_COUNTER:=7; END;

6 rows selected.

SQL> SELECT LINE,POSITION,TEXT 2 FROM USER_ERRORS 3 WHERE NAME='SIMPLE' 4 /

no rows selected

SQL> CREATE OR REPLACE PROCEDURE SIMPLE 2 AS 3 V_COUNTER NUMBER; 4 BEGIN 5 V_COUNTER:=7; 6 END 7 /

Warning: Procedure created with compilation errors.

SQL> SELECT OBJECT_NAME,OBJECT_TYPE,STATUS 2 FROM USER_OBJECTS 3 WHERE OBJECT_NAME='SIMPLE';

OBJECT_NAME ----------------------------------------------------------------------------------------------------

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

397

Page 398: Oracle Queries

ORACLEOBJECT_TYPE STATUS ------------------ ------- SIMPLE PROCEDURE INVALID

SQL> SELECT TEXT FROM USER_SOURCE 2 WHERE NAME='SIMPLE';

TEXT ----------------------------------------------------------------------------------------------------PROCEDURE SIMPLE AS V_COUNTER NUMBER; BEGIN V_COUNTER:=7; END

6 rows selected.

SQL> SELECT LINE,POSITION,TEXT 2 FROM USER_ERRORS 3 WHERE NAME='SIMPLE';

LINE POSITION ---------- ---------- TEXT ---------------------------------------------------------------------------------------------------- 6 3 PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: ; <an identifier> <a double-quoted delimited-identifier> delete exists prior <a single-quoted SQL string> The symbol ";" was substituted for "end-of-file" to continue.

CALLING UN COMPILED STORED PROCEDURE:

SQL> BEGIN 2 SIMPLE; 3 END; 4 /

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

398

Page 399: Oracle Queries

ORACLESIMPLE;*ERROR at line 2:ORA-06550: line 2, column 1: PLS-00905: object SCOTT.SIMPLE is invalid ORA-06550: line 2, column 1: PL/SQL: Statement ignored

LOCAL SUBPROGRAMS:

A LOCAL SUBPROGRAM,DECLARED IN THE DECLARATIVE SECTION OF A PL/SQL BLOCK.

1 DECLARE 2 CURSOR C IS SELECT EMPNO,ENAME FROM EMP; 3 V_FORMATTEDNAME VARCHAR2(100); 4 FUNCTION FORMATNAME(P_EMPNO NUMBER,P_ENAME VARCHAR2) 5 RETURN VARCHAR2 6 IS 7 BEGIN 8 RETURN P_EMPNO||' HAS NAME '||P_ENAME; 9 END FORMATNAME; 10 BEGIN 11 FOR C1 IN C 12 LOOP 13 V_FORMATTEDNAME:=FORMATNAME(C1.EMPNO,C1.ENAME); 14 DBMS_OUTPUT.PUT_LINE(V_FORMATTEDNAME); 15 END LOOP; 16* END;SQL> /7369 HAS NAME SMITH 7499 HAS NAME ALLEN 7521 HAS NAME WARD 7566 HAS NAME JONES 7654 HAS NAME MARTIN 7698 HAS NAME BLAKE 7782 HAS NAME CLARK 7788 HAS NAME SCOTT 7839 HAS NAME KING 7844 HAS NAME TURNER 7876 HAS NAME ADAMS 7900 HAS NAME JAMES 7902 HAS NAME FORD 7934 HAS NAME MILLER

PL/SQL procedure successfully completed.

LOCAL SUBPROGRAMS AS PART OF STORED SUBPROGRAMS:

1 CREATE OR REPLACE PROCEDURE LOCALPROC

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

399

Page 400: Oracle Queries

ORACLE 2 AS 3 CURSOR C IS SELECT EMPNO,ENAME FROM EMP; 4 V_FORMATTEDNAME VARCHAR2(100); 5 FUNCTION FORMATNAME(P_EMPNO NUMBER,P_ENAME VARCHAR2) 6 RETURN VARCHAR2 7 IS 8 BEGIN 9 RETURN P_EMPNO||' HAS NAME '||P_ENAME; 10 END FORMATNAME; 11 BEGIN 12 FOR C1 IN C 13 LOOP 14 V_FORMATTEDNAME:=FORMATNAME(C1.EMPNO,C1.ENAME); 15 DBMS_OUTPUT.PUT_LINE(V_FORMATTEDNAME); 16 END LOOP; 17* END; 18 /

Procedure created.

SQL> BEGIN 2 LOCALPROC; 3 END; 4 /7369 HAS NAME SMITH 7499 HAS NAME ALLEN 7521 HAS NAME WARD 7566 HAS NAME JONES 7654 HAS NAME MARTIN 7698 HAS NAME BLAKE 7782 HAS NAME CLARK 7788 HAS NAME SCOTT 7839 HAS NAME KING 7844 HAS NAME TURNER 7876 HAS NAME ADAMS 7900 HAS NAME JAMES 7902 HAS NAME FORD 7934 HAS NAME MILLER

PL/SQL procedure successfully completed.

LOCATION OF LOCAL SUBPROGRAMS:

ANY LOCAL SUBPROGRAM MUST BE DECLARED AT THE END OF THE DECLARATIVESECTION.

SQL> DECLARE 2 CURSOR C IS SELECT EMPNO,ENAME FROM EMP; 3 V_FORMATTEDNAME VARCHAR2(100);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

400

Page 401: Oracle Queries

ORACLE 4 FUNCTION FORMATNAME(P_EMPNO NUMBER,P_ENAME VARCHAR2) 5 RETURN VARCHAR2 6 IS 7 BEGIN 8 RETURN P_EMPNO||' HAS NAME '||P_ENAME; 9 END FORMATNAME; 10 BEGIN 11 FOR C1 IN C 12 LOOP 13 V_FORMATTEDNAME:=FORMATNAME(C1.EMPNO,C1.ENAME); 14 DBMS_OUTPUT.PUT_LINE(V_FORMATTEDNAME); 15 END LOOP; 16 END; 17 /7369 HAS NAME SMITH 7499 HAS NAME ALLEN 7521 HAS NAME WARD 7566 HAS NAME JONES 7654 HAS NAME MARTIN 7698 HAS NAME BLAKE 7782 HAS NAME CLARK 7788 HAS NAME SCOTT 7839 HAS NAME KING 7844 HAS NAME TURNER 7876 HAS NAME ADAMS 7900 HAS NAME JAMES 7902 HAS NAME FORD 7934 HAS NAME MILLER

PL/SQL procedure successfully completed.

HERE WE MOVED LOCAL SUBPROGRAM FROM BOTTOM TO TOP,RESULTS A COMPILE TIME ERROR.

1 DECLARE 2 FUNCTION FORMATNAME(P_EMPNO NUMBER,P_ENAME VARCHAR2) 3 RETURN VARCHAR2 4 IS 5 BEGIN 6 RETURN P_EMPNO||' HAS NAME '||P_ENAME; 7 END FORMATNAME; 8 CURSOR C IS SELECT EMPNO,ENAME FROM EMP; 9 V_FORMATTEDNAME VARCHAR2(100); 10 BEGIN 11 FOR C1 IN C 12 LOOP 13 V_FORMATTEDNAME:=FORMATNAME(C1.EMPNO,C1.ENAME); 14 DBMS_OUTPUT.PUT_LINE(V_FORMATTEDNAME);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

401

Page 402: Oracle Queries

ORACLE 15 END LOOP; 16* END; 17 /CURSOR C IS SELECT EMPNO,ENAME FROM EMP;*ERROR at line 8:ORA-06550: line 8, column 1: PLS-00103: Encountered the symbol "CURSOR" when expecting one of the following: begin function package pragma procedure form

HERE WE HAVE DECLARED LOCAL SUBPROGRAM BEFORE ALL DECLARATIONS- THAT IS WRONG.

FORWARD DECLARATION:

1 DECLARE 2 V_TEMPVAL NUMBER(10):=5; 3 PROCEDURE A(P_CTR IN OUT NUMBER) IS 4 BEGIN 5 DBMS_OUTPUT.PUT_LINE('A('||P_CTR||')'); 6 IF P_CTR > 0 THEN 7 B(P_CTR); 8 P_CTR:=P_CTR-1; 9 END IF; 10 END A; 11 --LOCAL PROCEDURE B THAT CALLS PROCEDURE A IN TOP A CALLS B PROCEDURE. 12 PROCEDURE B(P_CTR IN OUT NUMBER) IS 13 BEGIN 14 DBMS_OUTPUT.PUT_LINE('B('||P_CTR||')'); 15 P_CTR:=P_CTR-1; 16 A(P_CTR); 17 END B; 18 BEGIN 19 B(V_TEMPVAL); 20* END;SQL> /B(P_CTR);*ERROR at line 7:ORA-06550: line 7, column 1: PLS-00201: identifier 'B' must be declared ORA-06550: line 7, column 1: PL/SQL: Statement ignored

1 DECLARE 2 V_TEMPVAL NUMBER(10):=5;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

402

Page 403: Oracle Queries

ORACLE 3 -- TO SLOVE THE PROBLEM THAT WE ENCOUNTERED ABOVE. 4 -- FORWARD DECLARATION OF PROCEDURE B. 5 PROCEDURE B(P_CTR IN OUT NUMBER); 6 PROCEDURE A(P_CTR IN OUT NUMBER) IS 7 BEGIN 8 DBMS_OUTPUT.PUT_LINE('A('||P_CTR||')'); 9 IF P_CTR > 0 THEN 10 B(P_CTR); 11 P_CTR:=P_CTR-1; 12 END IF; 13 END A; 14 --LOCAL PROCEDURE B THAT CALLS PROCEDURE A IN TOP A CALLS B PROCEDURE. 15 PROCEDURE B(P_CTR IN OUT NUMBER) IS 16 BEGIN 17 DBMS_OUTPUT.PUT_LINE('B('||P_CTR||')'); 18 P_CTR:=P_CTR-1; 19 A(P_CTR); 20 END B; 21 BEGIN 22 B(V_TEMPVAL); 23* END; 24 /B(5) A(4) B(4) A(3) B(3) A(2) B(2) A(1) B(1) A(0)

PL/SQL procedure successfully completed.

OVERLOADING OF LOCAL SUBPROGRAMS:

1 DECLARE 2 -- OVERLOADING OF LOCAL SUBPROGRAMS

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

403

Page 404: Oracle Queries

ORACLE 3 PROCEDURE LOCALPROC(P_PARAMETER IN NUMBER) IS 4 BEGIN 5 DBMS_OUTPUT.PUT_LINE(P_PARAMETER); 6 END LOCALPROC;

7 PROCEDURE LOCALPROC(P_PARAMETER IN VARCHAR2) IS 8 BEGIN 9 DBMS_OUTPUT.PUT_LINE(P_PARAMETER); 10 END LOCALPROC ; 11 BEGIN 12 LOCALPROC(12345); 13 LOCALPROC('PAVAN'); 14* END;SQL> /12345 PAVAN

PL/SQL procedure successfully completed.

SUBPROGRAMS DEPENDENCIES:

SQL> CREATE TABLE EMP1

2 AS

3 SELECT * FROM EMP;

Table created.

SQL> CREATE TABLE TEMP_TABLE

2 (V_EMPNO NUMBER);

Table created.

1 CREATE OR REPLACE PROCEDURE RAISE_SAL

2 (P_EMPNO IN NUMBER)

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

404

Page 405: Oracle Queries

ORACLE 3 AS

4 BEGIN

5 UPDATE EMP1

6 SET SAL=SAL+100

7 WHERE EMPNO=P_EMPNO;

8* END;

9 /

Procedure created.

SQL> CREATE OR REPLACE PROCEDURE MAINPROC

2 AS

3 CURSOR C IS SELECT EMPNO FROM EMP1;

4 BEGIN

5 FOR C1 IN C LOOP

6 RAISE_SAL(C1.EMPNO);

7 INSERT INTO TEMP_TABLE VALUES (C1.EMPNO);

8 END LOOP;

9 END;

10 /

Procedure created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

405

Page 406: Oracle Queries

ORACLE 1 SELECT OBJECT_NAME,OBJECT_TYPE,STATUS 2 FROM USER_OBJECTS 3* WHERE OBJECT_NAME IN ('RAISE_SAL','MAINPROC')SQL> /

OBJECT_NAME ----------------------------------------------------------------------------------------------------OBJECT_TYPE STATUS ------------------ ------- MAINPROC PROCEDURE VALID RAISE_SAL PROCEDURE VALID

SQL> ALTER TABLE EMP1 2 ADD ADDRESS VARCHAR2(10);

Table altered.

WHEN EVER YOU ALTERED THE TABLE EMP1 THAT WAS USED BY BOTH RAISE_SAL,MAINPROC PROCEDURES BOTH PROCEDURES STATUS WAS CHANGED TO INVALID.

SQL> SELECT OBJECT_NAME,OBJECT_TYPE,STATUS 2 FROM USER_OBJECTS 3 WHERE OBJECT_NAME IN ('RAISE_SAL','MAINPROC');

OBJECT_NAME ----------------------------------------------------------------------------------------------------OBJECT_TYPE STATUS ------------------ ------- MAINPROC PROCEDURE INVALID RAISE_SAL PROCEDURE INVALID AUTOMATIC RECOMPILATION:

WHEN EVER YOU CALL BOTH PROCEDURES AT THAT TIME BOTH PROCEDURES ARE COMPILED AND THEIR STATUS CHANGED TO VALID.

SQL> BEGIN 2 MAINPROC; 3 END; 4 /

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

406

Page 407: Oracle Queries

ORACLEPL/SQL procedure successfully completed.

SQL> SELECT OBJECT_NAME,OBJECT_TYPE,STATUS 2 FROM USER_OBJECTS 3 WHERE OBJECT_NAME IN ('RAISE_SAL','MAINPROC');

OBJECT_NAME ----------------------------------------------------------------------------------------------------OBJECT_TYPE STATUS ------------------ ------- MAINPROC PROCEDURE VALID RAISE_SAL PROCEDURE VALID

WHEN EVER YOU CALL THE PROCEDURE AT THAT TIME IT WILL BE RECOMPILED.

PACKAGES AND DEPENDENCIES:

1 CREATE TABLE DEPT1 2 AS 3* SELECT * FROM DEPTSQL> /

Table created.

SQL> DELETE FROM DEPT1;

4 rows deleted.

SQL> CREATE OR REPLACE PACKAGE DEPTPACKAGE AS

2 PROCEDURE ADDDEPT(P_DEPTNO IN DEPT1.DEPTNO%TYPE,

3 P_DNAME IN DEPT1.DNAME%TYPE,

4 P_LOC IN DEPT1.LOC%TYPE);

5 END DEPTPACKAGE;

6 /

Package created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

407

Page 408: Oracle Queries

ORACLE

1 CREATE OR REPLACE PACKAGE BODY DEPTPACKAGE AS

2 PROCEDURE ADDDEPT(P_DEPTNO IN DEPT1.DEPTNO%TYPE,

3 P_DNAME IN DEPT1.DNAME%TYPE,

4 P_LOC IN DEPT1.LOC%TYPE)

5 IS

6 BEGIN

7 INSERT INTO DEPT1

8 VALUES

9 (P_DEPTNO,P_DNAME,P_LOC);

10 END ADDDEPT;

11* END DEPTPACKAGE;

12 /

Package body created.

1 SELECT OBJECT_NAME,OBJECT_TYPE,STATUS FROM USER_OBJECTS

2* WHERE OBJECT_NAME = 'DEPTPACKAGE'

SQL> /

OBJECT_NAME ----------------------------------------------------------------------------------------------------OBJECT_TYPE STATUS ------------------ ------- DEPTPACKAGE PACKAGE VALID

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

408

Page 409: Oracle Queries

ORACLE DEPTPACKAGE PACKAGE BODY VALID

SQL> DROP TABLE DEPT1;

Table dropped.

WHENEVER WE DROP TABLE DEPT1 BOTH PACKAGE HEADER AND PACKAGE BODYSTATUS WAS CHANGED TO INVALID.BCOZ BOTH HEADER AND BODY WERE USING THE DEPT1 TABLE.

SQL> SELECT OBJECT_NAME,OBJECT_TYPE,STATUS FROM USER_OBJECTS 2 WHERE OBJECT_NAME = 'DEPTPACKAGE';

OBJECT_NAME ----------------------------------------------------------------------------------------------------OBJECT_TYPE STATUS ------------------ ------- DEPTPACKAGE PACKAGE INVALID DEPTPACKAGE PACKAGE BODY INVALID

SQL> CREATE TABLE DEPT1 2 AS 3 SELECT * FROM DEPT;

Table created.

1 CREATE OR REPLACE PACKAGE DEPTPACKAGE AS

2 PROCEDURE ADDDEPT(P_DEPTNO IN NUMBER,

3 P_DNAME IN VARCHAR2,

4 P_LOC IN VARCHAR2);

5* END DEPTPACKAGE;

SQL> /

Package created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

409

Page 410: Oracle Queries

ORACLE 1 CREATE OR REPLACE PACKAGE BODY DEPTPACKAGE AS

2 PROCEDURE ADDDEPT(P_DEPTNO IN NUMBER,

3 P_DNAME IN VARCHAR2,

4 P_LOC IN VARCHAR2)

5 IS

6 BEGIN

7 INSERT INTO DEPT1

8 VALUES

9 (P_DEPTNO,P_DNAME,P_LOC);

10 END ADDDEPT;

11* END DEPTPACKAGE;

SQL> /

Package body created.

SQL> SELECT OBJECT_NAME,OBJECT_TYPE,STATUS FROM USER_OBJECTS 2 WHERE OBJECT_NAME = 'DEPTPACKAGE';

OBJECT_NAME ----------------------------------------------------------------------------------------------------OBJECT_TYPE STATUS ------------------ ------- DEPTPACKAGE PACKAGE VALID DEPTPACKAGE PACKAGE BODY VALID

SQL> DROP TABLE DEPT1;

Table dropped.

HERE I HAVE DROPED DEPT1 THEN PACKAGE HEADER’S STATUS WAS NOT CHANGED TO INVALID ONLY PACKAGE BODY STATUS WAS CHANGED TO INVALID.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

410

Page 411: Oracle Queries

ORACLE

SQL> SELECT OBJECT_NAME,OBJECT_TYPE,STATUS FROM USER_OBJECTS 2 WHERE OBJECT_NAME = 'DEPTPACKAGE';

OBJECT_NAME ----------------------------------------------------------------------------------------------------OBJECT_TYPE STATUS ------------------ ------- DEPTPACKAGE PACKAGE VALID DEPTPACKAGE PACKAGE BODY INVALID

SQL> CREATE TABLE SIMPLE_TABLE

2 (F1 NUMBER);

Table created.

SQL> CREATE OR REPLACE PACKAGE DEPENDEE AS

2 PROCEDURE EXAMPLE(P_VAL IN NUMBER);

3 END DEPENDEE; 4 /

Package created.

1 CREATE OR REPLACE PACKAGE BODY DEPENDEE AS

2 PROCEDURE EXAMPLE(P_VAL IN NUMBER) IS

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

411

Page 412: Oracle Queries

ORACLE 3 BEGIN

4 INSERT INTO SIMPLE_TABLE VALUES(P_VAL);

5 END EXAMPLE;

6* END DEPENDEE;

SQL> /

Package body created.

SQL> CREATE OR REPLACE PROCEDURE DEPENDER(P_VAL IN NUMBER) AS

2 BEGIN

3 DEPENDEE.EXAMPLE(P_VAL+1);

4 END DEPENDER;

5 /

Procedure created.

SQL> SELECT OBJECT_NAME,OBJECT_TYPE,STATUS 2 FROM USER_OBJECTS 3 WHERE OBJECT_NAME IN ('DEPENDEE','DEPENDER','SIMPLE_TABLE');

OBJECT_NAME ----------------------------------------------------------------------------------------------------OBJECT_TYPE STATUS ------------------ ------- SIMPLE_TABLE TABLE VALID DEPENDER PROCEDURE VALID DEPENDEE PACKAGE VALID DEPENDEE PACKAGE BODY VALID

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

412

Page 413: Oracle Queries

ORACLEHERE I CHANGED PACKAGE BODY.

1 CREATE OR REPLACE PACKAGE BODY DEPENDEE AS 2 PROCEDURE EXAMPLE(P_VAL IN NUMBER) IS 3 BEGIN 4 --HERE I CHANGED TO P_VAL TO P_VAL-1 5 INSERT INTO SIMPLE_TABLE VALUES(P_VAL-1); 6 END EXAMPLE; 7* END DEPENDEE;SQL> /

Package body created.

SQL> SELECT OBJECT_NAME,OBJECT_TYPE,STATUS 2 FROM USER_OBJECTS 3 WHERE OBJECT_NAME IN ('DEPENDEE','DEPENDER','SIMPLE_TABLE');

OBJECT_NAME ----------------------------------------------------------------------------------------------------OBJECT_TYPE STATUS ------------------ ------- SIMPLE_TABLE TABLE VALID DEPENDER PROCEDURE VALID DEPENDEE PACKAGE VALID DEPENDEE PACKAGE BODY VALID

HERE DEPENDER IS STILL VALID.HERE PACKAGE HEADER IS VALID.

IF YOU DROP THE TABLE IT ONLY INVALIDATES THE PACKAGE BODY.

SQL> DROP TABLE SIMPLE_TABLE;

Table dropped.

SQL> SELECT OBJECT_NAME,OBJECT_TYPE,STATUS 2 FROM USER_OBJECTS 3 WHERE OBJECT_NAME IN ('DEPENDEE','DEPENDER','SIMPLE_TABLE');

OBJECT_NAME ----------------------------------------------------------------------------------------------------OBJECT_TYPE STATUS

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

413

Page 414: Oracle Queries

ORACLE------------------ ------- DEPENDER PROCEDURE VALID DEPENDEE PACKAGE VALID DEPENDEE PACKAGE BODY INVALID

EXCEPTION PROPAGATION:

EXCEPTIONS CAN OCCUR IN THE DECLARATIVE , THE EXECUTABLE, OR THE EXCECUTABLE, OR THE EXCEPTION SECTION OF A PL/SQL BLOCK.

IF EXCEPTION IS RAISED IN THE EXECUTABLE SECTION OF THE BLOCK,THEN IF HANDLER IS THERE THEN IT WILL BE HANDLED THERE.

WHAT IF THERE IS NO HANDLER OR THE EXCEPTION IS RAISED FROM A DIFFERENTSECTION OF THE BLOCK.THE PROCESS THAT GOVERNS THIS IS KNOWN AS EXCEPTION PROPAGATION.

EXCEPTION RAISED IN THE EXECUTABLE SECTION:

WHEN EXCEPTION IS RAISED IN THE EXECUTABLE SECTION OF A BLOCK, PL/SQL USES THE FOLLOWING ALGORITHM TO DETERMINE WHICH EXCEPTION HANDLER TO INVOKE:

1. IF THE CURRENT BLOCK HAS A HANDLER FOR THE EXCEPTION,EXECUTE IT AND COMPLETE THE BLOCK SUCESSFULLY.CONTROL THEN PASSES TO ENCLOSING BLOCK.

2. IF THERE IS NO HANDLER FOR THE CURRENT EXCEPTION,PROPAGATE THE EXECPTION BY RAISING IT IN THE ENCLOSING BLOCK. STEP 1 WILL THEN BE EXECUTED FOR THE ENCLOSING BLOCK. IF THERE IS NO ENCLOSING BLOCK, THE EXCEPTION WILL BE PROPAGATED OUT TO THE CALLING ENVIRONMENT,SUCH AS SQL*PLUS.

DECLARE

…..BEGIN OUTER BLOCK.

…..

BEGIN….….

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

414

Page 415: Oracle Queries

ORACLEDECLARE….BEGIN INNER BLOCK 1 .….BEGIN….….END;….BEGIN….BEGIN INNER BLOCK 2. WHICH IS NOT HAVING DECLARATIVE BLOCK.….….END;….….END OF OUTER BLOCK.

END;

IN THE ABOVE BOTH INNER BLOCK 1 AND INNER BLOCK 2 ARE ENCLOSED BY OUTER BLOCK. IF ANY EXCEPTION RAISED IN INNER BLOCKS THAT WILL BE PROPAGATED TO OUTER BLOCK.

PROPAGATION EXAMPLE:1

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

DECLAREA EXCEPTION;BEGIN

RAISED HERE. HANDLED HERE ONLY.

END;

415

BEGINRAISE A;EXCEPTION WHEN A THEN…END;

Page 416: Oracle Queries

ORACLE

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

416

Page 417: Oracle Queries

ORACLEPROPAGATION EXAMPLE:2

IN THIS EXAMPLE , RULE 2 IS APPLIED FOR THE SUB-BLOCK. THE EXCEPTION IS PROPAGATED TO THE ENCLOSING BLOCK, WHERE RULE 1 IS APPLIED. THE ENCLOSING BLOCK THEN COMPLETES SUCEESFULLY.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

DECLARE

A EXCEPTION;B EXCEPTION;

BEGIN

RAISED HERENO HANDLER.THROWNTOOUTER BLOCK.

HERE EXCEPTION HANDLED.

EXCEPTION

WHEN B THEN…END;

417

BEGINRAISE B;

EXCEPTION

WHEN A OTHERS…..END;

Page 418: Oracle Queries

ORACLE

PROPAGATION EXAMPLE:3

HERE RULE 2 IS APPLIED FOR THE SUBBLOCK. THE EXCEPTION IS PROPAGATED TO THE ENCLOSING BLOCK, WHERE THERE IS STILL NO HANDLER FOR IT. RULE 2 IS APPLIED AGAIN, AND THE ENCLOSING BLOCK COMPLETES UNSUCCESSFULLY WITH AN UNHANDLED EXCEPTION.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

DECLARE

A EXCEPTION;B EXCEPTION;C EXCEPTION;

BEGIN

EXCEPTION C IS RAISED HERENO HANDLER.THROWN TOOUTER BLOCK.

HERE ALSO NO EXCEPTION HANDLER FOR C .

EXCEPTION

WHEN B THEN…END;

418

BEGIN

RAISE C;

EXCEPTION

WHEN A OTHERS…..END;

Page 419: Oracle Queries

ORACLE

EXCEPTION RAISED IN THE DECLARATIVE SECTION:

IF AN ASSIGNMENT IN THE DECLARATIVE SECTION RAISES AN EXCEPTION, THE EXCEPTION IS IMMEDIATELY PROPAGATED TO THE ENCLOSING BLOCK. ONCE THERE , THE RULES IN GIVEN IN THE PREVIOUS SECTION ARE APPLIED TO PROPAGATE THE EXCEPTION FURTHER. EVEN IF THERE IS A HANDLER IN THE CURRENT BLOCK, IT IS NOT EXECUTED.

PROPAGATION EXAMPLE:4

DECLARE

V_NUMBERS NUMBER(3) := ‘ABC’;

-- EXCEPTION IS RAISED HERE.EVEN THOUGH BLOCK HAS WHEN OTHERS IT WON’T HANDLE THIS EXCEPTION. THE BLOCK COMPLETES UNSUCCESSFULLY.

BEGIN…….

……

EXCEPTION

WHEN OTHERS THEN

……

END;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

419

Page 420: Oracle Queries

ORACLE

PROPAGATION EXAMPLE:5

SIMILAR TO EXAMPLE 4, THE VALUE_ERROR EXCEPTION IS RAISED IN THE DECLARATIVE SECTIONOF THE INNER BLOCK. THE EXCEPTION IS THEN IMMEDIATELY PROPAGATED TO THE OUTER BLOCK. BECAUSE THE OUTER BLOCK HAS AN OTHERS EXCEPTION HANDLER, THE EXCEPTION IS HANDLED AND THE OUTER BLOCK COMPLETES SUCCESSFULLY.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

420

Page 421: Oracle Queries

ORACLEDECLARE

BEGIN

DECLARE

V_NUMBERS NUMBER(3) :=’ABC’;

BEGIN

….

EXCEPTION

WHEN OTHERS THEN……END;

EXCEPTION

WHEN OTHERS THEN….

END;

EXCEPTION RAISED IN THE EXCEPTION SECTION:

EXCEPTIONS CAN ALSO BE RAISED WHILE IN AN EXCEPTION HANDLER, EITHER EXPLICITLY VIA THE RAISE STATEMENT OR IMPLICITLY VIA RUNTIME ERROR.

IN THIS CASE THE EXCEPTION IS PROPAGATED TO THE ENCLOSING BLOCK., LIKE EXCEPTIONS RAISED IN THE DECLARATIVE SECTION.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

421

Page 422: Oracle Queries

ORACLEPROPAGATION EXAMPLE:6

DECLARE

A EXCEPTION;B EXCEPTION;

BEGIN

RAISE A;-- EXCEPTION IS RAISED HERE.

EXCEPTION

WHEN A THEN

RAISE B;--EXCEPTION IS HANDLED HERE AND B IS RAISED HERE.

WHEN B THEN….—EVEN THOUGH FOR B EXCEPTION HANDLER IS THERE IT WON’T EXECUTE. THE EXCEPTION IS PROPAGATED TO THE OUTER BLOCK.END;

-- THE BLOCK COMPLETES UN SUCCESSFULLY WITH UNHANDLED EXCEPTION.

PROPAGATION EXAMPLE:7

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

422

Page 423: Oracle Queries

ORACLEENABLING A

CONSTRAINT:

SQL> CREATE TABLE EXCE_TAB 2 (ROW_ID ROWID, 3 OWNER VARCHAR2(30), 4 TABLE_NAME VARCHAR2(30), 5 CONSTRAINT VARCHAR2(30));

Table created.

SQL> CREATE TABLE ENABLE_EXEC 2 (EMPNO NUMBER(10) PRIMARY KEY, 3 ENAME VARCHAR2(10) );

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

DECLARE

BEGIN

EXCEPTION B IS HANDLED IN THE OUTER BLOCK.

EXCEPTION

WHEN B THEN….END;

THE BLOCK COMPLETES SUCCESSFULLY AND CONTROL PASSES TO THE CALLING ENVIRONMENT.

423

DECLARE

A EXCEPTION;B EXCEPTION;

BEGINRAISE A;--EXCEPTION IS RAISED HERE.EXCEPTION WHEN A THEN – A IS HANDLED HERE AND B IS RAISED HERE.RAISE B;EVEN THOUGH IT HAS HANDLER BLOCK IN THIS BLOCK. IT WON’T BE EXECUTED HERE. IT IS PROPAGATED TO THE OUTER BLOCK.WHEN B THEN….END;

Page 424: Oracle Queries

ORACLETable created.

SQL> INSERT INTO ENABLE_EXEC 2 VALUES 3 (1,'PAVAN');

1 row created.

1 INSERT INTO ENABLE_EXEC 2 VALUES 3* (2,'KUMAR')SQL> /

1 row created.

1 INSERT INTO ENABLE_EXEC 2 VALUES 3* (2,'KUMAR')

SQL> /INSERT INTO ENABLE_EXEC*ERROR at line 1:ORA-00001: unique constraint (D.SYS_C002783) violated

1 ALTER TABLE ENABLE_EXEC 2* DISABLE PRIMARY KEY 3 /

Table altered.

SQL> INSERT INTO ENABLE_EXEC 2 VALUES 3 (2,'BALAJI');

1 row created.

1 INSERT INTO ENABLE_EXEC 2 VALUES 3* (2,'GAYATRI') 4 /

1 row created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

424

Page 425: Oracle Queries

ORACLE

1 INSERT INTO ENABLE_EXEC 2 VALUES 3* (3,'GAYATRI')SQL> /

1 row created.

SQL> ALTER TABLE ENABLE_EXEC 2 ENABLE PRIMARY KEY;ALTER TABLE ENABLE_EXEC*ERROR at line 1:ORA-02437: cannot validate (D.SYS_C002783) - primary key violated

SQL> ALTER TABLE ENABLE_EXEC 2 ENABLE PRIMARY KEY 3 EXCEPTIONS INTO EXCE_TAB;ALTER TABLE ENABLE_EXEC*ERROR at line 1:ORA-02437: cannot validate (D.SYS_C002783) - primary key violated

SQL> SELECT * FROM EXCE_TAB;

ROW_ID OWNER TABLE_NAME ------------------ ------------------------------ ------------------------------ CONSTRAINT ------------------------------ AAAH6PAABAAAPCAAAB D ENABLE_EXEC SYS_C002783 AAAH6PAABAAAPCAAAC D ENABLE_EXEC SYS_C002783 AAAH6PAABAAAPCAAAD D ENABLE_EXEC SYS_C002783

1 DELETE FROM ENABLE_EXEC 2* WHERE ROWID IN (SELECT ROW_ID FROM EXCE_TAB)SQL> /

3 rows deleted.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

425

Page 426: Oracle Queries

ORACLESQL> SELECT * FROM ENABLE_EXEC;

EMPNO ENAME ---------- ---------- 1 PAVAN 3 GAYATRI

SQL> ALTER TABLE ENABLE_EXEC 2 ENABLE PRIMARY KEY;

Table altered.

MERGE STATEMENT:

1 CREATE TABLE EMP_COMPANY 2 (ENAME VARCHAR2(10), 3 CNAME VARCHAR2(10), 4* SAL NUMBER(10)) 5 /

Table created.

1 CREATE TABLE EMP_ALL 2 (ENAME VARCHAR2(10), 3* SAL NUMBER(10)) 4 /

Table created.

SQL> INSERT INTO EMP_COMPANY 2 VALUES 3 ('ANIL','ACC',1500);

1 row created.

1 INSERT INTO EMP_COMPANY 2 VALUES 3* ('SHANKER','TATA',2000) 4 /

1 row created.

1 INSERT INTO EMP_COMPANY 2 VALUES 3* ('JAYA','CMC',1800)

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

426

Page 427: Oracle Queries

ORACLESQL> /

1 row created.

1 INSERT INTO EMP_COMPANY 2 VALUES 3* ('SUNIL','CMC',1700)SQL> /

1 row created.

1 INSERT INTO EMP_COMPANY 2 VALUES 3* ('VIJAY','TATA',5000)SQL> /

1 row created.

1 INSERT INTO EMP_COMPANY 2 VALUES 3* ('PRAKASH','TATA',3000) 4 /

1 row created.

1 INSERT INTO EMP_COMPANY 2 VALUES 3* ('AJAY','ACC',8000)SQL> /

1 row created.

SQL> COMMIT;

Commit complete.

SQL> INSERT INTO EMP_ALL 2 VALUES 3 ('SHANKER',2000);

1 row created.

1 INSERT INTO EMP_ALL 2 VALUES 3* ('JAYA',1800) 4 /

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

427

Page 428: Oracle Queries

ORACLE1 row created.

1 INSERT INTO EMP_ALL 2 VALUES 3* ('SUNIL',1700)SQL> /

1 row created.

1 INSERT INTO EMP_ALL 2 VALUES 3* ('VIJAY',5000)SQL> /

1 row created.

1 INSERT INTO EMP_ALL 2 VALUES 3* ('PRAKASH',3000)SQL> /

1 row created.

SQL> COMMIT;

Commit complete.

SQL> SELECT * FROM EMP_COMPANY;

ENAME CNAME SAL ---------- ---------- ---------- ANIL ACC 1500 SHANKER TATA 2000 JAYA CMC 1800 SUNIL CMC 1700 VIJAY TATA 5000 PRAKASH TATA 3000 AJAY ACC 8000

7 rows selected.

SQL> SELECT * FROM EMP_ALL;

ENAME SAL

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

428

Page 429: Oracle Queries

ORACLE---------- ---------- SHANKER 2000 JAYA 1800 SUNIL 1700 VIJAY 5000 PRAKASH 3000

SQL> MERGE INTO EMP_ALL A 2 USING EMP_COMPANY B 3 ON(A.ENAME=B.ENAME) 4 WHEN MATCHED THEN 5 UPDATE SET A.SAL=B.SAL+100 6 WHEN NOT MATCHED THEN 7 INSERT(ENAME,SAL) 8 VALUES 9 (ENAME,SAL);

7 rows merged.

SQL> SELECT * FROM EMP_COMPANY;

ENAME CNAME SAL ---------- ---------- ---------- ANIL ACC 1500 SHANKER TATA 2000 JAYA CMC 1800 SUNIL CMC 1700 VIJAY TATA 5000 PRAKASH TATA 3000 AJAY ACC 8000

7 rows selected.

SQL> SELECT * FROM EMP_ALL;

ENAME SAL ---------- ---------- SHANKER 2100 JAYA 1900 SUNIL 1800 VIJAY 5100 PRAKASH 3100 AJAY 8000 ANIL 1500

7 rows selected.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

429

Page 430: Oracle Queries

ORACLEHERE DATA FROM TABLE EMP_COMPANY IS MERGED WITH DATA OF TABLE EMP_ALL.AS A RESULTTHE TABLE EMP_ALL HAS BEEN CHANGED.

ANIL IS NOT PRESENT IN THE TABLE EMP_ALL ACCORDING TO MATCH CONDITION, THEN THE ROW ISINSERTED INTO EMP_ALL TABLE USING INSERT STATEMENT.

SHANKER IS PRESENT IN THE BOTH THE TABLES THAT IS WHY ACCORDING TO CONDITION IT WASUPDATED.

FLASH BACK QUERIES:

1 CREATE TABLE CHILD 2 (A NUMBER(10), 3* B NUMBER(10))SQL> /

Table created.

SQL> BEGIN 2 FOR I IN 1..50 LOOP 3 INSERT INTO CHILD VALUES(1,I); 4 END LOOP; 5 END; 6 /

PL/SQL procedure successfully completed.

SQL> COMMIT;

Commit complete.

SQL> SELECT COUNT(*) FROM CHILD;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

430

Page 431: Oracle Queries

ORACLE COUNT(*) ---------- 50

SQL> DELETE FROM CHILD;

50 rows deleted.

SQL> COMMIT;

Commit complete.

SQL> SELECT COUNT(*) FROM CHILD;

COUNT(*) ---------- 0

SQL> EXECUTE DBMS_FLASHBACK.ENABLE_AT_TIME(SYSDATE - 10/1440);BEGIN DBMS_FLASHBACK.ENABLE_AT_TIME(SYSDATE - 10/1440); END;

*ERROR at line 1:ORA-06550: line 1, column 7: PLS-00201: identifier 'DBMS_FLASHBACK' must be declared ORA-06550: line 1, column 7: PL/SQL: Statement ignored

SQL> CONNEnter user-name: SYS AS SYSDBAConnected.

SQL> GRANT ALL ON DBMS_FLASHBACK TO D;

Grant succeeded.

SQL> CONNEnter user-name: DConnected.

SQL> EXECUTE DBMS_FLASHBACK.ENABLE_AT_TIME(SYSDATE - 10/1440);

PL/SQL procedure successfully completed.

SQL> SELECT COUNT(*) FROM CHILD;

COUNT(*) ---------- 50

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

431

Page 432: Oracle Queries

ORACLESQL> INSERT INTO CHILD VALUES 2 (11,11);INSERT INTO CHILD VALUES *ERROR at line 1:ORA-08182: operation not supported while in Flashback mode

SQL> EXECUTE DBMS_FLASHBACK.DISABLE;

PL/SQL procedure successfully completed.

SQL> SELECT COUNT(*) FROM CHILD;

COUNT(*) ---------- 0

SQL> INSERT INTO CHILD VALUES 2 (11,11);

1 row created.

GENERATING PRIMARY KEY USING TRIGGER:

SQL> CREATE TABLE DEPT_DUP 2 AS 3 SELECT * FROM DEPT;

Table created.

SQL> DELETE FROM DEPT_DUP;

4 rows deleted.

SQL> COMMIT;

Commit complete.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

432

Page 433: Oracle Queries

ORACLE 1 CREATE SEQUENCE DEPT_DUP_SEQ 2 INCREMENT BY 10 3* START WITH 10SQL> /

Sequence created.

SQL> CREATE OR REPLACE TRIGGER DEPTNO_GENERATION 2 BEFORE INSERT

3 ON DEPT_DUP

4 FOR EACH ROW

5 DECLARE

6 PRIMARY_KEY_VALUE VARCHAR2(10);

7 BEGIN

8 SELECT DEPT_DUP_SEQ.NEXTVAL INTO PRIMARY_KEY_VALUE FROM DUAL;

9 :NEW.DEPTNO := 'D' || TO_CHAR(PRIMARY_KEY_VALUE);

10 END;

11 /

Trigger created.

SQL> INSERT INTO DEPT_DUP 2 (DNAME,LOC) 3 VALUES 4 ('ACCOUNTING','NEWYORK');INSERT INTO DEPT_DUP *ERROR at line 1:ORA-06502: PL/SQL: numeric or value error: character to number conversion error ORA-06512: at "D.DEPTNO_GENERATION", line 5 ORA-04088: error during execution of trigger 'D.DEPTNO_GENERATION'

SQL> ALTER TABLE DEPT_DUP 2 MODIFY DEPTNO VARCHAR2(10);

Table altered.

SQL> INSERT INTO DEPT_DUP 2 (DNAME,LOC)

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

433

Page 434: Oracle Queries

ORACLE 3 VALUES 4 ('ACCOUNTING','NEWYORK');

1 row created.

SQL> SELECT * FROM DEPT_DUP;

DEPTNO DNAME LOC ---------- -------------- ------------- D20 ACCOUNTING NEWYORK

SQL> INSERT INTO DEPT_DUP 2 (DNAME,LOC) 3 VALUES 4 ('ACCOUNTING','NEWYORK') 5

1 INSERT INTO DEPT_DUP 2 (DNAME,LOC) 3 VALUES 4* ('SALES','NEWYORK')SQL> /

1 row created.

1 INSERT INTO DEPT_DUP 2 (DNAME,LOC) 3 VALUES 4* ('COMPUTERS','NEWYORK')SQL> /

1 row created.

SQL> SELECT * FROM DEPT_DUP;

DEPTNO DNAME LOC ---------- -------------- ------------- D20 ACCOUNTING NEWYORK D30 SALES NEWYORK D40 COMPUTERS NEWYORK

SQL> DELETE FROM DEPT_DUP;

3 rows deleted.

WORKING WITH LARGE OBJECTS:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

434

Page 435: Oracle Queries

ORACLEFOUR LOB DATATYPES ARE:

BLOB.

CLOB.

NCLOB.

BFILE.

BLOB: BINARY LARGE OBJECT.

IT IS USED TO STORE LARGE BINARY OBJECTS IN THE DATABASE. MAXSIZE THAT CAN BE STORED IS 4 GB.

CLOB: CHARACTER LARGE OBJECT.

IT IS SIMILAR TO LONG DATATYPE. MAXIMUM SIZE IS 4 GB.CLOB IS USED TO STORE LARGE BLOCKS OF SINGLE –BYTE CHARACTER DATA IN THE DATABASE.

NCLOB: NATIONAL CHARACTER LARGE OBJECT.

THE NCLOB DATA TYPE IS USED TO STORE LARGE BLOCKS OF FIXED WIDTH SINGLE-BYTE OR MULTI – BYTE CHARACTER DATA IN THE DATABASE BASED ON THE NATIONAL LANGUAGE CHARACTER.MAXSIZE 4 GB.

BFILE:

IS USED TO STORE LARGE BINARY OBJECTS IN OPERATING SYSTEM FILES OUTSIDE THE DATABASE. BFILE COLUMN STORES A FILE LOCATOR,WHICH POINTS TO THE LARGE BINARY FILE ON THE SERVER.THESE FILES ARE READ ONLY. VIDEOS MAY BE STORED IN THIS WAY.

CREATING TABLE WITH LOB COLUMNS:

SQL> CREATE TABLE AIRBUS_DESC

2 (AIRBUSNO CHAR(10),

3 AIRBUS_DET BFILE,

4 AIRBUS_PROFILE CLOB);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

435

Page 436: Oracle Queries

ORACLETable created.

CREATING DIRECTORY FOR BFILE COLUMN:

SQL> CREATE OR REPLACE DIRECTORY GOD AS 2 'C:\BALAJI';

Directory created.

INSERTING VALUES IN TO TABLE WITH LOB COLUMNS:

1 INSERT INTO AIRBUS_DESC 2 VALUES 3* ('AB01',BFILENAME('GOD','AIRBUS_DESC1.DOC'),'THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:')SQL> /

1 row created.

1 INSERT INTO AIRBUS_DESC 2 VALUES 3* ('AB02',BFILENAME('GOD','AIRBUS_DESC2.DOC'),'THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:') 4 /

1 row created.

1 INSERT INTO AIRBUS_DESC 2 VALUES 3* ('AB03',BFILENAME('GOD','AIRBUS_DESC3.DOC'),'THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:')SQL> /

1 row created.

SQL> COMMIT;

Commit complete.

SELECTING VALUES FROM THE TABLE WITH LOB COLUMNS:

THE DATA FROM LOB'S CANNOT BE DISPLAYED BY USING SELECT STATEMENT,EXCEPT FOR THE CLOBDATATYPE.

SQL> SELECT AIRBUSNO,AIRBUS_PROFILE FROM AIRBUS_DESC;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

436

Page 437: Oracle Queries

ORACLEAIRBUSNO AIRBUS_PROFILE ---------- -------------------------------------------------------------------------------- AB01 THE DESCRIPTION OF THE PLANE IS AS FOLLOWS: AB02 THE DESCRIPTION OF THE PLANE IS AS FOLLOWS: AB03 THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:

NORMALLY WHEN YOU UPDATE A VALUE THE ROW BEING UPDATED GETS AUTOMATICALLY LOCKED IN THE BACKGROUND. THE TRANSACTION IS PERFORMED AND THEN THE LOCK IS RELEASED BY ORACLE.

BUT,IF YOU HAVE TO UPDATE A LOB VALUE THEN YOU HAVE TO EXPLICITLY LOCK THE ROWS.FOR THE PURPOSE YOU CAN MAKE USE OF THE FOR UPDATE CLAUSE IN THE SELECT STATEMENT.

SQL>SELECT AIRBUS_PROFILE FROM AIRBUS_DESC 2 WHERE AIRBUSNO='AB01' 3 FOR UPDATE;

AIRBUS_PROFILE -------------------------------------------------------------------------------- THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:

AS THE RECORD FOR AIRBUSNO AB01 HAS BEEN SELECTED FOR UPDATE THE ROW HAS BEEN EXCLUSIVELY LOCKED. NOW THE ROW CAN BE UPDATED FOR A NEW AIRBUS_PROFILE VALUE.

1 UPDATE AIRBUS_DESC 2 SET AIRBUS_PROFILE = 'THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:LUXURY SEATS IN 3 ECONOMY CLASS' 4* WHERE AIRBUSNO='AB01'SQL> /

1 row updated.

TO RELEASE THE LOCK, FIRE A COMMIT STATEMENT. THIS TYPE OF EXPLICIT LOCKING IS REQUIREDONLY FOR INTERNALLY STORED LOBS USING DBMS_LOB PACKAGE:

THE DBMS_LOB PACKAGE PROVIDES ROUTINES TO ACCESS BLOBS,CLOBS,NCLOBS AND BFILES.YOU CAN USE DBMS_LOB FOR ACCESS AND MANIPULATION OF SPECIFIC PARTS OF A LOB, AS WELL AS COMPLETE LOBS.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

437

Page 438: Oracle Queries

ORACLEDBMS_LOB CAN READ AS WELL AS MODIFY BLOBS,CLOBS, AND NCOLBS AND PROVIDE READ ONLY OPERATIONSON BFILES.

THE STRING COMPARISON AND MANIPULATION PROCEDURES AND FUNCTIONS AVAILABLE WITHIN DBMS_LOB PACKAGE ARE LISTED BELOW.

READ.

SUBSTR.

INSTR.

GETLENGTH.

COMPARE.

WRITE.

APPEND.

ERASE.

TRIM.

COPY.

ADDITIONAL PROCEDURES AND FUNCTIONS SPECIFIC TO BFILE ARE LISTED BELOW:

FILEOPEN.

FILECLOSE.

FILECLOSEALL.

FILEXISTS.

FILEGETNAME.

FILEOPEN.

DBMS_LOB.READ:

THE PARAMETERS TO BE SPECIFIED IN THE READ PROCEDURE ARE:

LOCATOR FOR THE LOB TO READ.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

438

Page 439: Oracle Queries

ORACLE NUMBER OF BYTES OR CHARACTERS TO BE READ.

OFFSET IN BYTES(FOR BLOBS) OR CHARACTERS (FOR CLOBS) FROM THE

START OF THE LOB.(ORIGIN:1).

OUTPUT BUFFER FOR THE READ OPERATION.

THE FOLLOWING SELECTS FIRST 15 CHARACTERS FROM THE AIRBUS_PROFILE COLB COLUMN.

1 DECLARE

2 LOC_VAR CLOB;

3 NUM INTEGER;

4 OFFSET INTEGER;

5 OUTPUT_VAR VARCHAR2(20);

6 BEGIN

7 NUM:=15;

8 OFFSET :=1;

9 SELECT AIRBUS_PROFILE INTO LOC_VAR

10 FROM AIRBUS_DESC

11 WHERE AIRBUSNO='AB01';

12 DBMS_LOB.READ(LOC_VAR,NUM,OFFSET,OUTPUT_VAR);

13 DBMS_OUTPUT.PUT_LINE('START OF AIRBUS PROFILE ' || OUTPUT_VAR);

14* END;SQL> /

PL/SQL procedure successfully completed.

SQL> SET SERVEROUTPUT ON

SQL> /

START OF AIRBUS PROFILE THE DESCRIPTION

PL/SQL procedure successfully completed.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

439

Page 440: Oracle Queries

ORACLESQL> SELECT AIRBUS_PROFILE FROM AIRBUS_DESC 2 WHERE AIRBUSNO = 'AB01';

AIRBUS_PROFILE -------------------------------------------------------------------------------- THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:LUXURY SEATS IN ECONOMY CLASS

DBMS_LOB.SUBSTR:

THE PARAMETERS TO BE SPECIFIED IN THE SUBSTR FUNCTION ARE:

LOCATOR FOR THE LOB TO READ.

NUMBER OF BYTES OR CHARACTERS TO BE READ.

OFFSET IN BYTES(FOR BLOBS) OR CHARACTERS (FOR CLOBS) FROM THE

START OF THE LOB.(ORIGIN:1).

THE FOLLOWING CODE SELECTS 12 CHRACTERS FROM THE AIRBUS_PROFILE COLUMN STARTINGAT THE 17 TH CHARACTER.

1 DECLARE

2 LOC_VAR CLOB;

3 NUM INTEGER;

4 OFFSET INTEGER;

5 OUTPUT_VAR VARCHAR2(20);

6 BEGIN

7 NUM:=12;

8 OFFSET :=17;

9 SELECT AIRBUS_PROFILE INTO LOC_VAR

10 FROM AIRBUS_DESC

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

440

Page 441: Oracle Queries

ORACLE 11 WHERE AIRBUSNO='AB01';

12 OUTPUT_VAR:=DBMS_LOB.SUBSTR(LOC_VAR,NUM,OFFSET);

13 DBMS_OUTPUT.PUT_LINE('SUBSTRING OF AIRBUS PROFILE ' || OUTPUT_VAR);

14* END;

SQL> /

SUBSTRING OF AIRBUS PROFILE OF THE PLANE

PL/SQL procedure successfully completed.

DBMS_LOB.INSTR:

THE PARAMETERS TO BE SPECIFIED IN THE INSTR FUNCTION ARE:

LOCATOR FOR THE LOB TO READ.

PATTERN TO BE TESTED FOR.

ABSOLUTE OFFSET IN BYTES(FOR BLOBS) OR CHARACTERS (FOR CLOBS)

FROM THE START OF THE LOB.

OCCURRENCE NUMBER,START AT 1.

THE FOLLOWING CODE SEARCHES ‘AS’ IN THE CLOB COLUMN.

1 DECLARE 2 LOC_VAR CLOB;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

441

Page 442: Oracle Queries

ORACLE 3 PATTERN VARCHAR2(10);

4 OFFSET INTEGER;

5 OCCUR_VAR INTEGER;

6 POSITION INTEGER;

7 BEGIN

8 PATTERN:='AS';

9 OFFSET :=1;

10 OCCUR_VAR :=1;

11 SELECT AIRBUS_PROFILE INTO LOC_VAR

12 FROM AIRBUS_DESC

13 WHERE AIRBUSNO='AB01';

14 POSITION:=DBMS_LOB.INSTR(LOC_VAR,PATTERN,OFFSET,OCCUR_VAR);

15 DBMS_OUTPUT.PUT_LINE('STRING FOUND AT POSITION: ' || POSITION);

16* END;SQL> /STRING FOUND AT POSITION: 33

PL/SQL procedure successfully completed.

SQL> SELECT AIRBUS_PROFILE FROM AIRBUS_DESC 2 WHERE AIRBUSNO = 'AB01';

AIRBUS_PROFILE -------------------------------------------------------------------------------- THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:LUXURY SEATS IN ECONOMY CLASS

DBMS_LOB.GETLENGTH:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

442

Page 443: Oracle Queries

ORACLETHE PARAMETERS TO BE SPECIFIED IN THE GETLENGTH FUNCTION ARE:

LOCATOR FOR THE LOB WHOSE LENGTH IS TO BE RETURNED.

SQL> DECLARE

2 LOC_VAR CLOB;

3 LEN INTEGER;

4 BEGIN

5 SELECT AIRBUS_PROFILE INTO LOC_VAR

6 FROM AIRBUS_DESC

7 WHERE AIRBUSNO='AB01';

8 LEN:=DBMS_LOB.GETLENGTH(LOC_VAR);

9 DBMS_OUTPUT.PUT_LINE('LENGTH OF THE LOB IS :' ||LEN);

10 END;

11 /LENGTH OF THE LOB IS :72

PL/SQL procedure successfully completed.

SQL> SELECT AIRBUS_PROFILE FROM AIRBUS_DESC 2 WHERE AIRBUSNO = 'AB01';

AIRBUS_PROFILE -------------------------------------------------------------------------------- THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:LUXURY SEATS IN ECONOMY CLASS

DBMS_LOB.COMPARE:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

443

Page 444: Oracle Queries

ORACLETHE PARAMETERS TO BE SPECIFIED IN THE COMPARE FUNCTION ARE:

LOB LOCATOR OF FIRST LOB FOR COMPARISON.

LOB LOCATOR OF SECOND LOB FOR COMPARISON.

NUMBER OF BYTES OR CHRACTERS TO COMPARE OVER.

OFFSET IN BYTES(FOR BLOBS) OR CHARACTERS (FOR CLOBS) ON THE FIRST

LOB(ORIGIN:1) FOR THE COMPARISON.

OFFSET IN BYTES(FOR BLOBS) OR CHARACTERS (FOR CLOBS) ON THE SECOND

LOB(ORIGIN:1) FOR THE COMPARISON.

1 DECLARE 2 LOC1_VAR CLOB;

3 LOC2_VAR CLOB; 4 NUM INTEGER; 5 OFFSET1 INTEGER; 6 OFFSET2 INTEGER;

7 OUTPUT_VAR INTEGER;

8 BEGIN

9 NUM:=30;

10 OFFSET1:=1;

11 OFFSET2:=1;

12 SELECT AIRBUS_PROFILE INTO LOC1_VAR

13 FROM AIRBUS_DESC

14 WHERE AIRBUSNO='AB01';

15 SELECT AIRBUS_PROFILE INTO LOC2_VAR

16 FROM AIRBUS_DESC

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

444

Page 445: Oracle Queries

ORACLE 17 WHERE AIRBUSNO='AB02';

18 OUTPUT_VAR:=DBMS_LOB.COMPARE(LOC1_VAR,LOC2_VAR,NUM,OFFSET1,OFFSET2);

19 DBMS_OUTPUT.PUT_LINE('COMPARISON VALUE ( 0 IF THE SAME ) IS : ' || OUTPUT_VAR);

20* END;

21 /

COMPARISON VALUE ( 0 IF THE SAME ) IS : 0

PL/SQL procedure successfully completed.

SQL> SELECT AIRBUS_PROFILE FROM AIRBUS_DESC 2 WHERE AIRBUSNO IN ('AB01','AB02');

AIRBUS_PROFILE -------------------------------------------------------------------------------- THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:LUXURY SEATS IN ECONOMY CLASS THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:

DBMS_LOB.WRITE:

THE PARAMETERS TO BE SPECIFIED IN THE WRITE PROCEDURE ARE:

LOB LOCATOR OF INTERNAL LOB TO BE WRITTEN TO.

NUMBER OF BYTES OR CHRACTERS TO WRITE OR THAT WERE WRITTEN..

OFFSET IN BYTES(FOR BLOBS) OR CHARACTERS (FOR CLOBS) FROM THE

START OF THE LOB(ORIGIN:1) FOR WRITE OPERATION.

INPUT BUFFER FOR THE WRITE OPERATION.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

445

Page 446: Oracle Queries

ORACLE

THE FOLLOWING CODE UPDATES THE VALUE IN THE AIRBUS_PROFILE COLUMN FOR AIRBUSNO ‘AB02’ WITH ‘LUXURY SEATS’.

SQL> DECLARE 2 LOC_VAR CLOB;

3 NUM INTEGER;

4 OFFSET INTEGER;

5 BUFFER_VAR VARCHAR2(20);

6 BEGIN

7 NUM:=13;

8 OFFSET :=43;

9 BUFFER_VAR:=':LUXURY SEATS';

10 SELECT AIRBUS_PROFILE INTO LOC_VAR

11 FROM AIRBUS_DESC

12 WHERE AIRBUSNO='AB02'

13 FOR UPDATE;

14 DBMS_LOB.WRITE(LOC_VAR,NUM,OFFSET,BUFFER_VAR);

15 COMMIT;

16 END;

17 /

PL/SQL procedure successfully completed.

SQL> SELECT AIRBUS_PROFILE FROM AIRBUS_DESC 2 WHERE AIRBUSNO='AB02';

AIRBUS_PROFILE

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

446

Page 447: Oracle Queries

ORACLE-------------------------------------------------------------------------------- THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:LUXURY SEATS

DBMS_LOB.APPEND:

THE PARAMETERS TO BE SPECIFIED IN THE APPEND PROCEDURE ARE:

LOCATOR FOR THE INTERNAL LOB TO WHICH THE DATA IS TO BE APPENDED.

LOCATOR FOR THE INTERNAL LOB FROM WHICH THE DATA IS TO BE READ.

THE FOLLOWING CODE APPENDS THE VALUE IN THE AIRBUS_PROFILE COLUMN IN THE AIRBUS_DESC TABLE FOR AIRBUSNO ‘ABO2’ WITH THE VALUE FOR AB01.

SQL> DECLARE

2 DEST_LOC_VAR CLOB;

3 SRC_LOC_VAR CLOB;

4 BEGIN

5 SELECT AIRBUS_PROFILE INTO DEST_LOC_VAR

6 FROM AIRBUS_DESC

7 WHERE AIRBUSNO='AB02'

8 FOR UPDATE;

9 SELECT AIRBUS_PROFILE INTO SRC_LOC_VAR

10 FROM AIRBUS_DESC

11 WHERE AIRBUSNO='AB01';

12 DBMS_LOB.APPEND(DEST_LOC_VAR,SRC_LOC_VAR);

13 COMMIT;

14 END;

15 /

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

447

Page 448: Oracle Queries

ORACLEPL/SQL procedure successfully completed.

SQL> SELECT AIRBUS_PROFILE FROM AIRBUS_DESC 2 WHERE AIRBUSNO='AB01';

AIRBUS_PROFILE -------------------------------------------------------------------------------- THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:LUXURY SEATS IN ECONOMY CLASS

SQL> SELECT AIRBUS_PROFILE FROM AIRBUS_DESC 2 WHERE AIRBUSNO='AB02';

AIRBUS_PROFILE -------------------------------------------------------------------------------- THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:LUXURY SEATSTHE DESCRIPTION OF THE PL

DBMS_LOB.ERASE:

THE PARAMETERS TO BE SPECIFIED IN THE ERASE PROCEDURE ARE:

LOCATOR FOR THE LOB TO BE ERASED.

NUMBER OF BYTES(FOR BLOBS) OR CHARACTERS (FOR CLOBS) TO BE

ERASED.

ABSOLUTE OFFSET FROM THE BEGINNING OF THE LOB IN BYTES(FOR BLOBS)

OR CHARACTERS(CLOBS).

THE FOLLOWING CODE ERASES 20 CHARACTERS FROM THE VALUE IN THE ‘AIRBUS_PROFILE’ COLUMN IN THE AIRBUS_DESC TABLE FOR ‘AIRBUSNO’ ABO2 STARTING WITH THE 10TH CHARACTER.

SQL> DECLARE

2 LOC_VAR CLOB;

3 NUM INTEGER;

4 OFFSET INTEGER;

5 BEGIN

6 NUM:=20;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

448

Page 449: Oracle Queries

ORACLE 7 OFFSET :=10;

8 SELECT AIRBUS_PROFILE INTO LOC_VAR

9 FROM AIRBUS_DESC

10 WHERE AIRBUSNO='AB02'

11 FOR UPDATE;

12 DBMS_LOB.ERASE(LOC_VAR,NUM,OFFSET);

13 COMMIT;

14 END;

15 /

PL/SQL procedure successfully completed.

SQL> SELECT AIRBUS_PROFILE FROM AIRBUS_DESC 2 WHERE AIRBUSNO='AB02';

AIRBUS_PROFILE -------------------------------------------------------------------------------- THE DESCR IS AS FOLLOWS:LUXURY SEATSTHE DESCRIPTION OF THE PL

DBMS_LOB.TRIM:

THE PARAMETERS TO BE SPECIFIED IN THE TRIM PROCEDURE ARE:

LOCATOR FOR THE INTERNAL WHOSE LENGTH IS TO BE TRIMMED.

NEW,TRIMMED LENGTH OF THE LOB VALUE IN BYTES FOR BLOBS OR

CHARACTERS FOR CLOBS.

THE FOLLOWING CODE TRIMS THE VALUE IN THE AIRBUS_PROFILE COLUMN IN THE AIRBUS_DESCTABLE FOR AIRBUSNO ABO2 TO 40 CHRACTERS.

SQL> DECLARE 2 LOC_VAR CLOB;

3 NEWLEN INTEGER;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

449

Page 450: Oracle Queries

ORACLE 4 BEGIN

5 NEWLEN :=40;

6 SELECT AIRBUS_PROFILE INTO LOC_VAR

7 FROM AIRBUS_DESC

8 WHERE AIRBUSNO='AB02'

9 FOR UPDATE;

10 DBMS_LOB.TRIM(LOC_VAR,NEWLEN);

11 COMMIT;

12 END;

13 /

PL/SQL procedure successfully completed.

SQL> SELECT AIRBUS_PROFILE FROM AIRBUS_DESC 2 WHERE AIRBUSNO='AB02';

AIRBUS_PROFILE -------------------------------------------------------------------------------- THE DESCR IS AS FOLLO

DBMS_LOB.COPY:

THE PARAMETERS TO BE SPECIFIED IN THE COPY PROCEDURE ARE:

LOB LOCATOR OF THE COPY TARGET.

LOB LOCATOR OF SOURCE FOR THE COPY.

NUMBER OF BYTES OR CHARACTERS TO COPY.

OFFSET IN BYTES OR CHARACTERS IN THE DESTINATION LOB(ORIGIN:1) FOR

THE START OF THE COPY.

OFFSET IN BYTES OR CHARACTERS IN THE SOURCE LOB(ORIGIN:1) FOR THE

START OF THE COPY.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

450

Page 451: Oracle Queries

ORACLETHE FOLLOWING CODE COPIES THE VALUES IN THE AIRBUS_PROFILE COLUMN IN THE AIRBUS_DESC TABLE FOR AIRBUSNO AB01 TO AB02.

1 DECLARE

2 DEST_LOC_VAR CLOB;

3 SRC_LOC_VAR CLOB;

4 NUM INTEGER;

5 DEST_OFFSET INTEGER;

6 SRC_OFFSET INTEGER; 7 BEGIN

8 NUM:=73;

9 DEST_OFFSET :=1;

10 SRC_OFFSET :=1;

11 SELECT AIRBUS_PROFILE INTO DEST_LOC_VAR

12 FROM AIRBUS_DESC

13 WHERE AIRBUSNO='AB02'

14 FOR UPDATE;

15 SELECT AIRBUS_PROFILE INTO SRC_LOC_VAR

16 FROM AIRBUS_DESC

17 WHERE AIRBUSNO='AB01';

18 DBMS_LOB.COPY(DEST_LOC_VAR,SRC_LOC_VAR,NUM,DEST_OFFSET,SRC_OFFSET);

19 COMMIT;

20* END;

SQL> /

PL/SQL procedure successfully completed.

SQL> SELECT AIRBUS_PROFILE FROM AIRBUS_DESC

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

451

Page 452: Oracle Queries

ORACLE 2 WHERE AIRBUSNO IN ('AB01','AB02');

AIRBUS_PROFILE -------------------------------------------------------------------------------- THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:LUXURY SEATS IN ECONOMY CLASS THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:LUXURY SEATS IN ECONOMY CLASS.

USING BFILE RELATED ROUTINES:

1 DECLARE

2 LOC_VAR BFILE;

3 FEXISTS_VAR INTEGER;

4 FOPEN_VAR INTEGER;

5 NUM INTEGER;

6 OFFSET INTEGER;

7 LEN INTEGER;

8 DIR_ALIAS_VAR VARCHAR2(25);

9 FNAME VARCHAR2(15);

10 OUTPUT_VAR LONG;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

452

Page 453: Oracle Queries

ORACLE 11 BEGIN

12 SELECT AIRBUS_DET INTO LOC_VAR

13 FROM AIRBUS_DESC

14 WHERE AIRBUSNO='AB01';

15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);

16 IF FEXISTS_VAR=1 THEN

17 DBMS_OUTPUT.PUT_LINE('THE FILE EXISTS');

18 ELSE

19 DBMS_OUTPUT.PUT_LINE('THE FILE COULD NOT BE FOUND');

20 END IF;

21* END;

22 /

SQL> /THE FILE EXISTS

PL/SQL procedure successfully completed.

1 DECLARE

2 LOC_VAR BFILE;

3 FEXISTS_VAR INTEGER;

4 FOPEN_VAR INTEGER;

5 NUM INTEGER;

6 OFFSET INTEGER;

7 LEN INTEGER;

8 DIR_ALIAS_VAR VARCHAR2(25);

9 FNAME VARCHAR2(30);

10 OUTPUT_VAR LONG;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

453

Page 454: Oracle Queries

ORACLE 11 BEGIN

12 SELECT AIRBUS_DET INTO LOC_VAR

13 FROM AIRBUS_DESC

14 WHERE AIRBUSNO='AB01';

15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);

16 IF FEXISTS_VAR=1 THEN

17 DBMS_OUTPUT.PUT_LINE('THE FILE EXISTS');

18 ELSE

19 DBMS_OUTPUT.PUT_LINE('THE FILE COULD NOT BE FOUND');

20 END IF;

21 DBMS_LOB.FILEGETNAME(LOC_VAR,DIR_ALIAS_VAR,FNAME);

22 DBMS_OUTPUT.PUT_LINE('FILE NAME IS:' || DIR_ALIAS_VAR || ' '|| FNAME);

23* END;

SQL> /

THE FILE EXISTS FILE NAME IS:GOD AIRBUS_DESC1.DOC

PL/SQL procedure successfully completed.

1 DECLARE

2 LOC_VAR BFILE;

3 FEXISTS_VAR INTEGER;

4 FOPEN_VAR INTEGER;

5 NUM INTEGER;

6 OFFSET INTEGER;

7 LEN INTEGER;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

454

Page 455: Oracle Queries

ORACLE 8 DIR_ALIAS_VAR VARCHAR2(25);

9 FNAME VARCHAR2(30);

10 OUTPUT_VAR LONG;

11 BEGIN

12 SELECT AIRBUS_DET INTO LOC_VAR

13 FROM AIRBUS_DESC

14 WHERE AIRBUSNO='AB01';

15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);

16 IF FEXISTS_VAR=1 THEN

17 DBMS_OUTPUT.PUT_LINE('THE FILE EXISTS');

18 ELSE

19 DBMS_OUTPUT.PUT_LINE('THE FILE COULD NOT BE FOUND');

20 END IF;

21 DBMS_LOB.FILEGETNAME(LOC_VAR,DIR_ALIAS_VAR,FNAME);

22 DBMS_OUTPUT.PUT_LINE('FILE NAME IS:' || DIR_ALIAS_VAR || ' '|| FNAME);

23* END;

SQL> SQL> /THE FILE EXISTS FILE NAME IS:GOD AIRBUS_DESC1.DOC

PL/SQL procedure successfully completed.

1 DECLARE

2 LOC_VAR BFILE;

3 FEXISTS_VAR INTEGER;

4 FOPEN_VAR INTEGER;

5 NUM INTEGER;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

455

Page 456: Oracle Queries

ORACLE 6 OFFSET INTEGER;

7 LEN INTEGER;

8 DIR_ALIAS_VAR VARCHAR2(25);

9 FNAME VARCHAR2(30);

10 OUTPUT_VAR LONG;

11 BEGIN

12 SELECT AIRBUS_DET INTO LOC_VAR

13 FROM AIRBUS_DESC

14 WHERE AIRBUSNO='AB01';

15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);

16 IF FEXISTS_VAR=1 THEN

17 DBMS_OUTPUT.PUT_LINE('THE FILE EXISTS');

18 ELSE

19 DBMS_OUTPUT.PUT_LINE('THE FILE COULD NOT BE FOUND');

20 END IF;

21 DBMS_LOB.FILEGETNAME(LOC_VAR,DIR_ALIAS_VAR,FNAME);

22 DBMS_OUTPUT.PUT_LINE('FILE NAME IS:' || DIR_ALIAS_VAR || ' '|| FNAME);

23* END;

24 /

THE FILE EXISTS

FILE NAME IS:GOD AIRBUS_DESC1.DOC

PL/SQL procedure successfully completed.

1 DECLARE

2 LOC_VAR BFILE;

3 FEXISTS_VAR INTEGER;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

456

Page 457: Oracle Queries

ORACLE 4 FOPEN_VAR INTEGER;

5 NUM INTEGER;

6 OFFSET INTEGER;

7 LEN INTEGER;

8 DIR_ALIAS_VAR VARCHAR2(25);

9 FNAME VARCHAR2(30);

10 OUTPUT_VAR LONG;

11 BEGIN

12 SELECT AIRBUS_DET INTO LOC_VAR

13 FROM AIRBUS_DESC

14 WHERE AIRBUSNO='AB01';

15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);

16 IF FEXISTS_VAR=1 THEN

17 DBMS_OUTPUT.PUT_LINE('THE FILE EXISTS');

18 ELSE

19 DBMS_OUTPUT.PUT_LINE('THE FILE COULD NOT BE FOUND');

20 END IF;

21 DBMS_LOB.FILEGETNAME(LOC_VAR,DIR_ALIAS_VAR,FNAME);

22 DBMS_OUTPUT.PUT_LINE('FILE NAME IS:' || DIR_ALIAS_VAR || ' ' ||FNAME);

23 FOPEN_VAR := DBMS_LOB.FILEISOPEN(LOC_VAR);

24 IF FOPEN_VAR = 1 THEN

25 DBMS_OUTPUT.PUT_LINE('THE FILE IS OPEN');

26 ELSE

27 DBMS_OUTPUT.PUT_LINE('THE FILE IS BEING OPENED');

28 DBMS_LOB.FILEOPEN(LOC_VAR);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

457

Page 458: Oracle Queries

ORACLE 29 END IF;

30 NUM:=20;

31 OFFSET := 1;

32 DBMS_LOB.READ(LOC_VAR,NUM,OFFSET,OUTPUT_VAR);

33 DBMS_OUTPUT.PUT_LINE('THE FIRST 20 CHARACTERS ARE: ' || OUTPUT_VAR);

34 DBMS_LOB.FILECLOSE(LOC_VAR);

35* END;

SQL> /THE FILE EXISTS FILE NAME IS:GOD AIRBUS_DESC1.DOC THE FILE IS BEING OPENED THE FIRST 20 CHARACTERS ARE: ÐÏࡱá

PL/SQL procedure successfully completed.

1 DECLARE

2 LOC_VAR BFILE;

3 FEXISTS_VAR INTEGER;

4 FOPEN_VAR INTEGER;

5 NUM INTEGER;

6 OFFSET INTEGER;

7 LEN INTEGER;

8 DIR_ALIAS_VAR VARCHAR2(25);

9 FNAME VARCHAR2(30);

10 OUTPUT_VAR VARCHAR2(200);

11 BEGIN

12 SELECT AIRBUS_DET INTO LOC_VAR

13 FROM AIRBUS_DESC

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

458

Page 459: Oracle Queries

ORACLE 14 WHERE AIRBUSNO='AB01';

15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);

16 IF FEXISTS_VAR=1 THEN

17 DBMS_OUTPUT.PUT_LINE('THE FILE EXISTS');

18 ELSE

19 DBMS_OUTPUT.PUT_LINE('THE FILE COULD NOT BE FOUND');

20 END IF;

21 DBMS_LOB.FILEGETNAME(LOC_VAR,DIR_ALIAS_VAR,FNAME);

22 DBMS_OUTPUT.PUT_LINE('FILE NAME IS:' || DIR_ALIAS_VAR || ' ' ||FNAME);

23 FOPEN_VAR := DBMS_LOB.FILEISOPEN(LOC_VAR);

24 IF FOPEN_VAR = 1 THEN

25 DBMS_OUTPUT.PUT_LINE('THE FILE IS OPEN');

26 ELSE

27 DBMS_OUTPUT.PUT_LINE('THE FILE IS BEING OPENED');

28 DBMS_LOB.FILEOPEN(LOC_VAR);

29 END IF;

30 NUM:=20;

31 OFFSET := 1;

32 DBMS_LOB.READ(LOC_VAR,NUM,OFFSET,OUTPUT_VAR);

33 DBMS_OUTPUT.PUT_LINE('THE FIRST 20 CHARACTERS ARE: ' || OUTPUT_VAR);

34 DBMS_LOB.FILECLOSE(LOC_VAR);

35* END;

36 /THE FILE EXISTS FILE NAME IS:GOD AIRBUS_DESC1.DOC THE FILE IS BEING OPENED THE FIRST 20 CHARACTERS ARE: D0CF11E0A1B11AE1000000000000000000000000

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

459

Page 460: Oracle Queries

ORACLEPL/SQL procedure successfully completed.

1 DECLARE

2 LOC_VAR BFILE;

3 FEXISTS_VAR INTEGER;

4 FOPEN_VAR INTEGER;

5 NUM INTEGER;

6 OFFSET INTEGER;

7 LEN INTEGER;

8 DIR_ALIAS_VAR VARCHAR2(25);

9 FNAME VARCHAR2(30);

10 OUTPUT_VAR LONG;

11 BEGIN

12 SELECT AIRBUS_DET INTO LOC_VAR

13 FROM AIRBUS_DESC

14 WHERE AIRBUSNO='AB01';

15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);

16 IF FEXISTS_VAR=1 THEN

17 DBMS_OUTPUT.PUT_LINE('THE FILE EXISTS');

18 ELSE

19 DBMS_OUTPUT.PUT_LINE('THE FILE COULD NOT BE FOUND');

20 END IF;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

460

Page 461: Oracle Queries

ORACLE 21 DBMS_LOB.FILEGETNAME(LOC_VAR,DIR_ALIAS_VAR,FNAME);

22 DBMS_OUTPUT.PUT_LINE('FILE NAME IS:' || DIR_ALIAS_VAR || ' ' ||FNAME);

23 FOPEN_VAR := DBMS_LOB.FILEISOPEN(LOC_VAR);

24 IF FOPEN_VAR = 1 THEN

25 DBMS_OUTPUT.PUT_LINE('THE FILE IS OPEN');

26 ELSE

27 DBMS_OUTPUT.PUT_LINE('THE FILE IS BEING OPENED');

28 DBMS_LOB.FILEOPEN(LOC_VAR);

29 END IF;

30 NUM:=20;

31 OFFSET := 1;

32 DBMS_LOB.READ(LOC_VAR,NUM,OFFSET,OUTPUT_VAR);

33 DBMS_OUTPUT.PUT_LINE('THE FIRST 20 CHARACTERS ARE: ' || TO_CHAR(OUTPUT_VAR));

34 DBMS_LOB.FILECLOSE(LOC_VAR);

35* END;SQL> /THE FILE EXISTS FILE NAME IS:GOD AIRBUS_DESC1.DOC THE FILE IS BEING OPENED THE FIRST 20 CHARACTERS ARE: ÐÏࡱá

PL/SQL procedure successfully completed.

1 DECLARE

2 LOC_VAR BFILE;

3 FEXISTS_VAR INTEGER;

4 FOPEN_VAR INTEGER;

5 NUM INTEGER;

6 OFFSET INTEGER;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

461

Page 462: Oracle Queries

ORACLE 7 LEN INTEGER;

8 DIR_ALIAS_VAR VARCHAR2(25);

9 FNAME VARCHAR2(30);

10 OUTPUT_VAR VARCHAR2(200);

11 BEGIN

12 SELECT AIRBUS_DET INTO LOC_VAR

13 FROM AIRBUS_DESC

14 WHERE AIRBUSNO='AB01';

15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);

16 IF FEXISTS_VAR=1 THEN

17 DBMS_OUTPUT.PUT_LINE('THE FILE EXISTS');

18 ELSE

19 DBMS_OUTPUT.PUT_LINE('THE FILE COULD NOT BE FOUND');

20 END IF;

21 DBMS_LOB.FILEGETNAME(LOC_VAR,DIR_ALIAS_VAR,FNAME);

22 DBMS_OUTPUT.PUT_LINE('FILE NAME IS:' || DIR_ALIAS_VAR || ' ' ||FNAME);

23 FOPEN_VAR := DBMS_LOB.FILEISOPEN(LOC_VAR);

24 IF FOPEN_VAR = 1 THEN

25 DBMS_OUTPUT.PUT_LINE('THE FILE IS OPEN');

26 ELSE

27 DBMS_OUTPUT.PUT_LINE('THE FILE IS BEING OPENED');

28 DBMS_LOB.FILEOPEN(LOC_VAR);

29 END IF;

30 NUM:=20;

31 OFFSET := 1;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

462

Page 463: Oracle Queries

ORACLE 32 DBMS_LOB.READ(LOC_VAR,NUM,OFFSET,OUTPUT_VAR);

33 DBMS_OUTPUT.PUT_LINE('THE FIRST 20 CHARACTERS ARE: ' || TO_CHAR(OUTPUT_VAR));

34 DBMS_LOB.FILECLOSE(LOC_VAR);

35* END;

36 /THE FILE EXISTS FILE NAME IS:GOD AIRBUS_DESC1.DOC THE FILE IS BEING OPENED THE FIRST 20 CHARACTERS ARE: D0CF11E0A1B11AE1000000000000000000000000

PL/SQL procedure successfully completed.

SQL> /THE FILE EXISTS FILE NAME IS:GOD AIRBUS_DESC1.DOC THE FILE IS BEING OPENED THE FIRST 20 CHARACTERS ARE: D0CF11E0A1B11AE1000000000000000000000000

PL/SQL procedure successfully completed.

1 DECLARE

2 LOC_VAR BFILE;

3 FEXISTS_VAR INTEGER;

4 FOPEN_VAR INTEGER;

5 NUM INTEGER;

6 OFFSET INTEGER;

7 LEN INTEGER;

8 DIR_ALIAS_VAR VARCHAR2(25);

9 FNAME VARCHAR2(30);

10 OUTPUT_VAR VARCHAR2(200);

11 BEGIN

12 SELECT AIRBUS_DET INTO LOC_VAR

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

463

Page 464: Oracle Queries

ORACLE 13 FROM AIRBUS_DESC

14 WHERE AIRBUSNO='AB01';

15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);

16 IF FEXISTS_VAR=1 THEN

17 DBMS_OUTPUT.PUT_LINE('THE FILE EXISTS');

18 ELSE

19 DBMS_OUTPUT.PUT_LINE('THE FILE COULD NOT BE FOUND');

20 END IF;

21 DBMS_LOB.FILEGETNAME(LOC_VAR,DIR_ALIAS_VAR,FNAME);

22 DBMS_OUTPUT.PUT_LINE('FILE NAME IS:' || DIR_ALIAS_VAR || ' ' ||FNAME);

23 FOPEN_VAR := DBMS_LOB.FILEISOPEN(LOC_VAR);

24 IF FOPEN_VAR = 1 THEN

25 DBMS_OUTPUT.PUT_LINE('THE FILE IS OPEN');

26 ELSE

27 DBMS_OUTPUT.PUT_LINE('THE FILE IS BEING OPENED');

28 DBMS_LOB.FILEOPEN(LOC_VAR);

29 END IF;

30 NUM:=20;

31 OFFSET := 1;

32 DBMS_LOB.READ(LOC_VAR,NUM,OFFSET,OUTPUT_VAR);

33 DBMS_OUTPUT.PUT_LINE('THE FIRST 20 CHARACTERS ARE: ' || OUTPUT_VAR);

34 DBMS_LOB.FILECLOSE(LOC_VAR);

35* END;SQL> /THE FILE EXISTS FILE NAME IS:GOD AIRBUS_DESC1.DOC THE FILE IS BEING OPENED

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

464

Page 465: Oracle Queries

ORACLETHE FIRST 20 CHARACTERS ARE: D0CF11E0A1B11AE1000000000000000000000000

PL/SQL procedure successfully completed.

1 DECLARE

2 LOC_VAR BFILE;

3 FEXISTS_VAR INTEGER;

4 FOPEN_VAR INTEGER;

5 NUM INTEGER;

6 OFFSET INTEGER;

7 LEN INTEGER;

8 DIR_ALIAS_VAR VARCHAR2(25);

9 FNAME VARCHAR2(30);

10 OUTPUT_VAR VARCHAR2(200);

11 BEGIN

12 SELECT AIRBUS_DET INTO LOC_VAR

13 FROM AIRBUS_DESC

14 WHERE AIRBUSNO='AB01';

15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);

16 IF FEXISTS_VAR=1 THEN

17 DBMS_OUTPUT.PUT_LINE('THE FILE EXISTS');

18 ELSE

19 DBMS_OUTPUT.PUT_LINE('THE FILE COULD NOT BE FOUND');

20 END IF;

21 DBMS_LOB.FILEGETNAME(LOC_VAR,DIR_ALIAS_VAR,FNAME);

22 DBMS_OUTPUT.PUT_LINE('FILE NAME IS:' || DIR_ALIAS_VAR || ' ' ||FNAME);

23 FOPEN_VAR := DBMS_LOB.FILEISOPEN(LOC_VAR);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

465

Page 466: Oracle Queries

ORACLE 24 IF FOPEN_VAR = 1 THEN

25 DBMS_OUTPUT.PUT_LINE('THE FILE IS OPEN');

26 ELSE

27 DBMS_OUTPUT.PUT_LINE('THE FILE IS BEING OPENED');

28 DBMS_LOB.FILEOPEN(LOC_VAR);

29 END IF;

30 NUM:=20;

31 OFFSET := 1;

32 DBMS_LOB.READ(LOC_VAR,NUM,OFFSET,OUTPUT_VAR);

33 DBMS_OUTPUT.PUT_LINE('THE FIRST 20 CHARACTERS ARE: ' || OUTPUT_VAR);

34 LEN:=DBMS_LOB.GETLENGTH(LOC_VAR);

35 DBMS_OUTPUT.PUT_LINE(LEN);

36 DBMS_LOB.FILECLOSE(LOC_VAR);

37* END;

38 /THE FILE EXISTS FILE NAME IS:GOD AIRBUS_DESC1.DOC THE FILE IS BEING OPENED THE FIRST 20 CHARACTERS ARE: D0CF11E0A1B11AE1000000000000000000000000 19968

PL/SQL procedure successfully completed.

TYPES OF APPLICATION ARCHITECURES:

APPLICATIONS ARE DEVELOPED TO SUPPORT ORGANIZATIONS IN THEIR BUSSINESS OPERATIONS.APPLICATIONS ACCEPT INPUT,PROCESS THE DATA BASED ON BUSSINESS RULES, AND PROVIDE DATA AS OUTPUT.

THE FUNCTIONS PERFORMED BY AN APPLICATION CAN BE DIVIDED INTO THREE CATEGORIES.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

466

Page 467: Oracle Queries

ORACLEUSER SERVICES.

BUSSINESS SERVICES.

DATA SERVICES.

EACH CATEGEORY IS IMPLEMENTED AS A LAYER IN AN APPLICATION.

THE USER SERVICES LAYER CONSTITUTES THE FRONT-END OF A SOLUTION. IT IS ALSO CALLED A PRESENTATION LAYER BECAUSE IT PROVIDES AN INTERACTIVE USER INTERFACE.

THE BUSSINESS SERVICES LAYER CONTROLS THE ENFORCEMENT OF BUSSINESS RULES ON THE DATA OF AN ORGANIZATION.

FOR EXAMPLE, AN ORAGANIZATION MAY HAVE DECIDED THAT THE CREDIT LIMIT OF CLIENTS CANNOT EXCEED $200000.

THE BUSSINESS SERVICE LAYER PERFORMS VALIDATIONS PERTAINING TO BUSSINESS RULES. IT ENSURES THAT BACK END DOESN’T RECEIVE INCORRECT DATA.

THE DATA SERVICES LAYER COMPRISES THE DATA AND THE FUNCTIONS FOR MANIPULATING THIS DATA.

APPLICATIONS MAY VARY FROM SINGLE –TIER DESKTOP APPLICATIONS (APPLICATIONS THAT FOLLOW THE SINGLE –TIER ARCHITECTURE) TO MULTI-TIER APPLICATIONS( APPLICATIONS THE FOLLOW THE TWO ,THREE,OR N TIER ARCHITECTURE.

SINGLE_TIER ARCHITECTURE:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

467

Page 468: Oracle Queries

ORACLEIN THE CASE OF THE SINGLE – TIER ARCHITECTURE, A SINGLE EXECUTABLE FILE HANDLES ALL FUNCTIONS RELATING TO THE USER,BUSSINE AND DATA SERVICE LAYERS.

SUCH AN APPLICATION IS ALSO CALLED A MONOLITHIC APPLICATION.

SOME OF THE VERY EARLY COBOL PROGRAMS PERFORMING EXTREMELY MISSION – CRITICAL OPERATIONS FALL UNDER THIS CATEGORY.

MONOLITHIC APPLICATIONS

TWO-TIER ARCHITECTURE:

THE TWO – TIER ARCHITECTURE DIVIDES AN APPLICATION IN TO THE FOLLOWING TWO COMPONENTS:

CLIENT : IMPLEMENTS THE USER INTERFACE.

SERVER : STORES DATA.

THUS , IN THE CASE OF THE TWO-TIER ARCHITECTURE , THE USER AND DATA SERVICES ARE LOCATED SEPARATELY, EITHER ON THE SAME MACHINE OR ON SEPARATE MACHINES. FOR EXAMPLE YOU MIGHT HAVE A VISUAL BASIC APPLICATION, WHICH PROVIDES THE USER INTERFACE AND SQL SERVER 7.0 WHICH MANAGES DATA.

IN THE TWO-TIER ARCHITECTURE, THE BUSSINESS SERVICES LAYER MAY BE IMPLEMENTED IN ONE OF THE FOLLOWING WAYS:

BY USING FAT CLIENT.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

468

USER SERVICES

BUSSINESS SERVICES

DATA SERVICES

Page 469: Oracle Queries

ORACLEBY USING FAT SERVER.

BY DIVIDING THE BUSSINESS SERVICES BETWEEN THE USER SERVICES AND THE DATA SERVICES.

FAT CLIENT :

IN THE CASE OF FAT CLIENTS,THE BUSSINESS SERVICES LAYER IS COMBINED WITH THE USER SERVICES LAYER. CLIENTS EXECUTE THE PRESENTATION LOGIC AND ENFORCES BUSSINESS RULES.

THE SERVER STORES DATA AND PROCESSESS TRANSACTIONS. THE FAT CLIENT MODEL IS USED WHEN THE SERVER IS OVERLOADED WITH TRASACTION PROCESSING ACTIVITIES AND IS NOT EQUIPPED TO PROCESS BUSSINESS LOGIC.

FAT CLIENTCLIENT

USER TIERBUSSINESS LOGIC.

FAT SERVER:

IN A TWO –TIER ARCHITECTURE WITH A FAT SERVER, THE BUSSINESS SERVICES LAYER IS COMBINED WITH THE DATA SERVICES LAYER. AS BUSSINESS SERVICES ARE STORED ON THE SERVER,MOST OF THE PROCESSING TAKES PLACE ON THE SERVER.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

SERVER

469

DATA TIER.

Page 470: Oracle Queries

ORACLECLIENT.

USER TIER.

FAT SERVER. BUSSINESSLOGIC.

DIVIDING BUSSINESS SERVICES BETWEEN THE USER AND DATA SERVICES:

YOU CAN ALSO IMPLEMENT A TWO-TIER MODEL IN WHICH THE BUSSINESS SERVICES ARE DISTRIBUTED BETWEEN THE USER AND DATA SERVICES. IN THIS CASE , THE PROCESSING OF BUSSINESS LOGIC IS DISTRIBUTED BETWEEN THE USER AND DATA SERVICES.

THREE-TIER ARCHITECTURE:

IN THE CASE OF THE THREE-TIER ARCHITECTURE, ALL THE THREE SERVICES LAYERS RESIDE SEPARETLEY, EITHER ON THE SAME MACHINE OR ON DIFFERENT MACHINES.

THE USER INTERFACE INTERACTS WITH THE BUSSINESS LOGIC. THE BUSSINESS LOGIC VALIDATES THE DATA SENT BY THE INTERFACES AND FORWARDS IT TO THE DATABASE IF IT CONFORMS TO THE REQUIREMENTS.

THE FRONT END ONLY INTERACTS WITH BUSINESS LOGIC, WHICH IN TURN, INTERACTS WITH THE DATABASE.

CLIENT.USER SERVICES.

BUSSINESS LOGIC.BUSSINESS SERVICES.

SERVER.DATA SERVICES.

N-TIER ARCHITECTURE.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

470

SERVER.DATA TIER.

Page 471: Oracle Queries

ORACLEAN N-TIER APPLICATIONS USES BUSSINESS OBJECTS FOR HANDLING BUSSINESS RULES AND DATA ACCESS. IT HAS MULTIPLE SERVERS HANDLING THE BUSSINESS SERVICES.

THIS APPLICATION ARCHITECTURE PROVIDES VARIOUS ADVANTAGES OVER OTHER TYPES OF APPLICATION ARCHITECTURES.

SOME OF THE ADVANTAGES INCLUDES EXTENSIBILITY, RESILIENCE TO CHANGE . MAINTAINABILITY, AND SCALABILITY OF THE APPLICATION.

SUBPROGRAMS:

SQL> DROP TABLE DEPT1;

Table dropped.

1 CREATE TABLE DEPT1 2 AS 3* SELECT * FROM DEPT 4 /

Table created.

SQL> DELETE FROM DEPT1;

4 rows deleted.

SQL> CREATE OR REPLACE PROCEDURE ADDDEPT

2 (P_DEPTNO IN DEPT1.DEPTNO%TYPE,

3 P_DNAME IN DEPT1.DEPTNO%TYPE,

4 P_LOC IN DEPT1.DEPTNO%TYPE)

5 AS

6 BEGIN

7 INSERT INTO DEPT1 VALUES

8 (P_DEPTNO,P_DNAME,P_LOC);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

471

Page 472: Oracle Queries

ORACLE 9 END;

10 /

Procedure created.

SQL> DECLARE

2 V_DEPTNO DEPT1.DEPTNO%TYPE:=10;

3 V_DNAME DEPT1.DNAME%TYPE:='ACCOUNTING';

4 V_LOC DEPT1.LOC%TYPE:='NEW YORK';

5 BEGIN

6 ADDDEPT(V_DEPTNO,V_DNAME,V_LOC);

7 END;

8 /

PL/SQL procedure successfully completed.

SQL> SELECT * FROM DEPT1;

DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK

THE VARIABLES DECLARED IN THE PRECEDING BLOCK V_DEPTNO,V_DNAME,V_LOC ARE PASSED AS ARGUMENTS TO ADDDEPT. IN THIS CONTEXT, THEY ARE KNOWN AS ACTUAL PARAMETERS.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

472

Page 473: Oracle Queries

ORACLEWHERE AS PARAMETERS IN THE PROCEDURE DECLARATION OF ADDDEPT(P_DEPTNO,P_DNAME,P_LOC) ARE KNOWN AS FORMAL PARAMETERS.

ACTUAL PARAMETERS CONTAINS THE VALUES PASSED TO THE PROCEDURE WHEN IT IS CALLED, AND THEY RECEIVE RESULTS FROM THE PROCEDURE WHEN IT RETURNS (DEPENDING UPON MODE).

THE VALUES OF THE ACTUAL PARAMETERS ARE THE ONES THAT WILL BE USED IN PROCEDURE.

THE FORMAL PARAMETERS ARE THE PLACE HOLDERS FOR THE VALUES OF THE ACTUAL PARAMETERS.

WHEN THE PROCEDURE IS CALLED, THE FORMAL PARAMETERS ARE ASSIGNED THE VALUES OF THE ACTUAL PARAMETERS.

WHEN THE PROCEDURE RETURNS, THE ACTUAL PARAMETERS ARE ASSIGNED THE VALUES OF THE FORMAL PARAMETERS.

1 CREATE OR REPLACE PROCEDURE MODETEST

2 (P_INPARAMETER IN NUMBER,

3 P_OUTPARAMETER OUT NUMBER,

4 P_INOUTPARAMETER IN OUT NUMBER) IS

5 V_LOCALVARIABLE NUMBER :=0;

6 BEGIN

7 DBMS_OUTPUT.PUT_LINE('INSIDE MODE TEST');

8 IF (P_INPARAMETER IS NULL) THEN

9 DBMS_OUTPUT.PUT_LINE('P_INPARAMETER IS NULL');

10 ELSE

11 DBMS_OUTPUT.PUT_LINE('P_INPARAMETER = ' ||P_INPARAMETER);

12 END IF;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

473

Page 474: Oracle Queries

ORACLE 13 IF (P_OUTPARAMETER IS NULL) THEN

14 DBMS_OUTPUT.PUT_LINE('P_OUTPARAMETER IS NULL');

15 ELSE

16 DBMS_OUTPUT.PUT_LINE('P_OUTPARAMETER = ' ||P_OUTPARAMETER);

17 END IF;

18 IF (P_INOUTPARAMETER IS NULL) THEN

19 DBMS_OUTPUT.PUT_LINE('P_INOUTPARAMETER IS NULL');

20 ELSE

21 DBMS_OUTPUT.PUT_LINE('P_INOUTPARAMETER = ' ||P_INOUTPARAMETER);

22 END IF;

23 /* ASSIGN P_INPARAMTER TO V_LOCALVARIABLE. THIS IS LEGAL */

24 V_LOCALVARIABLE := P_INPARAMETER; -- LEGAL;

25 /* ASSIGN 9 TO P_INPARAMTER.THIS IS ILLEGAL */

26 --P_INPARAMETER:=9;--ILLEGAL

27 /* ASSIGN 9 TO P_OUTPARAMTER.THIS IS LEGAL */

28 P_OUTPARAMETER:=7;--LEGAL

29 /* ASSIGN P_OUTPARAMTER TO V_LOCAL VARIBALE .THIS IS LEGAL */

30 V_LOCALVARIABLE :=P_OUTPARAMETER;--LEGAL

31 /* ASSIGN P_INOUTPARAMTER TO V_LOCAL VARIBALE .THIS IS LEGAL */

32 V_LOCALVARIABLE :=P_INOUTPARAMETER;--LEGAL

33 /* ASSIGN 9 TO P_INOUTPARAMTER.THIS IS LEGAL */

34 P_INOUTPARAMETER:=9;--LEGAL

35 DBMS_OUTPUT.PUT_LINE('AT END OF MODETEST');

36 IF (P_INPARAMETER IS NULL) THEN

37 DBMS_OUTPUT.PUT_LINE('P_INPARAMETER IS NULL');

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

474

Page 475: Oracle Queries

ORACLE 38 ELSE

39 DBMS_OUTPUT.PUT_LINE('P_INPARAMETER = ' ||P_INPARAMETER);

40 END IF;

41 IF (P_OUTPARAMETER IS NULL) THEN

42 DBMS_OUTPUT.PUT_LINE('P_OUTPARAMETER IS NULL');

43 ELSE

44 DBMS_OUTPUT.PUT_LINE('P_OUTPARAMETER = ' ||P_OUTPARAMETER);

45 END IF;

46 IF (P_INOUTPARAMETER IS NULL) THEN

47 DBMS_OUTPUT.PUT_LINE('P_INOUTPARAMETER IS NULL');

48 ELSE

49 DBMS_OUTPUT.PUT_LINE('P_INOUTPARAMETER = ' ||P_INOUTPARAMETER);

50 END IF;

51* END MODETEST;

52 /

Procedure created.

PASSING VALUES BETWEEN FORMAL AND ACTUAL PARAMETERS:

SQL> DECLARE

2 V_IN NUMBER:=1;

3 V_OUT NUMBER:=2;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

475

Page 476: Oracle Queries

ORACLE 4 V_INOUT NUMBER:=3;

5 BEGIN

6 DBMS_OUTPUT.PUT_LINE('BEFORE CALLING MODETEST');

7 DBMS_OUTPUT.PUT_LINE('V_IN = ' || V_IN || ' V_OUT = ' || V_OUT || ' V_INOUT = ' || V_INOUT)

8 ;

9 MODETEST(V_IN,V_OUT,V_INOUT);

10 DBMS_OUTPUT.PUT_LINE('AFTER CALLING MODETEST');

11 DBMS_OUTPUT.PUT_LINE(' V_IN = ' || V_IN || ' V_OUT = ' || V_OUT || ' V_INOUT = ' || V_INOUT) 12 ; 13 END;

14 /

PL/SQL procedure successfully completed.

BEFORE CALLING MODETEST

V_IN = 1 V_OUT = 2 V_INOUT = 3

INSIDE MODE TEST

P_INPARAMETER = 1

P_OUTPARAMETER IS NULL

P_INOUTPARAMETER = 3

AT END OF MODETEST

P_INPARAMETER = 1

P_OUTPARAMETER = 7

P_INOUTPARAMETER = 9

AFTER CALLING MODETEST

V_IN = 1 V_OUT = 7 V_INOUT = 9

PL/SQL procedure successfully completed.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

476

Page 477: Oracle Queries

ORACLETHE OUTPUT SHOWS THAT THE OUT PARAMETER HAS BEEN INITIALIZED TO NULL INSIDE THE PROCEDURE.ALSO THE VALUES OF THE IN AND IN OUT FORMAL PARAMETERS AT THE END OF THE PROCEDURE HAVE BEEN COPIED BACK TO THE ACTUAL PARAMETERS WHEN THE PROCEDURE ENDS.

LITERALS OR CONSTANTS AS ACTUAL PARAMETERS:

HERE WE REPALCED IN PARAMETER WITH LITERAL.

1 DECLARE

2 V_OUT NUMBER :=2;

3 V_INOUT NUMBER :=3;

4 BEGIN

5 MODETEST(1,V_OUT,V_INOUT);

6* END;

SQL> /

INSIDE MODE TEST

P_INPARAMETER = 1

P_OUTPARAMETER IS NULL

P_INOUTPARAMETER = 3

AT END OF MODETEST

P_INPARAMETER = 1

P_OUTPARAMETER = 7

P_INOUTPARAMETER = 9

PL/SQL procedure successfully completed.

HERE IF WE REPLACE V_OUT WITH LITERAL.

1 DECLARE 2 V_INOUT NUMBER :=3;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

477

Page 478: Oracle Queries

ORACLE 3 BEGIN 4 MODETEST(1,2,V_INOUT); 5* END; 6 /

MODETEST(1,2,V_INOUT); *ERROR at line 4:ORA-06550: line 4, column 12: PLS-00363: expression '2' cannot be used as an assignment target ORA-06550: line 4, column 1: PL/SQL: Statement ignored

COMPILATION CHECKS:

THE PL/SQL COMPILER WILL CHECK FOR LEGAL ASSIGNMENTS WHEN THE PROCEDURE IS CREATED.

FOR EXAMPLE, IF WE REMOVE THE COMMENTS ON THE ASSIGNMENT TO P_INPARAMETER,MODE TEST GENERATES THE FOLLOWING ERROR IF WE ATTEMPT TO COMPILE IT.

PLS-363:EXPRESSION ‘P_INPARAMETER’ CANNOT BE USED AS AN ASSIGNMENT TARGET.

READING FROM OUT PARAMETERS:

PRIOR TO VERSION 7.3.4 AND IN 8.0.3, IT IS ILLEGAL TO READ FROM AN OUT PARAMETER IN A PROCEDURE.

IF YOU ATTEMPT TO COMPILE MODETEST AGAINST AN 8.0.3 DATABASE,WE RECEIVE THE FOLLOWING ERROR MESSAGE.

PLS-00365:

‘P_OUTPARAMETER’ IS AN OUT PARAMETER AND CANNOT READ.

ORACLE VERSION LEGAL TO READ OUT PARAMETERS?

PRIOR TO 7.3.4 NO

7.3.4 YES

8.0.3 NO

8.0.4 AND HIGHER YES.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

478

Page 479: Oracle Queries

ORACLECONSTRAINTS ON FORMAL PARAMETERS:

1 CREATE OR REPLACE PROCEDURE PARAMETERLENGTH

2 (P_PARAMETER1 IN OUT VARCHAR2(10),

3 P_PARAMETER2 IN OUT NUMBER(3,1)) AS

4 BEGIN

5 P_PARAMETER1:='ABCDEFGHIJKLM';

6 P_PARAMETER2 :=12.3;

7* END;

THE CORRECT DECLARATION FOR THIS PROCEDURE WOULD BE.

1 CREATE OR REPLACE PROCEDURE PATAMETERLENGTH

2 (P_PARAMETER1 IN OUT VARCHAR2,

3 P_PARAMETER2 IN OUT NUMBER) AS

4 BEGIN

5 P_PARAMETER1:='ABCDEFGHIJKLM';

6 P_PARAMETER2 :=12.3;

7* END;SQL> /

Procedure created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

479

Page 480: Oracle Queries

ORACLESO,WHAT ARE THE CONSTRAINTS ON P_PARAMETER1 AND P_PARAMETER2?THEY COME FROM THE ACTUAL PARAMETERS. IF WE CALL PARAMETERLENGTH WITH.

1 DECLARE 2 V_VARIABLE1 VARCHAR2(40);

3 V_VARIABLE2 NUMBER(7,3); 4 BEGIN

5 PARAMETERLENGTH(V_VARIABLE1,V_VARIABLE2);

6* END;

SQL> /

PL/SQL procedure successfully completed.

HERE P_PARAMETER1 WILL HAVE A MAXIMUM LENGHT OF 40(COMING FROM THE ACTUAL PARAMETER V_VARIABLE1) AND P_PARAMETER2 WILL HAVE PRECISION 7 AND SCALE 3(COMING FROM THE ACTUALPARAMETER V_VARIABLE2. IT IS VERY IMPORTANT.

SQL> DECLARE

2 V_VARIABLE1 VARCHAR2(10);

3 V_VARIABLE2 NUMBER(7,3);

4 BEGIN

5 PARAMETERLENGTH(V_VARIABLE1,V_VARIABLE2);

6 END;

7 /

DECLARE*ERROR at line 1:ORA-06502: PL/SQL: numeric or value error: character string buffer too small ORA-06512: at "SCOTT.PARAMETERLENGTH", line 5 ORA-06512: at line 5

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

480

Page 481: Oracle Queries

ORACLETHE ONLY DIFFERENCE BETWEEN THIS BLOCK AND THE PRIOR ONE IS THE V_VARIABLE1,AND HENCE P_PARAMETER1 HAS A LENGTH OF 10 RATHER THAN 40.BECAUSE PARAMETERLENGTH ASSIGNS A CHARACTER STRING OF LENGTH 15 TO P_PARAMETER1(AND HENCE V_VARIABLE1), THERE IS NOT ENOUGH ROOM IN THE STRING.

THE SOURCE OF THE ERROR IS NOT IN THE PROCEDURE- IT IS IN THE CODE THAT CALLS THE PROCEDURE.IN ADDITION ,THE ORA-6502 IS RUNTIME ERROR, NOT COMPILE TIME ERROR.THUS PROCEDURE CREATED SUCCESFULLY.HERE ERROR WAS ACTUALLY RAISED WHEN THE PROCEDURE RETURNED AND THE PL/SQL ENGINE ATTEMPTED TO COPY THE ACTUAL VALUE 'ABCDEFGHIJKLMNO' INTO THE FORMAL PARAMETER.

%TYPE AND PROCEDURE PARAMETERS:

SQL> CREATE TABLE TEST 2 (NO NUMBER(3));

1 CREATE OR REPLACE PROCEDURE PARAMETERLENGHT1 2 (P_PARAMETER1 IN OUT VARCHAR2, 3 P_PARAMETER2 IN OUT TEST.NO%TYPE) 4 AS 5 BEGIN 6 P_PARAMETER2 :=12345; 7* END; 8 /

Procedure created.

HERE P_PARAMETER2 WILL BE CONSTRAINED WITH PRECISION OF 3, BECAUSE THAT IS THE PRECISION OF THE TEST TABLE NO COLUMN.EVEN IF WE CALL PARAMETERLENGTH WITH AN ACTUAL PARAMETER OF ENOUGH PRECISION,THE FORMAL PRECISION IS TAKEN.

1 DECLARE

2 V_VARIABLE1 VARCHAR2(1);

3 V_VARIABLE2 NUMBER; -- DECLARED VARIABLE WITH NO CONSTRAINTS.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

481

Page 482: Oracle Queries

ORACLE 4 BEGIN

5 /* HERE EVEN THOUGH THE ACTUAL PARAMETER HAS ROOM FOR 12345, THE CONSTRAINT ON THE FORMAL 6 PARAMETER IS TAKEN AND WE GET ORA-6502 ON THIS PROCEDURE CALL. */

7 PARAMETERLENGHT1(V_VARIABLE1,V_VARIABLE2);

8* END;

SQL> /

DECLARE*ERROR at line 1:ORA-06502: PL/SQL: numeric or value error: number precision too large ORA-06512: at "SCOTT.PARAMETERLENGHT1", line 6 ORA-06512: at line 7

CREATING, ALTERING AND DROPING STORTED PROCEDURES:

THERE ARE TWO MAIN WAYS TO CREATE PROCEDURE:

1.USING THE CREATE PROCEDURE COMMAND IN A PL/SQL COMMAND SCRIPT THAT EXECUTES IN THE SQL*PLUS COMMAND LINE INTERFACE.

2. USING GUI TOOLS,SUCH AS PROCEDURE BUILDER.

POINTS TO REMEMBER WHILE CREATING STORED PROCEDURES:

CREATE OR [REPLACE] PROCDURE PROCEDURE_NAME

[(ARGUMENT[{IN|OUT|IN OUT}] TYPE,……[(ARGUMENT[{IN|OUT|IN OUT}] TYPE]

{ IS|AS}

PROCEDURE BODY.

CREATE OR REPLACE PROCEDURE PROCEDURE_NAME [ PARAMETER LIST]IS/AS/* DECLARATIVE SECTION*/BEGIN

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

482

Page 483: Oracle Queries

ORACLE/* EXECUTABLE SECTION*/EXCEPTION/* EXEPTION SECTION*/END [PROCEDURE_NAME];

THE RESERVED WORDS CREATE PROCEDURE.

THE NAME OF STORED PROCEDURE CAN BE UP TO 30 CHARACTERS NO SPACES.

THE RESERVED WORD IS OR THE RESERVED WORD AS – EITHER IS ACCEPTED.

A VALID PL/SQL BLOCK.

THE KEY WORDS BEGIN AND END ARE REQUIRED.

EXCEPTION IS OPTIONAL.

THE KEY WORD DECLARE ,HOWEVER NEVER USED.

INSTEAD OF USING DECLARE TO BEGIN THE OPTIONAL DECLARATIVE SECTION OF THE BLOCK, MAKE ANY DECLARATIONS AFTER THE RESERVED WORD IS AND BEFORE THE RESERVED WORD BEGIN.

WE TYPE SLASH (/) AT THE END OF FILE.WE USE THAT TO SUBMIT THE PL/SQL BLOCK TO THE SQL*PLUS INTERFACE FOR PROCESSING.

WHEN U SUBMIT A CREATE PROCEDURE COMMAND TO SQL*PLUS THE FOLLOWING HAPPENS:

THE CODE STORED IN THE DATA DICTIONARY.

THE CODE IS PARSED FOR SYNTAX AND DETERMINED TO BE EITHER VALID OR INVALID.

IF THE CODE IS VALID, YOU ARE PROVIDED WITH A PROCEDURE CREATED MESSAGE,AND PROCEDURE IS NOW GIVEN A STATUS OF VALID AND IS AVALIABLE FOR EXECUTION.

IF THE CODE IS INVALID, YOU ARE PROVIDED WITH SOME SORT OF ERROR MESSAGE, AND THE CODE, WHICH IS NOW STORED IN THE DATA DICTIONARY, IS GIVEN A STATUS OF INVALID AND NOT AVALIABLE FOR EXECUTION.

PLEASE NOTE THE WHETHER THE PROCEDURE IS SUCCESFULLY PARSED OR NOT, IT WILL BE STORED IN THE DATA DICTIONARY.

ONCE PROCEDURE IS STORED IN TH DATABASE,YOU CANNOT CREATE ANOTHER PROCEDURE WITH SAME NAME. U WILL GET ERROR.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

483

Page 484: Oracle Queries

ORACLEHOWEVER , AN OPTION IN THE CREATE PROCEDURE COMMAND THAT IS ‘OR REPLACE’ ENABLES U TO AUTOMATICALLY OVERWRITE ANY PREEXISTING PROCEDURE OF THE SAME NAME.

THE OR REPLACE OPTION IN THE CREATE PROCEDURE COMMAND GUARANTEES THAT THE PROCEDURE IS CREATED AND STORED ,WHETHER AN EXISTING PROCEDURE OF THE SAME NAME IS ALREADY STORED IN DATABASE OR NOT.

PROCEDURES OPTIONALLY INCLUDE SOMETHING CALLED AN END LABEL.WHICH IS THE NAME OF THE PROCEDURE REPEATED AFTER THE END STATEMENT.

CREATE OR REPLACE PROCEDURE GAYATRI

IS

BEGIN

-- CLEAN OUT THE DEPT TABLE;

DELETE FROM DEPT;

COMMIT;

END GAYATRI;

/

THE ADVANTAGE TO AN END LABEL BECOMES MORE IMPORTANT ONCE YOU BEGIN COMBINING MANY PROCEDURES IN TO A PACKAGE,WHEN SEVERAL PROCEDURES ARE INCLUDED ONE AFTER ANOTHER. AT THAT TIME IT MAY BE DIFFICULT TO BE SURE WHERE ONE PROCEDURE ENDS AND ANOTHER PROGRAM BEGINS.THE USE OF THE END LABEL CAN HELP PREVENT CONFUSSION.

ALTERING PROCEDURES:

ONCE PROCEDURE HAS BEEN CREATED, YOU CAN USE TWO METHODS TO “ALTER” THE PROCEDURE.IF YOU ARE REPLACING THE ORIGINAL SOURCE CODE WITH NEW SET OF SOURCE CODE, USE THE OR REPLACE OPTION.

IF HOWEVER YOU ARE RECOMPILING THE PROCEDURE WITHOUT CHANGING THE CODE,THEN USE THE ALTER PROCEDURE COMMAND.

WE USE ALTER PROCEDURE WHEN ANY OBJECT WHICH IS REFERENCED FROM WITHIN YOUR PROCEDURE SUCH AS TABLE HAS BEEN CHANGED.THIS AUTOMATICALLY CAUSES PROCEDURE TO BE FLAGGED TO INVALID.

SQL> DROP TABLE DEPT_DUP;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

484

Page 485: Oracle Queries

ORACLETable dropped.

SQL> CREATE TABLE DEPT_DUP 2 AS 3 SELECT * FROM DEPT;

Table created.

SQL> CREATE OR REPLACE PROCEDURE GAYATRI 2 AS 3 BEGIN 4 DELETE FROM DEPT_DUP 5 WHERE DEPTNO=10; 6 COMMIT; 7 END; 8 /

Procedure created.

SQL> DESC USER_OBJECTS Name Null? Type ----------------------------------------------------- -------- ------------------------------------ OBJECT_NAME VARCHAR2(128) SUBOBJECT_NAME VARCHAR2(30) OBJECT_ID NUMBER DATA_OBJECT_ID NUMBER OBJECT_TYPE VARCHAR2(18) CREATED DATE LAST_DDL_TIME DATE TIMESTAMP VARCHAR2(19) STATUS VARCHAR2(7) TEMPORARY VARCHAR2(1) GENERATED VARCHAR2(1) SECONDARY VARCHAR2(1)

SQL> SELECT STATUS FROM USER_OBJECTS

2 WHERE OBJECT_NAME='GAYATRI' AND OBJECT_TYPE='PROCEDURE';

STATUS ------- VALID

SQL> DROP TABLE DEPT_DUP;

Table dropped.

SQL> SELECT STATUS FROM USER_OBJECTS 2 WHERE OBJECT_NAME='GAYATRI' AND OBJECT_TYPE='PROCEDURE';

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

485

Page 486: Oracle Queries

ORACLESTATUS ------- INVALID

SQL> CREATE TABLE DEPT_DUP 2 AS 3 SELECT * FROM DEPT;

Table created.

SQL> SELECT STATUS FROM USER_OBJECTS 2 WHERE OBJECT_NAME='GAYATRI' AND OBJECT_TYPE='PROCEDURE';

STATUS ------- INVALID

SQL> ALTER PROCEDURE GAYATRI 2 COMPILE;

Procedure altered.

SQL> SELECT STATUS FROM USER_OBJECTS 2 WHERE OBJECT_NAME='GAYATRI' AND OBJECT_TYPE='PROCEDURE';

STATUS ------- VALID

SQL> DROP PROCEDURE GAYATRI;

Procedure dropped.

INVOKING PROCEDURES:

ONCE A PROCEDURE HAS BEEN CREATED AND STORED IN THE DATABASE, IT CAN BE INVOKED FROM

AN EXECUTABLE STATEMENT OF A PL/SQL BLOCK.

A COMMAND ENTERED IN THE SQL*PLUS COMMAND LINE INTERFACE.

1 ST WAY:

BEGINGAYATRI;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

486

Page 487: Oracle Queries

ORACLEEND;

BEGIN

CALL GAYATRI;-- IT IS A STORED PROCEDURE.

IF CONDTION IS TRUE THEN

CALL PRATHIMA -- IT IS A STORED PROCEDURE.ELSE

CALL SRI;-- IT IS A STORED PROCEDURE.

END IF;

WHEN A PL/SQL BLOCK CALLS A PROCEDURE THE CALLING BLOCK TEMPORARILY SUSPENDS EXECUTION AT THE POINT OF THE PROCEDURE CALL AND WAITS WHILE THE CALLED PROCEDURE EXECUTES.

ONCE THE CALLED PROCEDURE COMPLETES EXECUTION, CONTROL PASSES BACK TO THE CALLING PL/SQL BLOCK, WHICH THEN PICKS UP WITH NEXT EXECUTABLE STATEMENT AFTER PROCEDURE CALL AND CONTINUES EXECUTION.

2 ND WAY:

EXECUTE GAYATRI;

EXEC GAYATRI;

DATA DICTIONARY RESOURCES FOR PROCEDURES:

USER_DEPENDENCIES:

IS A VIEW IN THE DATA DICTIONARY IS WHERE YOU WILL FIND THE RELATIONSHIPS THAT YOUR PROGRAM UNITS HAVE WITH THE DATABASE OBJECTS IN THE SAME SCHEMA AS WELL AS THOSE DATABASE OBJECTS IN OTHER SCHEMAS.

USER_OBJECTS:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

487

Page 488: Oracle Queries

ORACLETHIS VIEW CONTAINS A MASTER LIST OF ALL OBJECTS,INCLUDING TABLES ,VIEWS,SEQUENCES,SYNONYMS AND FOR OUR PURPOSES PL/SQL PROGRAM UNITS.

USER_OBJECT_SIZE:

THIS VIEW CONTAINS INFORMATION ABOUT THE SIZE OF THE OBJECTS THAT ARE LISTED IN USER_OBJECTS.

USER_SOURCE:

THIS IS WHERE ACTUAL SOURCE CODE OF THE PL/SQL PROGRAM UNITS IS FOUND.

USER_ERRORS:

THIS IS WHERE ERRORS RESULTING FROM COMPILATION ARE STORED.

THE EXECUTE IMMEDIATE STATEMENT:

THE EXECUTE IMMDEDIATE STATEMENT PARSES A DYNAMIC STATEMENT OR A PL/SQL BLOCK FOR IMMEDIATE EXECUTION AND HAS THE STRUCTURE SHOWN BELOW.

EXECUTE IMMEDIATE DYNAMIC_SQL_STRING[INTO DEFINED_VARIABLE1,DEFINED_VARIABLE2,…][USING [IN | OUT | IN OUT ] BIND_ARGUMENT1,BIND_ARGUMENT2,….]RETURNING INTO | RETURN BIND_ARGUMENT1,BIND_ARGUMENT2,….]

PL/SQL USES EARLY BINDING TO EXECUTE SQL STATEMENTS. THIS HASTHE CONSEQUENCE THAT ONLY DML STATEMENTS CAN BE INCLUDED DIRECTLY IN PL/SQL BLOCKS.THIS CAN BE RECTIFIED,HOWEVER,SQL> THROUGH DYNAMIC SQL.RATHER THAN BEING PARSED ALONG WITH THE PL/SQL BLOCK,DYNAMIC SQL IS PARSED AND SUBSEQUENTLY EXECUTED AT RUNTIME.THERE ARE TWO TECHNIQUES FOR EXECUTING DYNAMIC SQL IN PL/SQL.THE FIRST IS THE DBMS_SQL PACKAGE.THE SECOND TECHNIQUE, INTRODUCED IN ORACLE 8I, IS NATIVE DYNAMIC SQL.IT IS SIGNIFICANTLY SIMPLER TO USE AND FASTER THAN DBMS_SQL.

SQL> CREATE TABLE NATIVE 2 (EMPNO NUMBER(10));

Table created.

SQL> DROP TABLE NATIVE;

Table dropped.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

488

Page 489: Oracle Queries

ORACLESQL> BEGIN 2 CREATE TABLE NATIVE 3 (EMPNO NUMBER(10)); 4 END; 5 /CREATE TABLE NATIVE*ERROR at line 2:ORA-06550: line 2, column 1: PLS-00103: Encountered the symbol "CREATE" when expecting one of the following: begin case declare exit for go to if loop mod null pragma raise return select update while with <an identifier> <a double-quoted delimited-identifier> <a bind variable> << close current delete fetch lock insert open rollback save point set sol execute commit for all merge <a single-quoted SQL string> pipe

1 DECLARE 2 V_SQLSTRING VARCHAR2(200); 3 V_PLSQLBLOCK VARCHAR2(200); 4 BEGIN 5 --FIRST CREATE A TEMPORARY TABLE,USING A LITERAL. NOTE THAT 6 --THERE IS NO TRAILING SEMICOLON IN THE STRING. 7 EXECUTE IMMEDIATE 8 'CREATE TABLE NATIVE (EMPNO NUMBER(10))'; 9 --INSERT SOME ROWS USING A STRING.AGAIN, THERE IS NO TRAILING SEMICOLON INSIDE THE STRING. 10 FOR V_COUNTER IN 1..10 LOOP 11 V_SQLSTRING :='INSERT INTO NATIVE VALUES (' || V_COUNTER || ')'; 12 EXECUTE IMMEDIATE V_SQLSTRING; 13 END LOOP; 14 -- PRINT OUT THE CONTENTS OF THE TABLE USING AN ANONYMOUS PL/SQL BLOCK. HERE 15 --WE PUT THE ENTIRE BLOCK INTO A SINGLE STRING(INCLUDING THE SEMICOLON). 16 V_PLSQLBLOCK:= 17 'BEGIN 18 FOR V_REC IN (SELECT * FROM NATIVE) LOOP 19 DBMS_OUTPUT.PUT_LINE(V_REC.EMPNO); 20 END LOOP; 21 END;'; 22 -- AND NOW WE EXECUTE THE ANONYMOUS BLOCK. 23 EXECUTE IMMEDIATE V_PLSQLBLOCK; 24 --FINALLY , DROP THE TABLE. 25 EXECUTE IMMEDIATE 'DROP TABLE NATIVE'; 26* END;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

489

Page 490: Oracle Queries

ORACLESQL> /

PL/SQL procedure successfully completed.

SQL> SET SERVEROUTPUT ONSQL> /1 2 3 4 5 6 7 8 9 10

PL/SQL procedure successfully completed.

1 DECLARE 2 V_SQLSTRING VARCHAR2(200); 3 V_PLSQLBLOCK VARCHAR2(200); 4 BEGIN 5 --FIRST CREATE A TEMPORARY TABLE,USING A LITERAL. NOTE THAT 6 --THERE IS NO TRAILING SEMICOLON IN THE STRING. 7 EXECUTE IMMEDIATE 8 'CREATE TABLE NATIVE (EMPNO NUMBER(10))'; 9 --INSERT SOME ROWS USING A STRING.AGAIN, THERE IS NO TRAILING SEMICOLON INSIDE THE STRING. 10 FOR V_COUNTER IN 1..10 LOOP 11 V_SQLSTRING :='INSERT INTO NATIVE VALUES (' || V_COUNTER || ')'; 12 EXECUTE IMMEDIATE V_SQLSTRING; 13 END LOOP; 14 -- PRINT OUT THE CONTENTS OF THE TABLE USING AN ANONYMOUS PL/SQL BLOCK. HERE 15 --WE PUT THE ENTIRE BLOCK INTO A SINGLE STRING(INCLUDING THE SEMICOLON). 16 V_PLSQLBLOCK:= 17 'BEGIN 18 FOR V_REC IN (SELECT * FROM NATIVE) LOOP 19 DBMS_OUTPUT.PUT_LINE(V_REC.EMPNO); 20 END LOOP; 21 END;'; 22 -- AND NOW WE EXECUTE THE ANONYMOUS BLOCK. 23 EXECUTE IMMEDIATE V_PLSQLBLOCK; 24 --FINALLY , DROP THE TABLE. 25 --EXECUTE IMMEDIATE 'DROP TABLE NATIVE'; 26* END;SQL> /

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

490

Page 491: Oracle Queries

ORACLE1 2 3 4 5 6 7 8 9 10

PL/SQL procedure successfully completed.

SQL> DESC NATIVE Name Null? Type ----------------------------------------------------- -------- ------------------------------------ EMPNO NUMBER(10)

SQL> SELECT * FROM NATIVE;

EMPNO ---------- 1 2 3 4 5 6 7 8 9 10

10 rows selected.

1 DECLARE 2 V_SQLSTRING VARCHAR2(200); 3 V_PLSQLBLOCK VARCHAR2(200); 4 BEGIN 5 --FIRST CREATE A TEMPORARY TABLE,USING A LITERAL. NOTE THAT 6 --THERE IS NO TRAILING SEMICOLON IN THE STRING. 7 EXECUTE IMMEDIATE 8 'CREATE TABLE NATIVE1 (EMPNO VARCHAR(10))'; 9 --INSERT SOME ROWS USING A STRING.AGAIN, THERE IS NO TRAILING SEMICOLON INSIDE THE STRING. 10 FOR V_COUNTER IN 1..10 LOOP 11 V_SQLSTRING :='INSERT INTO NATIVE1 VALUES (''ROW' || V_COUNTER || ''')'; 12 EXECUTE IMMEDIATE V_SQLSTRING; 13 END LOOP;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

491

Page 492: Oracle Queries

ORACLE 14 -- PRINT OUT THE CONTENTS OF THE TABLE USING AN ANONYMOUS PL/SQL BLOCK. HERE 15 --WE PUT THE ENTIRE BLOCK INTO A SINGLE STRING(INCLUDING THE SEMICOLON). 16 V_PLSQLBLOCK:= 17 'BEGIN 18 FOR V_REC IN (SELECT * FROM NATIVE1) LOOP 19 DBMS_OUTPUT.PUT_LINE(V_REC.EMPNO); 20 END LOOP; 21 END;'; 22 -- AND NOW WE EXECUTE THE ANONYMOUS BLOCK. 23 EXECUTE IMMEDIATE V_PLSQLBLOCK; 24 --FINALLY , DROP THE TABLE. 25 --EXECUTE IMMEDIATE 'DROP TABLE NATIVE1'; 26* END;SQL> /ROW1 ROW2 ROW3 ROW4 ROW5 ROW6 ROW7 ROW8 ROW9 ROW10

PL/SQL procedure successfully completed.

SQL> DESC NATIVE1 Name Null? Type ----------------------------------------------------- -------- ------------------------------------ EMPNO VARCHAR2(10)

SQL> SELECT * FROM NATIVE1;

EMPNO ---------- ROW1 ROW2 ROW3 ROW4 ROW5 ROW6 ROW7 ROW8 ROW9 ROW10

10 rows selected.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

492

Page 493: Oracle Queries

ORACLE

SQL> SELECT * FROM MY_EMPLOYEE;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7839 KING PRESIDENT 17-NOV-81 5000 10 7934 MILLER CLERK 7782 23-JAN-82 1300 10

SQL> DECLARE 2 SQL_STMT VARCHAR2(100); 3 PLSQL_BLOCK VARCHAR2(300); 4 V_DEPTNO NUMBER(10) :=10; 5 V_TOTAL_EMPLOYEES NUMBER; 6 V_NEW_DEPTNO NUMBER(10); 7 BEGIN 8 --CREATE TABLE MY_EMPLOYEE 9 SQL_STMT := 'CREATE TABLE MY_EMPLOYEE ' || 10 'AS SELECT * FROM EMP WHERE DEPTNO = ' || V_DEPTNO; 11 EXECUTE IMMEDIATE SQL_STMT; 12 --INSERT RECORD INTO MY_EMPLOYEE TABLE 13 SQL_STMT:= 14 'INSERT INTO MY_EMPLOYEE 15 (EMPNO,ENAME,DEPTNO) 16 VALUES 17 (:EMPNO,:ENAME,:DEPTNO)'; 18 EXECUTE IMMEDIATE SQL_STMT USING 1,'PAVAN',10; 19 --SELECT TOTAL NUMBER OF RECORDS FROM MY_EMPLOYEE TABLE AND DISPLAY RESULTS 20 --ON THE SCREEN 21 EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM MY_EMPLOYEE' INTO V_TOTAL_EMPLOYEES; 22 DBMS_OUTPUT.PUT_LINE('EMPLOYEES: ' || V_TOTAL_EMPLOYEES); 23 --UPDATE RECORD IN MY_EMPLOYEE TABLE 24 SQL_STMT:= 25 'UPDATE MY_EMPLOYEE SET DEPTNO=9 WHERE EMPNO = :1 '|| 26 'RETURNING DEPTNO INTO :2'; 27 EXECUTE IMMEDIATE SQL_STMT USING 1 RETURNING INTO V_NEW_DEPTNO;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

493

Page 494: Oracle Queries

ORACLE 28 DBMS_OUTPUT.PUT_LINE('NEW DEPTNO:' ||V_NEW_DEPTNO); 29 END; 30 /EMPLOYEES: 4 NEW DEPTNO:9

PL/SQL procedure successfully completed.

1 DECLARE 2 SQL_STMT VARCHAR2(100); 3 BEGIN 4 --CREATE TABLE MY_EMPLOYEE1 5 SQL_STMT := 'CREATE TABLE MY_EMPLOYEE1 ' || 6 'AS SELECT * FROM EMP WHERE DEPTNO = :DEPTNO '; 7 EXECUTE IMMEDIATE SQL_STMT USING 10; 8* END; 9 /

DECLARE*ERROR at line 1:ORA-01027: bind variables not allowed for data definition operations ORA-06512: at line 7

A CREATE TABLE STATEMENT IS A DATA DEFINITION STATEMENT AND AS A RESULT IT CANNOT ACCEPTANY BIND ARGUMENTS

1 DECLARE 2 SQL_STMT VARCHAR2(100); 3 V_DEPTNO NUMBER(10) :=10; 4 V_TOTALEMPLOYEES NUMBER(10); 5 BEGIN 6 --CREATE TABLE MY_EMPLOYEE2 7 SQL_STMT := 8 'CREATE TABLE MY_EMPLOYEE2 ' || 9 'AS SELECT * FROM EMP ' || 10 'WHERE DEPTNO = ' || V_DEPTNO; 11 EXECUTE IMMEDIATE SQL_STMT; 12 --SELECT TOTAL NUMBER OF RECORDS FROM MY_EMPLOYEE2 TABLE 13 EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM :MY_TABLE' INTO V_TOTALEMPLOYEES USING 'MY_EMPLOYEE2' 14 ; 15 DBMS_OUTPUT.PUT_LINE(V_TOTALEMPLOYEES); 16* END;SQL> /DECLARE

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

494

Page 495: Oracle Queries

ORACLE*ERROR at line 1:ORA-00903: invalid table name ORA-06512: at line 13

SQL> DESC MY_EMPLOYEE2 Name Null? Type ----------------------------------------------------- -------- ------------------------------------ EMPNO NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2)

YOU CANNOT PASS NAMES OF SCHEMA OBJECTS TO DYNAMIC SQL STATEMENTS AS BIND ARGUMENTS.

1 DECLARE 2 SQL_STMT VARCHAR2(100); 3 V_DEPTNO NUMBER(10) :=10; 4 V_TOTALEMPLOYEES NUMBER(10); 5 BEGIN 6 --CREATE TABLE MY_EMPLOYEE2 7 SQL_STMT := 8 'CREATE TABLE MY_EMPLOYEE2 ' || 9 'AS SELECT * FROM EMP ' || 10 'WHERE DEPTNO = ' || V_DEPTNO; 11 EXECUTE IMMEDIATE SQL_STMT; 12 --SELECT TOTAL NUMBER OF RECORDS FROM MY_EMPLOYEE2 TABLE 13 EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || MY_EMPLOYEE2 INTO V_TOTALEMPLOYEES 14 ; 15 DBMS_OUTPUT.PUT_LINE(V_TOTALEMPLOYEES); 16* END;SQL> /EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || MY_EMPLOYEE2 INTO V_TOTALEMPLOYEES *ERROR at line 13:ORA-06550: line 13, column 46: PLS-00357: Table,View Or Sequence reference 'MY_EMPLOYEE2' not allowed in this context ORA-06550: line 13, column 1: PL/SQL: Statement ignored

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

495

Page 496: Oracle Queries

ORACLE

SQL> DECLARE 2 SQL_STMT VARCHAR2(100); 3 V_DEPTNO NUMBER(10) :=10; 4 V_TOTALEMPLOYEES NUMBER(10); 5 BEGIN 6 --CREATE TABLE MY_EMPLOYEE2 7 SQL_STMT := 8 'CREATE TABLE MY_EMPLOYEE2 ' || 9 'AS SELECT * FROM EMP ' || 10 'WHERE DEPTNO = ' || V_DEPTNO; 11 EXECUTE IMMEDIATE SQL_STMT; 12 --SELECT TOTAL NUMBER OF RECORDS FROM MY_EMPLOYEE2 TABLE 13 EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || 'MY_EMPLOYEE2' INTO V_TOTALEMPLOYEES ; 14 DBMS_OUTPUT.PUT_LINE(V_TOTALEMPLOYEES); 15 END; 16 /3

PL/SQL procedure successfully completed.

SQL> DECLARE 2 SQL_STMT VARCHAR2(100); 3 V_DEPTNO NUMBER(10) :=10; 4 V_TOTALEMPLOYEES NUMBER(10); 5 BEGIN 6 --CREATE TABLE MY_EMPLOYEE2 7 SQL_STMT := 8 'CREATE TABLE MY_EMPLOYEE2 ' || 9 'AS SELECT * FROM EMP ' || 10 'WHERE DEPTNO = ' || V_DEPTNO; 11 EXECUTE IMMEDIATE SQL_STMT; 12 --SELECT TOTAL NUMBER OF RECORDS FROM MY_EMPLOYEE2 TABLE 13 EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM MY_EMPLOYEE2;' INTO V_TOTALEMPLOYEES ; 14 DBMS_OUTPUT.PUT_LINE(V_TOTALEMPLOYEES); 15 END; 16 / DECLARE*ERROR at line 1:ORA-00911: invalid character ORA-06512: at line 13

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

496

Page 497: Oracle Queries

ORACLETHE SEMICOLON ADDED TO THE SELECT STATEMENT IS TREATED AS AN INVALID CHARACTER WHENTHE STATEMENT IS CREATED DYNAMICALLY.

NESTED TABLES:

SQL> CREATE TYPE BOOKS_TYPE AS OBJECT 2 (BOOK_NO NUMBER(4), 3 BOOK_TITLE VARCHAR2(20), 4 AUTHOR VARCHAR2(10)); 5 /

Type created.

SQL> CREATE TYPE BOOKS AS TABLE OF BOOK_TYPE; 2 /

Warning: Type created with compilation errors.

SQL> SHOW ERRORSErrors for TYPE BOOKS:

LINE/COL ERROR -------- ----------------------------------------------------------------- 0/0 PL/SQL: Compilation unit analysis terminated 1/24 PLS-00201: identifier 'BOOK_TYPE' must be declared SQL> CREATE OR REPLACE TYPE BOOKS AS TABLE OF BOOKS_TYPE; 2 /

Type created.

CREATING TABLE USING NESTED TABLE;

SQL> CREATE TABLE STUDENT 2 (STUDENT_NO NUMBER(10) CONSTRAINT STUDENT_PK PRIMARY KEY, 3 STUDENT_NAME VARCHAR2(10), 4 BOOKS_ISSUED BOOKS) 5 NESTED TABLE BOOKS_ISSUED STORE AS BOOK_TABLE;

Table created.

BOOKS_ISSUED IS A COLUMN OF TABLE TYPE BOOKS AND BOOK_TABLE IS THE SYSTEM GENERATED TABLE WHICH WILL CONTAIN THE DATA ACTUALLY STORED IN THE NESTED TABLE.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

497

Page 498: Oracle Queries

ORACLEEACH ROW OF THE TABLE CONTAINS A NESTED TABLE.

TO INSERT ROWS IN THE NESTED TABLE, WE NEED TO USE THE CONSTRUCTOR METHOD PROVIDED BY ORACLE.

1 INSERT INTO STUDENT 2 VALUES 3 (100,'PAVAN',BOOKS(BOOKS_TYPE(01,'ORACLE IN 21 DAYS','KEVIN'), 4* BOOKS_TYPE(02,'ORACLE IN 9 DAYS','SMITH')))SQL> /

1 row created.

SQL> EDWrote file afiedt.buf

1 INSERT INTO STUDENT 2 VALUES 3 (101,'KUMAR',BOOKS(BOOKS_TYPE(01,'ORACLE IN 21 DAYS','KEVIN'), 4* BOOKS_TYPE(02,'ORACLE IN 9 DAYS','SMITH'))) 5 /

1 row created.

BOOKS IS THE CONSTRUCTOR METHOD FOR TABLE TYPE BOOKS AND BOOKS_TYPE IS THE CONSTRUCTOR METHOD FOR OBJECT TYPE BOOKS_TYPE.

IN PL/SQL:

SQL> DECLARE 2 BOOK_VAR BOOKS; 3 BEGIN 4 BOOK_VAR:=BOOKS(BOOKS_TYPE(03,'ORACLE IN 3DAYS','ALLEN')); 5 INSERT INTO STUDENT 6 VALUES 7 (102,'GAYATRI',BOOK_VAR); 8 END; 9 /

PL/SQL procedure successfully completed.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

498

Page 499: Oracle Queries

ORACLESQL> SELECT * FROM STUDENT;

STUDENT_NO STUDENT_NA ---------- ---------- BOOKS_ISSUED(BOOK_NO, BOOK_TITLE, AUTHOR) ---------------------------------------------------------------------------------------------------- 100 PAVAN BOOKS(BOOKS_TYPE(1, 'ORACLE IN 21 DAYS', 'KEVIN'), BOOKS_TYPE(2, 'ORACLE IN 9 DAYS', 'SMITH')) 101 KUMAR BOOKS(BOOKS_TYPE(1, 'ORACLE IN 21 DAYS', 'KEVIN'), BOOKS_TYPE(2, 'ORACLE IN 9 DAYS', 'SMITH')) 102 GAYATRI BOOKS(BOOKS_TYPE(3, 'ORACLE IN 3DAYS', 'ALLEN'))

IN PL/SQL:

1 DECLARE 2 MBOOK STUDENT.BOOKS_ISSUED%TYPE; 3 MNAME STUDENT.STUDENT_NAME%TYPE; 4 CURSOR C IS SELECT STUDENT_NAME,BOOKS_ISSUED FROM STUDENT; 5 BEGIN 6 OPEN C; 7 LOOP 8 FETCH C INTO MNAME,MBOOK; 9 EXIT WHEN C%NOTFOUND; 10 DBMS_OUTPUT.PUT_LINE('BOOKS ISSUED TO' || ' ' ||MNAME); 11 --LOOP OVER THE NESTED TABLE AND PRINT BOOKS DETAILS 12 FOR I IN 1..MBOOK.COUNT 13 LOOP 14 DBMS_OUTPUT.PUT_LINE(' ' ||MBOOK(I).BOOK_TITLE); 15 END LOOP; 16 END LOOP; 17 CLOSE C; 18* END;SQL> /

PL/SQL procedure successfully completed.

SQL> SET SERVEROUTPUT ONSQL> /BOOKS ISSUED TO PAVAN ORACLE IN 21 DAYS ORACLE IN 9 DAYS BOOKS ISSUED TO KUMAR ORACLE IN 21 DAYS ORACLE IN 9 DAYS

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

499

Page 500: Oracle Queries

ORACLEBOOKS ISSUED TO GAYATRI ORACLE IN 3DAYS

PL/SQL procedure successfully completed.

UPDATING THE NESTED TABLE:

THE OPERATOR ALLOWS NESTED TABLES TO BE MANIPULATED.

SQL> UPDATE THE ( 2 SELECT BOOKS_ISSUED FROM STUDENT WHERE STUDENT_NO=100) 3 SET BOOK_TITLE = 'VB' 4 WHERE BOOK_NO = 01;

1 row updated.

SQL> SELECT * FROM STUDENT;

STUDENT_NO STUDENT_NA ---------- ---------- BOOKS_ISSUED(BOOK_NO, BOOK_TITLE, AUTHOR) ---------------------------------------------------------------------------------------------------- 100 PAVAN BOOKS(BOOKS_TYPE(1, 'VB', 'KEVIN'), BOOKS_TYPE(2, 'ORACLE IN 9 DAYS', 'SMITH')) 101 KUMAR BOOKS(BOOKS_TYPE(1, 'ORACLE IN 21 DAYS', 'KEVIN'), BOOKS_TYPE(2, 'ORACLE IN 9 DAYS', 'SMITH')) 102 GAYATRI BOOKS(BOOKS_TYPE(3, 'ORACLE IN 3DAYS', 'ALLEN'))

IN PL/SQL:

SQL> DECLARE 2 BOOK_VAR BOOKS; 3 BEGIN 4 BOOK_VAR:=BOOKS(BOOKS_TYPE(4,'VB IN 1 DAY','KING'),BOOKS_TYPE(5,'PB IN 1 DAY','ROLLEN')); 5 UPDATE STUDENT

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

500

Page 501: Oracle Queries

ORACLE 6 SET BOOKS_ISSUED = BOOK_VAR 7 WHERE STUDENT_NO=103; 8 END; 9 /

PL/SQL procedure successfully completed.

SQL> SELECT * FROM STUDENT;

STUDENT_NO STUDENT_NA ---------- ---------- BOOKS_ISSUED(BOOK_NO, BOOK_TITLE, AUTHOR) ---------------------------------------------------------------------------------------------------- 100 PAVAN BOOKS(BOOKS_TYPE(1, 'VB', 'KEVIN'), BOOKS_TYPE(2, 'ORACLE IN 9 DAYS', 'SMITH')) 101 KUMAR BOOKS(BOOKS_TYPE(1, 'ORACLE IN 21 DAYS', 'KEVIN'), BOOKS_TYPE(2, 'ORACLE IN 9 DAYS', 'SMITH')) 102 GAYATRI BOOKS(BOOKS_TYPE(3, 'ORACLE IN 3DAYS', 'ALLEN'))

1 DECLARE 2 BOOK_VAR BOOKS; 3 BEGIN 4 BOOK_VAR:=BOOKS(BOOKS_TYPE(4,'VB IN 1 DAY','KING'),BOOKS_TYPE(5,'PB IN 1 DAY','ROLLEN')); 5 UPDATE STUDENT 6 SET BOOKS_ISSUED = BOOK_VAR 7 WHERE STUDENT_NO=102; 8* END;SQL> /

PL/SQL procedure successfully completed.

SQL> SELECT * FROM STUDENT;

STUDENT_NO STUDENT_NA

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

501

Page 502: Oracle Queries

ORACLE---------- ---------- BOOKS_ISSUED(BOOK_NO, BOOK_TITLE, AUTHOR) ---------------------------------------------------------------------------------------------------- 100 PAVAN BOOKS(BOOKS_TYPE(1, 'VB', 'KEVIN'), BOOKS_TYPE(2, 'ORACLE IN 9 DAYS', 'SMITH')) 101 KUMAR BOOKS(BOOKS_TYPE(1, 'ORACLE IN 21 DAYS', 'KEVIN'), BOOKS_TYPE(2, 'ORACLE IN 9 DAYS', 'SMITH')) 102 GAYATRI BOOKS(BOOKS_TYPE(4, 'VB IN 1 DAY', 'KING'), BOOKS_TYPE(5, 'PB IN 1 DAY', 'ROLLEN'))

SQL> INSERT INTO THE (SELECT BOOKS_ISSUED FROM STUDENT 2 WHERE STUDENT_NO = 101) 3 VALUES 4 (BOOKS_TYPE(6,'JAVA IN 21 DAYS','KEVIN'));

1 row created.

SQL> SELECT * FROM STUDENT;

STUDENT_NO STUDENT_NA ---------- ---------- BOOKS_ISSUED(BOOK_NO, BOOK_TITLE, AUTHOR) ---------------------------------------------------------------------------------------------------- 100 PAVAN BOOKS(BOOKS_TYPE(1, 'VB', 'KEVIN'), BOOKS_TYPE(2, 'ORACLE IN 9 DAYS', 'SMITH')) 101 KUMAR BOOKS(BOOKS_TYPE(1, 'ORACLE IN 21 DAYS', 'KEVIN'), BOOKS_TYPE(2, 'ORACLE IN 9 DAYS', 'SMITH'), BOOKS_TYPE(6, 'JAVA IN 21 DAYS', 'KEVIN')) 102 GAYATRI BOOKS(BOOKS_TYPE(4, 'VB IN 1 DAY', 'KING'), BOOKS_TYPE(5, 'PB IN 1 DAY', 'ROLLEN'))

SQL> DELETE FROM STUDENT 2 WHERE STUDENT_NO=102;

1 row deleted.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

502

Page 503: Oracle Queries

ORACLE

SQL> SELECT * FROM STUDENT;

STUDENT_NO STUDENT_NA ---------- ---------- BOOKS_ISSUED(BOOK_NO, BOOK_TITLE, AUTHOR) ---------------------------------------------------------------------------------------------------- 100 PAVAN BOOKS(BOOKS_TYPE(1, 'VB', 'KEVIN'), BOOKS_TYPE(2, 'ORACLE IN 9 DAYS', 'SMITH')) 101 KUMAR BOOKS(BOOKS_TYPE(1, 'ORACLE IN 21 DAYS', 'KEVIN'), BOOKS_TYPE(2, 'ORACLE IN 9 DAYS', 'SMITH'), BOOKS_TYPE(6, 'JAVA IN 21 DAYS', 'KEVIN'))

DELETING:

FOR DELETING A ROW FROM THE NESTED TABLE USING THE CONDITION FROM THE NESTED TABLE.

SQL> DELETE FROM THE( 2 SELECT BOOKS_ISSUED FROM STUDENT WHERE STUDENT_NO=100) 3 WHERE BOOK_NO=2;

1 row deleted.

SQL> SELECT * FROM STUDENT;

STUDENT_NO STUDENT_NA ---------- ---------- BOOKS_ISSUED(BOOK_NO, BOOK_TITLE, AUTHOR) ---------------------------------------------------------------------------------------------------- 100 PAVAN BOOKS(BOOKS_TYPE(1, 'VB', 'KEVIN')) 101 KUMAR BOOKS(BOOKS_TYPE(1, 'ORACLE IN 21 DAYS', 'KEVIN'), BOOKS_TYPE(2, 'ORACLE IN 9 DAYS', 'SMITH'), BOOKS_TYPE(6, 'JAVA IN 21 DAYS', 'KEVIN'))

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

503

Page 504: Oracle Queries

ORACLE VARRAYS:

CREATING VARRAYS:

SQL> CREATE OR REPLACE TYPE BOOKS_ARRAY AS VARRAY(10) BOOKS_TYPE; 2 /

Warning: Type created with compilation errors.

SQL> SHOW ERRORSErrors for TYPE BOOKS_ARRAY:

LINE/COL ERROR -------- ----------------------------------------------------------------- 1/32 PLS-00103: Encountered the symbol "BOOKS_TYPE" when expecting one of the following: of The symbol "of" was substituted for "BOOKS_TYPE" to continue.

1* CREATE OR REPLACE TYPE BOOKS_ARRAY AS VARRAY(10) OF BOOKS_TYPE;SQL> /

Type created.

SQL> CREATE TABLE STUDENTS 2 (STUDENT_NO NUMBER(10), 3 STUDENT_NAME VARCHAR2(10), 4 BOOKS_ISSUED BOOKS_ARRAY);

Table created.

1 INSERT INTO STUDENTS 2 VALUES 3 (100,'PAVAN',BOOKS_ARRAY(BOOKS_TYPE(1,'ORACLE IN 21 DAYS','KEVIN'),BOOKS_TYPE(2, 4* 'VB IN 21 DAYS','LOL')))SQL> /

1 row created.

1 INSERT INTO STUDENTS 2 VALUES

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

504

Page 505: Oracle Queries

ORACLE 3 (101,'KUMAR',BOOKS_ARRAY(BOOKS_TYPE(1,'ORACLE IN 21 DAYS','KEVIN'),BOOKS_TYPE(2, 4* 'VB IN 21 DAYS','LOL')))SQL> /

1 row created.

1 INSERT INTO STUDENTS 2 VALUES 3 (102,'GAYATRI',BOOKS_ARRAY(BOOKS_TYPE(1,'ORACLE IN 21 DAYS','KEVIN'),BOOKS_TYPE(2, 4* 'VB IN 21 DAYS','LOL')))SQL> /

1 row created.

SQL> SELECT * FROM STUDENTS;

STUDENT_NO STUDENT_NA ---------- ---------- BOOKS_ISSUED(BOOK_NO, BOOK_TITLE, AUTHOR) ---------------------------------------------------------------------------------------------------- 100 PAVAN BOOKS_ARRAY(BOOKS_TYPE(1, 'ORACLE IN 21 DAYS', 'KEVIN'), BOOKS_TYPE(2, 'VB IN 21 DAYS', 'LOL')) 101 KUMAR BOOKS_ARRAY(BOOKS_TYPE(1, 'ORACLE IN 21 DAYS', 'KEVIN'), BOOKS_TYPE(2, 'VB IN 21 DAYS', 'LOL')) 102 GAYATRI BOOKS_ARRAY(BOOKS_TYPE(1, 'ORACLE IN 21 DAYS', 'KEVIN'), BOOKS_TYPE(2, 'VB IN 21 DAYS', 'LOL'))

USING VARRAYS IN PL/SQL:

TO MODIFY A STORED VARRAY,IT HAS TO BE SELECTED IN TO PL/SQL VARIABLE AND THEN INSERTED BACK IN TO THE TABLE.

DECLARE

LIST_OF_BOOKS BOOKS_ARRAY;

BEGIN

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

505

Page 506: Oracle Queries

ORACLESELECT BOOKS_ISSUED INTO LIST_OF_BOOKSFROM STUDENTSWHERE STUDENT_NO=100;

DBMS_OUTPUT.PUT_LINE(‘ NO OF BOOKS ISSUED’ ||TO_CHAR (LIST_OF_BOOKS.COUNT));

DBMS_OUTPUT.PUT_LINE(‘ARRAY LIMIT ‘ ||LIST_OF_BOOKS.LIMIT);

LIST_OF_BOOKS.EXTEND;

LIST_OF_BOOKS(LIST_OF_BOOKS.COUNT):=BOOK_TYPE(6,’PASCAL IN 9 DAYS’,’KEVIN’);

UPDATE STUDENTSSET BOOKS_ISSUED = LIST_OF_BOOKSWHERE STUDENT_NO=100;

COMMIT;END;

SIMILARITIES OF VARRAYS AND NESTED TABLES:

BOTH VARRAYS AND NESTED TABLES ARE COLLECTIONS.

BOTHE TYPES ALLOW ACCESS TO INDIVIDUAL ELEMENTS USING SUBSCRIPT NOTATION.

BOTH TYPES CAN BE STORED IN DATABASE TABLES.

DIFFERENCES OF VARRAYS AND NESTED TABLES:

VARRAYS HAVE MAXIMUM SIZE, AS SPECIFIED AT TIME OF CREATION.WHILE NESTED TABLES DO NOT.

VARRAYS ARE STORED IN LINE WITH THE CONTAINING TABLE, WHILE NESTED TABLES ARE STORED IN A SEPARATE TABLE, WHICH CAN HAVE DIFFERENT STORAGE CHARACTERSTICS.

ROWS IN THE NESTED TABLE CAN BE ACCESSED INDIVIDUALLY BY USING THE ‘ THE ‘ CLAUSE, WHERE AS IN THE VARRAYS ALL THE ROWS SHOULD BE ACCESSED AS ONE OBJECT AND IS TO NE MANIPULATED BY USING PL/SQL BLOCKS.

ADVANTAGES:

IMPLEMENTATIONS OF ONE-TO-MANY RELATIONSHIPS.

TRIGGERS

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

506

Page 507: Oracle Queries

ORACLESQL> CREATE TABLE EMP_D 2 AS 3 SELECT * FROM EMP;

Table created.

SQL> CREATE TABLE TRIG_INSERT 2 (ACTION VARCHAR2(100), 3 TDATE TIMESTAMP(6));

Table created.

1 CREATE TABLE TRIG_UPDATE 2 (ACTION VARCHAR2(100), 3* TDATE TIMESTAMP(6))SQL> /

Table created.

1 CREATE TABLE TRIG_DELETE 2 (ACTION VARCHAR2(100), 3* TDATE TIMESTAMP(6))SQL> /

Table created.

INSERT TRIGGERS:

SQL> CREATE OR REPLACE TRIGGER BFORE_INSERT_TAB 2 BEFORE INSERT ON EMP_D 3 BEGIN 4 INSERT INTO TRIG_INSERT 5 VALUES 6 ('BFORE INSERT TAB LVL',SYSTIMESTAMP); 7 END; 8 /

Trigger created.

1 CREATE OR REPLACE TRIGGER BFORE_INSERT_ROW 2 BEFORE INSERT ON EMP_D FOR EACH ROW

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

507

Page 508: Oracle Queries

ORACLE 3 BEGIN 4 INSERT INTO TRIG_INSERT 5 VALUES 6 ('BFORE INSERT ROW LVL',SYSTIMESTAMP); 7* END;SQL> /

Trigger created.

1 CREATE OR REPLACE TRIGGER AFTER_INSERT_TAB 2 AFTER INSERT ON EMP_D 3 BEGIN 4 INSERT INTO TRIG_INSERT 5 VALUES 6 ('AFTER INSERT TAB LVL',SYSTIMESTAMP); 7* END;SQL> /

Trigger created.

1 CREATE OR REPLACE TRIGGER AFTER_INSERT_ROW 2 AFTER INSERT ON EMP_D FOR EACH ROW 3 BEGIN 4 INSERT INTO TRIG_INSERT 5 VALUES 6 ('AFTER INSERT ROW LVL',SYSTIMESTAMP); 7* END;SQL> /

Trigger created.

SELECTING TRIGGERS IN USER_OBJECTS:

SQL> SELECT OBJECT_NAME,OBJECT_TYPE FROM USER_OBJECTS 2 WHERE OBJECT_TYPE='TRIGGER';

OBJECT_NAME ----------------------------------------------------------------------------------------------------OBJECT_TYPE ------------------ AFTER_INSERT_ROW TRIGGER AFTER_INSERT_TAB TRIGGER BFORE_INSERT_ROW

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

508

Page 509: Oracle Queries

ORACLETRIGGER BFORE_INSERT_TAB TRIGGER

SQL> SELECT TRIGGER_NAME FROM USER_TRIGGERS;

TRIGGER_NAME ------------------------------ AFTER_INSERT_ROW AFTER_INSERT_TAB BFORE_INSERT_ROW BFORE_INSERT_TAB

SQL> SELECT * FROM USER_TRIGGERS 2 WHERE TRIGGER_NAME='BFORE_INSERT_TAB';

TRIGGER_NAME TRIGGER_TYPE ------------------------------ ---------------- TRIGGERING_EVENT ----------------------------------------------------------------------------------------------------TABLE_OWNER BASE_OBJECT_TYPE TABLE_NAME ------------------------------ ---------------- ------------------------------ COLUMN_NAME ----------------------------------------------------------------------------------------------------REFERENCING_NAMES ----------------------------------------------------------------------------------------------------WHEN_CLAUSE ----------------------------------------------------------------------------------------------------STATUS -------- DESCRIPTION ----------------------------------------------------------------------------------------------------ACTION_TYPE TRIGGER_BODY ----------- -------------------------------------------------------------------------------- BFORE_INSERT_TAB BEFORE STATEMENT INSERT SCOTT TABLE EMP_D

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

509

Page 510: Oracle Queries

ORACLEREFERENCING NEW AS NEW OLD AS OLD ENABLED BFORE_INSERT_TAB BEFORE INSERT ON EMP_D PL/SQL BEGIN INSERT INTO TRIG_INSERT VALUES ('BFORE INSERT TAB LVL',SYSTIMESTAMP); END;

SQL> DESC USER_TRIGGERS Name Null? Type ----------------------------------------------------- -------- ------------------------------------ TRIGGER_NAME VARCHAR2(30) TRIGGER_TYPE VARCHAR2(16) TRIGGERING_EVENT VARCHAR2(227) TABLE_OWNER VARCHAR2(30) BASE_OBJECT_TYPE VARCHAR2(16) TABLE_NAME VARCHAR2(30) COLUMN_NAME VARCHAR2(4000) REFERENCING_NAMES VARCHAR2(128) WHEN_CLAUSE VARCHAR2(4000) STATUS VARCHAR2(8) DESCRIPTION VARCHAR2(4000) ACTION_TYPE VARCHAR2(11) TRIGGER_BODY LONG

SQL> SELECT TRIGGER_BODY FROM USER_TRIGGERS 2 WHERE TRIGGER_NAME='BFORE_INSERT_TAB';

TRIGGER_BODY -------------------------------------------------------------------------------- BEGIN INSERT INTO TRIG_INSERT VALUES ('BFORE INSERT TAB LVL',SYSTIMESTAMP); END;

SQL> SELECT * FROM TRIG_INSERT;

no rows selected

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

510

Page 511: Oracle Queries

ORACLESQL> INSERT INTO EMP_D 2 (EMPNO,DEPTNO) 3 VALUES 4 (1,10);

1 row created.

SQL> SELECT * FROM TRIG_INSERT;

ACTION ----------------------------------------------------------------------------------------------------TDATE --------------------------------------------------------------------------- BFORE INSERT TAB LVL 19-SEP-05 12.52.39.000000 AM BFORE INSERT ROW LVL 19-SEP-05 12.52.39.000000 AM AFTER INSERT ROW LVL 19-SEP-05 12.52.39.000000 AM AFTER INSERT TAB LVL 19-SEP-05 12.52.39.000000 AM

SQL> DROP TRIGGER BFORE_INSERT_TAB;

Trigger dropped.

1* DROP TRIGGER BFORE_INSERT_ROWSQL> /

Trigger dropped.

1* DROP TRIGGER AFTER_INSERT_TAB 2 /

Trigger dropped.

1* DROP TRIGGER AFTER_INSERT_ROWSQL> /

Trigger dropped.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

511

Page 512: Oracle Queries

ORACLEUPDATING:

1 CREATE OR REPLACE TRIGGER BFORE_UPDATE_TAB 2 BEFORE UPDATE ON EMP_D 3 BEGIN 4 INSERT INTO TRIG_UPDATE 5 VALUES 6 ('BFORE UPDATE TAB LVL',SYSTIMESTAMP); 7* END;SQL> /

Trigger created.

1 CREATE OR REPLACE TRIGGER BFORE_UPDATE_ROW 2 BEFORE UPDATE ON EMP_D FOR EACH ROW 3 BEGIN 4 INSERT INTO TRIG_UPDATE 5 VALUES 6 ('BFORE UPDATE ROW LVL',SYSTIMESTAMP); 7* END;SQL> /

Trigger created.

1 CREATE OR REPLACE TRIGGER AFTER_UPDATE_ROW 2 AFTER UPDATE ON EMP_D FOR EACH ROW 3 BEGIN 4 INSERT INTO TRIG_UPDATE 5 VALUES 6 ('AFTER UPDATE ROW LVL',SYSTIMESTAMP); 7* END;SQL> /

Trigger created.

1 CREATE OR REPLACE TRIGGER AFTER_UPDATE_TAB 2 AFTER UPDATE ON EMP_D 3 BEGIN 4 INSERT INTO TRIG_UPDATE 5 VALUES 6 ('AFTER UPDATE TAB LVL',SYSTIMESTAMP); 7* END;SQL> /

Trigger created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

512

Page 513: Oracle Queries

ORACLESQL> SELECT TRIGGER_NAME FROM USER_TRIGGERS;

TRIGGER_NAME ------------------------------ AFTER_UPDATE_ROW AFTER_UPDATE_TAB BFORE_UPDATE_ROW BFORE_UPDATE_TAB

SQL> SELECT * FROM TRIG_UPDATE;

no rows selected

SQL> UPDATE EMP_D 2 SET SAL=SAL+100 3 WHERE EMPNO=7788;

1 row updated.

SQL> SELECT * FROM TRIG_UPDATE;

ACTION ----------------------------------------------------------------------------------------------------TDATE --------------------------------------------------------------------------- BFORE UPDATE TAB LVL 19-SEP-05 01.03.20.000000 AM BFORE UPDATE ROW LVL 19-SEP-05 01.03.20.000000 AM AFTER UPDATE ROW LVL 19-SEP-05 01.03.20.000000 AM AFTER UPDATE TAB LVL 19-SEP-05 01.03.20.000000 AM

SQL> DELETE FROM TRIG_UPDATE;

4 rows deleted.

SQL> SELECT * FROM TRIG_UPDATE;

no rows selected

SQL> UPDATE EMP_D 2 SET SAL = SAL+100;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

513

Page 514: Oracle Queries

ORACLE15 rows updated.

SQL> SELECT * FROM TRIG_UPDATE;

ACTION ----------------------------------------------------------------------------------------------------TDATE --------------------------------------------------------------------------- BFORE UPDATE TAB LVL 19-SEP-05 01.04.06.000001 AM BFORE UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM AFTER UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM BFORE UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM AFTER UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM BFORE UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM AFTER UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM BFORE UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM AFTER UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM BFORE UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM AFTER UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM BFORE UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM

ACTION

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

514

Page 515: Oracle Queries

ORACLE----------------------------------------------------------------------------------------------------TDATE --------------------------------------------------------------------------- AFTER UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM BFORE UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM AFTER UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM BFORE UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM AFTER UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM BFORE UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM AFTER UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM BFORE UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM AFTER UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM BFORE UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM AFTER UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM BFORE UPDATE ROW LVL

ACTION ----------------------------------------------------------------------------------------------------TDATE --------------------------------------------------------------------------- 19-SEP-05 01.04.06.000001 AM AFTER UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM BFORE UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

515

Page 516: Oracle Queries

ORACLE AFTER UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM BFORE UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM AFTER UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM BFORE UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM AFTER UPDATE ROW LVL 19-SEP-05 01.04.06.000001 AM AFTER UPDATE TAB LVL 19-SEP-05 01.04.06.000001 AM

32 rows selected.

SQL> DROP TRIGGER BFORE_UPDATE_TAB;

Trigger dropped.

1* DROP TRIGGER BFORE_UPDATE_ROWSQL> /

Trigger dropped.

1* DROP TRIGGER AFTER_UPDATE_ROWSQL> /

Trigger dropped.

1* DROP TRIGGER AFTER_UPDATE_TABSQL> /

Trigger dropped.

SQL> SELECT TRIGGER_NAME FROM USER_TRIGGERS;

no rows selected

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

516

Page 517: Oracle Queries

ORACLE

DELETION:

SQL> SELECT * FROM TRIG_DELETE;

no rows selected

SQL> CREATE OR REPLACE TRIGGER BFORE_DELETE_ROW 2 BEFORE DELETE ON EMP_D FOR EACH ROW 3 BEGIN 4 INSERT INTO TRIG_DELETE 5 VALUES 6 ('BFORE DELETE ROW LVL',SYSTIMESTAMP); 7 END; 8 /

Trigger created.

1 CREATE OR REPLACE TRIGGER BFORE_DELETE_TAB 2 BEFORE DELETE ON EMP_D 3 BEGIN 4 INSERT INTO TRIG_DELETE 5 VALUES 6 ('BFORE DELETE TAB LVL',SYSTIMESTAMP); 7* END;SQL> /

Trigger created.

1 CREATE OR REPLACE TRIGGER AFTER_DELETE_TAB 2 AFTER DELETE ON EMP_D 3 BEGIN 4 INSERT INTO TRIG_DELETE 5 VALUES 6 ('AFTER DELETE TAB LVL',SYSTIMESTAMP); 7* END;SQL> /

Trigger created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

517

Page 518: Oracle Queries

ORACLE

1 CREATE OR REPLACE TRIGGER AFTER_DELETE_ROW 2 AFTER DELETE ON EMP_D FOR EACH ROW 3 BEGIN 4 INSERT INTO TRIG_DELETE 5 VALUES 6 ('AFTER DELETE ROW LVL',SYSTIMESTAMP); 7* END;SQL> /

Trigger created.

SQL> SELECT TRIGGER_NAME FROM USER_TRIGGERS;

TRIGGER_NAME ------------------------------ AFTER_DELETE_ROW AFTER_DELETE_TAB BFORE_DELETE_ROW BFORE_DELETE_TAB

SQL> DELETE FROM EMP_D 2 WHERE EMPNO=7788;

0 rows deleted.

SQL> SELECT * FROM TRIG_DELETE;

ACTION ----------------------------------------------------------------------------------------------------TDATE --------------------------------------------------------------------------- BFORE DELETE TAB LVL 19-SEP-05 01.22.59.000001 AM AFTER DELETE TAB LVL 19-SEP-05 01.22.59.000001 AM

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

518

Page 519: Oracle Queries

ORACLE HERE NO ROWS ARE DELETED BCOZ TABLE LEVEL TRIGGERS FIRED.

SQL> DELETE FROM TRIG_DELETE;

2 rows deleted.

SQL> DELETE FROM EMP_D 2 WHERE EMPNO=7566;

1 row deleted.

SQL> SELECT * FROM TRIG_DELETE;

ACTION ----------------------------------------------------------------------------------------------------TDATE --------------------------------------------------------------------------- BFORE DELETE TAB LVL 19-SEP-05 01.23.57.000000 AM BFORE DELETE ROW LVL 19-SEP-05 01.23.57.000000 AM AFTER DELETE ROW LVL 19-SEP-05 01.23.57.000000 AM AFTER DELETE TAB LVL 19-SEP-05 01.23.57.000000 AM

SQL> DELETE FROM TRIG_DELETE;

4 rows deleted.

SQL> DELETE FROM EMP_D 2 ;

12 rows deleted.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

519

Page 520: Oracle Queries

ORACLESQL> SELECT * FROM TRIG_DELETE;

ACTION ----------------------------------------------------------------------------------------------------TDATE --------------------------------------------------------------------------- BFORE DELETE TAB LVL 19-SEP-05 01.24.57.000000 AM BFORE DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM AFTER DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM BFORE DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM AFTER DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM BFORE DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM AFTER DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM BFORE DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM AFTER DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM BFORE DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM AFTER DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM BFORE DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM

ACTION ----------------------------------------------------------------------------------------------------TDATE --------------------------------------------------------------------------- AFTER DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

520

Page 521: Oracle Queries

ORACLE BFORE DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM AFTER DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM BFORE DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM AFTER DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM BFORE DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM AFTER DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM BFORE DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM AFTER DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM BFORE DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM AFTER DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM BFORE DELETE ROW LVL

ACTION ----------------------------------------------------------------------------------------------------TDATE --------------------------------------------------------------------------- 19-SEP-05 01.24.57.000000 AM AFTER DELETE ROW LVL 19-SEP-05 01.24.57.000000 AM AFTER DELETE TAB LVL 19-SEP-05 01.24.57.000000 AM

26 rows selected.

REF CURSORS:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

521

Page 522: Oracle Queries

ORACLEA PL/SQL PROGRAM CANNOT PASS A CURSOR AS A PARAMETER TO ANOTHER PROGRAM. A PL/SQL PROGRAM CAN ONLY OPEN THE CURSOR AND PROCESS THE CORRESPONDING INFORMATION WITHIN THE PROGRAM ITSELF.

TO WORK AROUND THE FUNCTIONAL LIMITATIONS OF CURSORS A PROGRAM CAN INSTEAD DECLARE TWO DIFFERENT CURSOR TYPES AND CORRESPONDING CURSOR VARIABLES.

CURSOR CAN BE DECLARED AS EITHER STRONG OR WEAK.

THESE TYPES OF CURSOR DECLARATIONS ARE USED TO PASS A CURSOR AS A PARAMETER TO A PROGRAM OR A PACKAGE.

WHETHER A CURSOR IS STRONG OR WEAK DEPENDS UPON THE WAY IT IS DECLARED.

FOR EXAMPLE , THE CURSOR TYPE DECLARED BELOW IS A STRONG CURSOR TYPE I.E., THE CURSOR TYPE’S DECLARATION INCLUDES A RETURN CLAUSE THAT SPECIFIES A SHAPE OR SET OF ATTRIBUTES FOR THE CURSOR TYPE.

A STRONG CURSOR TYPE CAN ONLY RETURN THE DATA TYPE SPECIFIED IN THE RETURN TYPE. THEREFORE, A STRONG CURSOR TYPE RESTRICTSTHE DEFINITION OF SUBSEQUENT CURSOR VARIABLES THAT USE THE TYPE.

TYPE CUR_EMP IS REF CURSOR RETURN EMP.EMPNO%TYPE;

EMP_CURSOR1 CUR_EMP; ---------------- CURSOR VARIABLE.

EMP_CURSOR2 CUR_EMP; ---------------- CURSOR VARIABLE.

EMP_CURSOR3 CUR_EMP; ---------------- CURSOR VARIABLE.

THE FOLLOWING CURSOR TYPE IS WEAK BECAUSE IT DOES NOT INCLUDE A SHAPE SPECIFICATION i.e., THERE IS NO RETURN CLAUSE.\

A PROGRAM CAN USE THE WEAK CURSOR TYPE TO DECLARE A CURSOR VARIABLE WITH AN Y SHAPE.

A WEAK CURSOR TYPE CAN RETURN ANY DATATYPE AS THERE IS NO RETURN CLAUSE.

SINCE THERE IS NO RETURN VALUE FOR THE CURSOR , THE CURSOR VARIABLE IS SHAPE INDEPENDENT.

THIS ADDS FLEXIBILITY TO THE CURSOR VARIABLES.

FOR EXAMPLE:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

522

Page 523: Oracle Queries

ORACLETYPE CUR_EMP IS REF CURSOR;

SQL> CREATE OR REPLACE PACKAGE DEPT_DATA AS 2 TYPE DEPTCURTYP IS REF CURSOR RETURN DEPT%ROWTYPE; 3 PROCEDURE OPEN_DEPT_CV(DEPT_CV IN OUT DEPTCURTYP); 4 END DEPT_DATA; 5 /

Package created.

SQL> CREATE OR REPLACE PACKAGE BODY DEPT_DATA AS 2 PROCEDURE OPEN_DEPT_CV(DEPT_CV IN OUT DEPTCURTYP) IS 3 BEGIN 4 OPEN DEPT_CV FOR SELECT * FROM DEPT; 5 END OPEN_DEPT_CV; 6 END DEPT_DATA; 7 /

Package body created.

WHEN U DECLARE A CURSOR VARIABLE AS THE FORMAL PARAMETER OF A SUBPROGRAM THAT OPENS THE CURSOR VARIABLE. YOU MUST SPECIFY THE IN OUT MODE. THAT WAY,THE SUBPROGRAM CAN PASS A AN OPEN CURSOR BACK TO THE CALLER.

DECLARE A VARIABLE OF TYPE REFCURSOR AS SHOWN BELOW.

VARIABLE VARDEPTCV REFCURSOR

EXECUTE THE PACKAGE WITH THE SPECIFIED PROCEDURE ALONG WITH THE CURSOR AS SHOWN BELOW:

SQL> EXECUTE DEPT_DATA.OPEN_DEPT_CV(:VARDEPTCV);

PL/SQL procedure successfully completed.

SQL> PRINT VARDEPTNO

SQL> PRINT VARDEPTCV

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

523

Page 524: Oracle Queries

ORACLE DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

ALTERNATIVELY, YOU CAN USE THE SET AUTOPRINT ON COMMAND BEFORE EXECUTING THE PACKAGE, TODISPLAY THE QUERY RESULTS AUTOMATICALLY. USE THE SET AUTOPRINT OFF COMMAND TO PUT AUTOPRINT OFF.

THE PROCEDURE CAN BE EXECUTED MULTIPLE TIMES USING THE SAME OR A DIFFERENT REFCURSOR BIND VARIABLE AS SHOWN BELOW:

SQL> VARIABLE PCV REFCURSOR

SQL> SET AUTOPRINT ON

SQL> EXECUTE DEPT_DATA.OPEN_DEPT_CV(:PCV);

PL/SQL procedure successfully completed.

DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

SQL> SET AUTOPRINT OFF

ALTERNATIVELY, YOU CAN USE A STANDALONE PROCEDURE TO OPEN THE CURSOR VARIABLE.

SIMPLE DEFINE THE REFCURSOR TYPE IN A SEPARATE PACKAGE, THEN REFERENCE THAT TYPE IN THE STANDALONE PROCEDURE.

FOR INSTANCE , IF YOU CREATE THE FOLLOWING (BODILESS) PACKAGE, U CANCREATE STANDALONE PROCEDURE THAT REFERENCE THE TYPES IT DEFINES:

SQL> CREATE OR REPLACE PACKAGE CV_TYPES AS 2 TYPE GENERICCURTYPE IS REFCURSOR; 3 TYPE EMPCURTYP IS REF CURSOR RETURN EMP%ROWTYPE; 4 TYPE DEPTCURTYP IS REF CURSOR RETURN DEPT%ROWTYPE; 5 END CV_TYPES; 6 /

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

524

Page 525: Oracle Queries

ORACLEWarning: Package created with compilation errors.

SQL> SHOW ERRORSErrors for PACKAGE CV_TYPES:

LINE/COL ERROR -------- ----------------------------------------------------------------- 2/24 PLS-00103: Encountered the symbol "REFCURSOR" when expecting one of the following: ( array limited new private range record VARRAY_ char_base number_base decimal date_base clob_base blob_base bfile_base table ref object fixed varying opaque The symbol "range" was substituted for "REFCURSOR" to continue.

1 CREATE OR REPLACE PACKAGE CV_TYPES AS 2 TYPE GENERICCURTYPE IS REF CURSOR; 3 TYPE EMPCURTYP IS REF CURSOR RETURN EMP%ROWTYPE; 4 TYPE DEPTCURTYP IS REF CURSOR RETURN DEPT%ROWTYPE; 5* END CV_TYPES;SQL> /

Package created.

IN THE FOLLOWING EXAMPLE , YOU CREATE A STANDLONE PROCEDURE THAT REFERENCES THE REF CURSOR TYPE EMPCURTYP, WHICH IS DEFINED IN THE PACKAGE CV_TYPES:

SQL> CREATE PROCEDURE OPEN_EMP_CV 2 (EMP_CV IN OUT CV_TYPES.EMPCURTYP) AS 3 BEGIN 4 OPEN EMP_CV FOR SELECT * FROM EMP; 5 END OPEN_EMP_CV; 6 /

Procedure created.

SQL> VARIABLE P REFCURSOR

SQL> EXECUTE OPEN_EMP_CV(:P);

PL/SQL procedure successfully completed.

SQL> PRINT P

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

525

Page 526: Oracle Queries

ORACLE EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

14 rows selected.

SQL> CREATE OR REPLACE PACKAGE EMP_DATA AS 2 TYPE GENERICCURTYP IS REF CURSOR; 3 TYPE EMPCURTYP IS REF CURSOR RETURN EMP%ROWTYPE; 4 PROCEDURE OPEN_EMP_CV(EMP_CV IN OUT EMPCURTYP, CHOICE IN NUMBER); 5 END EMP_DATA; 6 /

Package created.

SQL> CREATE OR REPLACE PACKAGE BODY EMP_DATA AS 2 PROCEDURE OPEN_EMP_CV(EMP_CV IN OUT EMPCURTYP, CHOICE IN NUMBER) 3 IS 4 BEGIN 5 IF CHOICE = 1 THEN 6 OPEN EMP_CV FOR 7 SELECT * FROM EMP WHERE COMM IS NOT NULL; 8 ELSIF CHOICE = 2 THEN 9 OPEN EMP_CV FOR 10 SELECT * FROM EMP WHERE SAL > 2500; 11 ELSIF CHOICE = 3 THEN 12 OPEN EMP_CV FOR 13 SELECT * FROM EMP WHERE DEPTNO=20; 14 END IF; 15 END OPEN_EMP_CV; 16 END EMP_DATA; 17 /

Package body created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

526

Page 527: Oracle Queries

ORACLESQL> VARIABLE EMPCUR REFCURSORSQL> SET AUTOPRINT ONSQL> EXECUTE EMP_DATA.OPEN_EMP_CV(:EMPCUR,3);

PL/SQL procedure successfully completed.

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7566 JONES MANAGER 7839 02-APR-81 2975 20 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7902 FORD ANALYST 7566 03-DEC-81 3000 20

SQL> EXECUTE EMP_DATA.OPEN_EMP_CV(:EMPCUR,2);

PL/SQL procedure successfully completed.

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7566 JONES MANAGER 7839 02-APR-81 2975 20 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7902 FORD ANALYST 7566 03-DEC-81 3000 20

SQL> EXECUTE EMP_DATA.OPEN_EMP_CV(:EMPCUR,1);

PL/SQL procedure successfully completed.

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30

FOR MORE FLEXIBILITY , YOU CAN PASS A CURSOR VARIABLE AND SELECTOR TO A STORED PROCEDURE THAT EXECUTES QUERIES WITH DIFFERENT RETURN TYPES.

SQL> CREATE OR REPLACE PACKAGE EMP_DATA AS 2 TYPE GENERICCURTYP IS REF CURSOR; 3 TYPE EMPCURTYP IS REF CURSOR RETURN EMP%ROWTYPE;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

527

Page 528: Oracle Queries

ORACLE 4 PROCEDURE OPEN_CV(GENERIC_CV IN OUT GENERICCURTYP, CHOICE IN NUMBER); 5 END EMP_DATA; 6 /

Package created.

SQL> CREATE OR REPLACE PACKAGE BODY EMP_DATA AS 2 PROCEDURE OPEN_CV(GENERIC_CV IN OUT GENERICCURTYP, CHOICE IN NUMBER) 3 IS 4 BEGIN 5 IF CHOICE=1 THEN 6 OPEN GENERIC_CV FOR SELECT * FROM EMP; 7 ELSIF CHOICE = 2 THEN 8 OPEN GENERIC_CV FOR SELECT * FROM DEPT; 9 ELSIF CHOICE=3 THEN 10 OPEN GENERIC_CV FOR SELECT * FROM SALGRADE; 11 END IF; 12 END OPEN_CV; 13 END EMP_DATA; 14 /

Package body created.

SQL> VARIABLE CUR REFCURSORSQL> SET AUTOPRINT ONSQL> EXECUTE EMP_DATA.OPEN_CV(:CUR,3);

PL/SQL procedure successfully completed.

GRADE LOSAL HISAL ---------- ---------- ---------- 1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999

SQL> EXECUTE EMP_DATA.OPEN_CV(:CUR,2);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

528

Page 529: Oracle Queries

ORACLEPL/SQL procedure successfully completed.

DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

SQL> EXECUTE EMP_DATA.OPEN_CV(:CUR,1);

PL/SQL procedure successfully completed.

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

14 rows selected.

ORACLE 9I FEATURES:

ORACLE OFFERS A COMPREHENSIVE HIGH-PERFORMANCE INFRASTRUCTURE FOR E- BUSSINESS.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

529

Page 530: Oracle Queries

ORACLEORACLE 9I INCLDES EVERYTHING NEEDED TO DEVELOP, DEPLOY AND MANAGE INTERNET APPLICATIONS.

IN ORACLE 9I THERE ARE TWO PRODUCTS, THEY ARE

ORACLE 9I APPLICATION SERVER.

ORACLE 9I DATABASE SERVER.

BOTH PROVIDE COMPLETE AND SIMPLE INFRASTRUCTURE FOR INTERNET APPLICATIONS.

THE ORACLE 9I APPLICATION SERVER RUNS ALL YOUR APPLICATIONS.

THE ORACLE 9I DATABASE STORES ALL YOUR DATA.

BASIC SELECT STATEMENT:

SELECT *| { [DISTINCT] COLUMN|EXPRESION [ALIAS],……..} FROM TABLE_NAME;

WRITING SQL STATEMENTS:

SQL STATEMENTS ARE NOT CASE SENSITIVE.

CAN BE ON ONE OR MORE LINES.

KEYWORDS CANNOT BE ABBRIVATED OR SPLIT ACROSS LINES.

CLAUSES ARE USUALLY PLACED ON SEPARATE LINES.

CHARACTER STRINGS AND DATE VALUES ARE ENCLOSED IN SINGLE QUATATIONMARKS.

CHARACTER VALUES ARE CASE SENSITIVE AND DATE VALUES ARE FORMAT SENSITIVE.

THE DEFAULT DATE FORMAT IS

DD-MON-YY,DD-MM-YY,DD-MM-RR.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

530

Page 531: Oracle Queries

ORACLECOLUMN HEADING DEFAULTS:

ISQL*PLUS:

DEFAULT HEADING JUSTIFICATION – CENTRE.

HEADING DISPLAY – UPPERCASE.

SQL*PLUS:

CHRACTER AND DATE COLUMNS HEADINGS LEFT JUSTIFIED.

NUMBER COLUMNS HEADINGS ARE RIGHT JUSTIFIED.

DEFAULT HEADING DISPLAY- UPPERCASE

ISQL*PLUS:

AN ENVIRONMENT.

ORACLE PROPRIETARY.

COMMANDS DO NOT ALLOW MANIPULATION OF VALUES IN DATABASE.

RUNS ON BROWSER.

CENTALLY LOADED , DOES NOT HAVE TO BE IMPLEMENTED ON EACH MACHINE.

ARITHEMITIC EXPRESSIONS:

OPERATOR. DESCRIPTION.

+ ADD.

- SUBTRACT.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

531

Page 532: Oracle Queries

ORACLE* MULTIPLY.

/ DIVIDE.

OPERATOR PRECEDENCE:

* / + -

COMPARISION OPERATORS:

= EQUAL TO.

> GRATER THAN.

> = GRATER THAN OR EQUAL TO.

< LESS THAN.

< = LESS THAN OR EQUAL TO.

<> NOT EQUAL TO.

BETWEEN ….. AND…. BETWEEN TWO VALUES(INCLUSIVE).

IN(SET) MATCH ANY OF A LIST OF VALUES.

LIKE MATCH A CHARACTER PATTERN.

IS NULL IS A NULL VALUE.

LOGICAL CONDITIONS:

AND RETURN TRUE IF BOTH COMPONENT CONDITIONS ARE TRUE.

OR RETURN TRUE IF EITHER COMPONENT CONDITION IS TRUE.

NOT RETURNS TRUE IF THE FOLLOWING CONDITION IS FALSE.

RULES OF PRECENDENCE:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

532

Page 533: Oracle Queries

ORACLEORDER EVALUATED. OPERATOR.

1 ARITHEMITIC OPERATORS.

2 CONCATENATION OPERATOR.

3 COMPARISION OPERATORS.

4 IS[NOT] NULL, LIKE[NOT] IN.

5 [NOT] BETWEEN.

6 NOT LOGICAL CONDITION.

7 AND LOGICAL CONDITION.

8 OR LOGICAL CONDITION.

SQL FUNCTIONS:

SQL FUNCTIONS ARE OF TWO TYPES.

SINGLE-ROW-FUNCTIONS.

MULTIPLE-ROW-FUNCTIONS.

SINGLE-ROW-FUNCTIONS.

CHARACTER.

NUMBER.

DATE.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

533

Page 534: Oracle Queries

ORACLE CONVERSION.

GENERAL.

CHRACTER FUNCTIONS:

CASE MANIPULATION FUNCTIONS:

LOWER.

UPPER.

INITCAP.

CHRACTER MANIPULATION FUNCTIONS:

CONCAT.

SUBSTR.

LEGTH.

INSTR.

LPAD/RPAD.

TRIM.

REPLACE.

NUMBER FUNCTIONS:

ROUND.

TRUNC.

MOD.

DATE FUNCTIONS:

MONTHS_BETWEEN.

ADD_MONTHS.

NEXT_DAY.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

534

Page 535: Oracle Queries

ORACLELAST_DAY.

ROUND.

TRUNC.

VALID ORACLE DATE BETWEEN

JAN 1 , 4712 BC TO DEC 31 9999 AD

ARITHEMITIC WITH DATES:

DATE + NUMBER DATE.

DATE – NUMBER DATE.

DATE – DATE NO OF DAYS.

DATE+ NUMBER/24 DATE.(ADD A NUMBER OF HOURS TO DATE).

CONVERSION FUNCTIONS:

DATA TYPE CONVERSIONS:

IMPLICIT DATA-TYPE CONVERSION.

EXPLICIT DATA-TYPE CONVERSION.

IMPLICIT DATA-TYPE CONVERSIONS:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

535

Page 536: Oracle Queries

ORACLEFOR ASSIGNMENT , THE ORACLE SERVER CAN AUTOMATICALLY CONVERT THE FOLLOWING.

FROM TO

VARCHAR2 OR CHAR NUMBER.

VARCHAR2 OR CHAR DATE.

NUMBER VARCHAR2.

DATE. VARCHAR2.

FOR EXPRESSION EVALUATION, THE ORACLE SERVER CAN AUTOMATICALLY CONVERT FOLLOWING.

FROM TO

VARCHAR2 OR CHAR NUMBER.

VARCHAR2 OR CHAR DATE.

EXPLICIT DATA-TYPE CONVERSIONS:

CHARACTER --------- TO_NUMBER --------- NUMBER --------- TO_CHAR --------- CHARACTER.

CHARACTER --------- TO_DATE --------- DATE --------- TO_CHAR --------- CHARACTER.

ELEMENTS OF THE DATE FORMAT MODEL:

YYYY FULL YEAR IN NUMBER.

YEAR YEAR SPELLED OUT.

MM TWO-DIGIT VALUE OF MONTH.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

536

Page 537: Oracle Queries

ORACLEMONTH FULL NAME OF THE MONTH.

MON THREE-LETTER ABBREVATION OF THE MONTH.

DY THREE-LETTER ABBREVATION OF THE WEEK.

DAY FULL NAME OF THE DAY OF THE WEEK.

DD NUMERIC DAY OF THE MONTH.

GENERAL FUNCTIONS:

NVL.

NVL2.

NULLIF.

COALESCE.

NVL(COMM,0);

NVL(HIREDATE,’01-JAN-97’);

NVL(JOB_ID,’NO JOB YET’);

GROUP FUNCTIONS:

AVG.

COUNT.

MAX.

MIN.

STDDEV.

VARIANCE.

SELECT COLUMN …. [COLUMN],GROUP FUNCTION FROM TABLE

[WHERE CONDITION]

[GROUP BY GROUP BY EXPRESSION]

[ HAVING GROUP CONDITION]

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

537

Page 538: Oracle Queries

ORACLE[ORDER BY COLUMN];

TYPES OF SUBQUERIES:

SINGLE ROW SUBQUERIES:

QUERIES THAT RETURNS ONLY ONE ROW FROM THE INNER SELECT STATEMENT.

MULTIPLE ROW SUBQUERIES:

QUERIES THAT RETURN MORE THAN ONE-ROW FROM THE INNER SELECT STATEMENTS.

DATA BASE OBJECTS:

TABLES.

VIEWS.

SEQUENCES.

INDEXES.

SYNONYM.

TABLE NAMES AND COLUMN NAMES:

MUST BEGIN WITH A LETTER.

MUST BE 1 TO 30 CHARACTER LONG.

MUST CONTAIN ONLY

A-Z, a-z,0-9,-,$ and #.

MUST NOT DUPLICATE THE NAME OF ANOTHER OBJECT OWNED BY SAME USER.

MUST NOT BE AN ORACLE SERVER RESERVED WORD.

AUTOMATIC COMMIT:

WHEN EVER DDL,DCL STATEMENTS ISSUED.

WHEN EVER ISQL*PLUS,SQL*PLUS EXITED NORMALLY, WITHOUT EXPLICITLY ISSUSING COMMIT OR ROLLBACK.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

538

Page 539: Oracle Queries

ORACLEAUTOMATIC ROLLBACK:

ABNORMAL TERIMINATION OF ISQL*PLUS OR SYSTEM FAILURE.

TABLES IN THE ORACLE DATABASE:

USER TABLES:

ARE COLLECTION OF TABLES CREATED AND MAINTAINED BY THE USER.CONTAINS USER INFORMATION.

DATA DICTIONARY:

IS COLLECTION OF TABLES CREATED AND MAINTAINED BY THE ORACLE SERVER.CONTAIN DATABASE INFORMATION.

USER TABLES ARE TABLES CREATED BY THE USER, SUCH AS EMP. THERE ARE

ANOTHER COLLECTION OF TABLES AND VIEWS IN THE ORACLE DATABASE KNOWN AS THE DATA DICTIONARY. THIS COLLECTION IS CREATED AND MAINTAINED BY THE ORACLE SERVER AND CONTAINS INFORMATION ABOUT THE DATABASE.

ALL DATA DICTIONARY TABLES ARE OWNED BY THE SYS USER. THE BASE TABLES ARE RARELY ACCESSED BY THE USER BECAUSE THE INFORMATION IN THEM IS NOT EASY TO UNDERSTAND.

INFORMATION STORED IN THE DATA DICTIONARY INCLUDES NAMES OF THE ORACLE SERVER USERS, PRIVILEGES GRANTED TO USERS, DATABASE OBJECT NAMES, TABLES CONSTRAINTS AND AUDITING INFORMATION.

THERE ARE FOUR CATEGORIES OF DATA DICTIONARY VIEWS; EACH CATEGORY HAS A DISTINCT PREFIX THAT REFLECTS ITS INTENDED USE.

PREFIX DESCRIPTION

USER_ THESE VIEWS CONTAIN INFORMATION ABOUT OBJECTS

OWNED BY THE USER.

ALL_ THESE VIEWS CONTAINS INFORMATION ABOUT ALL OF THE TABLES(OBJECT TABLES AND RELATIONAL TABLES)ACCESSIBLE TO THE USER.

DBA_ THESE VIEWS ARE RESTRICTED VIEWS, WHICH CAN BE ACCESSED ONLY BY PEOPLE WHO HAVE BEEN ASSIGNED THE DBA ROLE.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

539

Page 540: Oracle Queries

ORACLEV$ THESE VIEWS ARE DYNAMIC PERFORMANCE VIEWS,

DATABASE SERVER PERFORMANCE, MEMORY , AND LOCKING.

QUERYING THE DATA DICTIONARY:

SEE THE NAMES OF TABLES OWNED BY THE USER.

SELECT * FROM USER_TABLES;

VIEW DISTINCT OBJECT_TYPES OWNED BY THE USER.

SELECT DISTINCT OBJECT_TYPE FROM USER_OBJECTS.

VIEW TABLES, VIEWS,SYNONYMS AND SEQUENCES OWNED BY THE USER.

SELECT * FROM CATALOG;

USER_CATALOG HAS A SYNONYM CALLED CAT.

YOU CAN USE THIS SYNONYM INSTEAD OF USER_CATALOG IN SQL STATEMENT.

SELECT * FROM CAT;

DATATYPES:

DATA TYPE DESCRIPTION

VARCHAR2(SIZE) VARIABLE-LENGTH CHARACTER DATA( A MAXIMUM SIZE MUST BE SPECIFIED: MINIMUM SIZE IS 1:MAXIMUM SIZE IS 4000).

CHAR FIXED –LENGTH CHARACTER DATA OF LENGTH SIZE BYTES (DEFAULT AND MINIMUM SIZE IS 1; MAXIMUM SIZE IS 2000).

NUMBER(P,S) NUMBER HAVING PRECISION P AND SCALE S(PRECISION IS THE TOTAL NUMBER OF DECIMAL DIGITS, AND THE SCALE IS THE NUMBER OF DIGITS TO THE RIGHT OF THE DECIMAL POINT; THE PRECISION CAN RANGE FROM 1 TO 38 AND SCALE CAN RANGE FROM -84 TO 127).

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

540

Page 541: Oracle Queries

ORACLEDATE DATE AND TIME VALUES TO THE NEAREST SECOND

BETWEEN JANUARY 1, 4712 B.C., AND A.D. DECEMBER 31, 9999.

LONG VARIABLE LENGTH CHARACTER DATA UP TO 2 GB.

CLOB CHRACTER DATA UP TO 4 GIGABYTES.

RAW(SIZE) RAW BINARY DATA OF LENGTH SIZE( A MAXIMUM SIZE MUST BE SPECIFIED. MAXIMUM SIZE IS 2000).

LONG RAW RAW BINARY DATA OF VARIABLE LENGTH UP TO 2 GB.

BLOB BINARY DATA UP TO 4 GB.

BFILE BINARY DATA STORED IN AN EXTERNAL FILE:UP TO 4 GB.

ROWID HEXADECIMAL STRING REPRESENTING THE UNIQUE ADDRESS OF A ROW IN ITS TABLE. THIS DATA TYPE IS PRIMARILY FOR VALUES RETURNED BY THE ROWID PSEUDOCOLUMN.

A LONG COLUMN IS NOT COPIED WHEN A TABLE IS CREATED USING ASUBQUERY.

A LONG COLUMN CANNOT BE INCLUDED IN A GROUP BY OR ORDER BY CLAUSE.

ONLY ONE LONG COLUMN CAN BE USED PER TABLE.

NO CONSTRAINT CAN BE DEFINED ON A LONG COLUMN.

YOU MAY WANT TO USE A CLOB COLUMN RATHER THAN A LONG COLUMN.

DATETIME DATA TYPES:

DATETIME ENHANCEMENTS WITH ORACLE 9I:

TIMESTAMP. DATE WITH FRACTIONAL SECONDS.

THIS IS EXTENSION OF THE DATE DATA TYPE.

IT STORES THE YEAR, MONTH,AND DAY OF THE DATE DATA TYPE PLUS HOUR,MINUTE, AND SECOND VALUES AS WELL AS THE FRACTIONAL SECOND VALUE.

THE TIME STAMP DATA TYPE IS SPECIFIED AS FOLLOWS.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

541

Page 542: Oracle Queries

ORACLETIMESTAMP[(FRACTIONAL_SECONDS_PRECISION)]

FRACTIONAL_SECONDS_PRECISION OPTIONALLY SPECIFIES THE NUMBER OF DIGITS IN THE FRACTIONAL PART OF THE SECOND DATETIME FIELD AND CAN BEA NUMBER IN THE RANGE 0 TO 9. THE DEFAULT IS 6.

CASCADE:

SQL> CREATE TABLE EMP_D 2 AS 3 SELECT * FROM EMP;

Table created.

SQL> CREATE TABLE DEPT_D 2 AS 3 SELECT * FROM DEPT;

Table created.

SQL> ALTER TABLE DEPT_D 2 ADD CONSTRAINT DEPT_D_PK PRIMARY KEY(DEPTNO);

Table altered.

SQL> ALTER TABLE EMP_D 2 ADD CONSTRAINT EMP_D_FK FOREIGN KEY(DEPTNO) REFERENCES

DEPT_D(DEPTNO);

Table altered.

1 ALTER TABLE DEPT_D 2* DISABLE CONSTRAINT DEPT_D_PKSQL> /ALTER TABLE DEPT_D*ERROR at line 1:ORA-02297: cannot disable constraint (SCOTT.DEPT_D_PK) - dependencies exist

SQL> ALTER TABLE DEPT_D 2 DROP CONSTRAINT DEPT_D_PK;DROP CONSTRAINT DEPT_D_PK *ERROR at line 2:ORA-02273: this unique/primary key is referenced by some foreign keys

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

542

Page 543: Oracle Queries

ORACLESQL> ALTER TABLE DEPT_D 2 DISABLE CONSTRAINT DEPT_D_PK CASCADE;

Table altered.

SQL> ALTER TABLE DEPT_D 2 ENABLE CONSTRAINT DEPT_D_PK;

Table altered.

SQL> ALTER TABLE DEPT_D 2 DISABLE CONSTRAINT DEPT_D_PK;

Table altered.

SQL> ALTER TABLE DEPT_D 2 ENABLE CONSTRAINT DEPT_D_PK;

Table altered.

1 ALTER TABLE DEPT_D 2* ENABLE CONSTRAINT DEPT_D_PK CASCADE;SQL> /ENABLE CONSTRAINT DEPT_D_PK CASCADE; *ERROR at line 2:ORA-00933: SQL command not properly ended

ENABLING A PRIMARY KEY CONSTRAINT THAT WAS DISABLED WITH CASCADEOPTION DOES NOT ENABLE ANY FOREIGN KEYS THAT ARE DEPENDENT UPONTHE PRIMARY KEY.

CASCADING CONSTRAINTS:

THE CASCADE CONSTRAINTS CLAUSE IS USED ALONG WITH THE DROP COLUMNCLAUSE.

THE CASCADE CONSTRAINTS CLAUSE DROPS ALL REFERENTIAL INTEGRITYCONSTRAINTS THAT REFERTO THE PRIMARY AND UNIQUE KEYS DEFINED ON THE DROPPED COLUMNS.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

543

Page 544: Oracle Queries

ORACLETHE CASCADE CONSTRAINTS CLAUSE ALSO DROPS ALL MULTICOLUMNCONSTRAINTS DEFINED ON THE DROPPED COLUMNS.

SQL> CREATE TABLE TEST1 2 (PK NUMBER(10) CONSTRAINT TEST1_PK PRIMARY KEY, 3 FK NUMBER(10), 4 COL1 NUMBER(10), 5 COL2 NUMBER(10), 6 CONSTRAINT TEST1_FK FOREIGN KEY(FK) REFERENCES TEST1(PK), 7 CONSTRAINT TEST1_CK1 CHECK(PK > 0 AND COL1 > 0), 8 CONSTRAINT TEST1_CK2 CHECK(COL2 > 0));

Table created.

SQL> ALTER TABLE TEST1 2 DROP COLUMN PK;DROP COLUMN PK *ERROR at line 2:ORA-12992: cannot drop parent key column

SQL> ALTER TABLE TEST1 2 DROP COLUMN COL1;DROP COLUMN COL1 *ERROR at line 2:ORA-12991: column is referenced in a multi-column constraint

SQL> ALTER TABLE TEST1 2 DROP (PK);DROP (PK) *ERROR at line 2:ORA-12992: cannot drop parent key column

SQL> ALTER TABLE TEST1 2 DROP (COL1);DROP (COL1) *ERROR at line 2:ORA-12991: column is referenced in a multi-column constraint

SQL> ALTER TABLE TEST1 2 DROP (PK) CASCADE CONSTRAINTS;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

544

Page 545: Oracle Queries

ORACLETable altered.

THE ABOVE STATEMENT DROPS COLUMN PK, THE PRIMARY KEY CONSTRAINT,THE FOREIGN KEYCONSTRAINT AND CHECK CONSTRAINT.

SQL> DESC TEST1; Name Null? Type ----------------------------------------------------- -------- ------------------------------------ FK NUMBER(10) COL1 NUMBER(10) COL2 NUMBER(10)

1 CREATE TABLE TEST2 2 (PK NUMBER(10) CONSTRAINT TEST2_PK PRIMARY KEY, 3 FK NUMBER(10), 4 COL1 NUMBER(10), 5 COL2 NUMBER(10), 6 CONSTRAINT TEST2_FK FOREIGN KEY(FK) REFERENCES TEST2(PK), 7 CONSTRAINT TEST2_CK1 CHECK(PK > 0 AND COL1 > 0), 8* CONSTRAINT TEST2_CK2 CHECK(COL2 > 0)) 9 /

Table created.

SQL> ALTER TABLE TEST2 2 DROP (PK,FK,COL1);

Table altered.

SQL> DESC TEST2 Name Null? Type ----------------------------------------------------- -------- ------------------------------------ COL2 NUMBER(10)

IN THE ABOVE STATEMENT WE ARE DROPING ALL THE COLUMNS THAT ARE REFERENCED BY CONSTRAINTS,HERE THERE IS NO USE OF THE CASCADE CONSTRAINTS.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

545

Page 546: Oracle Queries

ORACLEUSER_CONSTRAINTS:

1 CREATE TABLE EMP_DU 2 (EMPNO NUMBER(10) CONSTRAINT PAVAN_PK PRIMARY KEY,

3 ENAME VARCHAR2(10) CONSTRAINT PAVAN_UK UNIQUE,

4 JOB VARCHAR2(10) CONSTRAINT PAVAN_NN NOT NULL,

5 SAL NUMBER(10) CONSTRAINT PAVAN_CK CHECK(SAL > 1000),

6* DEPTNO NUMBER(10) CONSTRAINT PAVAN_FK REFERENCES DEPT(DEPTNO))

SQL> /

Table created.

1 SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE,SEARCH_CONDITION 2 FROM USER_CONSTRAINTS 3* WHERE TABLE_NAME='EMP_DU'SQL> /

CONSTRAINT_NAME C ------------------------------ - SEARCH_CONDITION -------------------------------------------------------------------------------- PAVAN_NN C "JOB" IS NOT NULL PAVAN_CK C SAL > 1000 PAVAN_PK P PAVAN_UK U PAVAN_FK R INTEGRITY CONSTRAINTS:

MAINTAINING SECURITY AND INTEGRITY OF A DATABASE IS THE MOST

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

546

Page 547: Oracle Queries

ORACLEIMPORTANT FACTOR IN JUDGING THE SUCCESS OF A SYSTEM.

INTEGRITY CONSTRAINT IS A MECHANISM USED BY ORACLE TO PREVENT INVALID DATA ENTRY INTO THE TABLE.

INTEGRITY CONSTRAINTS ARE DEVIDED IN TO THREE CATEGORIES:

1.DOMAIN INTEGRITY CONSTRAINTS.

2.ENTITY INTEGRITY CONSTRAINTS.

3.REFERENTIAL INTEGRITY CONSTRAINTS.

DOMAIN INTEGRITY CONSTRAINTS.

NOT NULL

CHECK

BOTH FALL UNDER THIS CATEGORY.

ENTITY INTEGRITY CONSTRAINTS.

ENTITY INTEGRITY CONSTRAINTS ARE OF TWO TYPES:

UNIQUE CONSTRAINT.

PRIMARY KEY CONSTRAINT.

REFERENTIAL INTEGRITY CONSTRAINTS.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

547

Page 548: Oracle Queries

ORACLEREFERENTIAL INTEGRITY CONSTRAINT ENFORCES RELATIONSHIP BETWEEN TABLES.

IT DESIGNATES A COLUMN OR COMBINATION OF COLUMNS AS A FOREIGN KEY.

THE FOREIGN KEY ESTABLISHES A RELATIONSHIP WITH A SPECIFIED PRIMARY KEY OR UNIQUE KEY IN ANOTHER TABLE, CALLED THE REFERENCED KEY.

IN THIS RELATION SHIP , THE TABLE CONTAINING THE FOREIGN KEY IS CALLED THE CHILD TABLE AND THE TABLE CONTAINING THE REFERENCED KEY IS CALLED THE PARENT TABLE.

TRIGGERS:

DML TRIGGERS:

CREATE [OR REPLACE ] TRIGGER TRIGGER_NAME

{ BEFORE | AFTER|

{ INSERT|DELETE|UPDATE|UPDATE OF COLUMN LIST} ON TABLE NAME

[FOR EACH ROW]

[WHEN (…..)]

[DECLARE…..]

BEGIN

……EXECUTABLE STATEMENETS

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

548

Page 549: Oracle Queries

ORACLE[EXCEPTION…..]

END[TRIGGER_NAME];

SQL> CREATE TABLE DML_EX 2 (ACTION VARCHAR2(10), 3 TDATE TIMESTAMP);

Table created.

1 CREATE OR REPLACE TRIGGER BFORE_INSERT 2 BEFORE INSERT ON EMP 3 BEGIN 4 INSERT INTO DML_EX 5 VALUES 6 ('BFOREINSERT',SYSTIMESTAMP); 7* END; 8 /

Trigger created.

1 CREATE OR REPLACE TRIGGER BFORE_INSERT_ROW 2 BEFORE INSERT ON EMP FOR EACH ROW 3 BEGIN 4 INSERT INTO DML_EX 5 VALUES 6 ('BFOREINSERTROW',SYSTIMESTAMP); 7* END; 8 /

Trigger created.

1 CREATE OR REPLACE TRIGGER AFTER_INSERT 2 AFTER INSERT ON EMP 3 BEGIN 4 INSERT INTO DML_EX

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

549

Page 550: Oracle Queries

ORACLE 5 VALUES 6 ('AFTERINSERT',SYSTIMESTAMP); 7* END;SQL> /

Trigger created.

1 CREATE OR REPLACE TRIGGER AFTER_INSERT_ROW 2 AFTER INSERT ON EMP FOR EACH ROW 3 BEGIN 4 INSERT INTO DML_EX 5 VALUES 6 ('AFTERINSERTROW',SYSTIMESTAMP); 7* END; 8 /

Trigger created.

1 CREATE OR REPLACE TRIGGER BEFORE_UPDATE 2 BEFORE UPDATE ON EMP 3 BEGIN 4 INSERT INTO DML_EX 5 VALUES 6 ('BEFOREUPDATE',SYSTIMESTAMP); 7* END; 8 /

Trigger created.

1 CREATE OR REPLACE TRIGGER BEFORE_UPDATE_ROW 2 BEFORE UPDATE ON EMP FOR EACH ROW 3 BEGIN 4 INSERT INTO DML_EX 5 VALUES 6 ('BEFOREUPDATEROW',SYSTIMESTAMP); 7* END; 8 /

Trigger created.

1 CREATE OR REPLACE TRIGGER AFTER_UPDATE

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

550

Page 551: Oracle Queries

ORACLE 2 AFTER UPDATE ON EMP 3 BEGIN 4 INSERT INTO DML_EX 5 VALUES 6 ('AFTERUPDATE',SYSTIMESTAMP); 7* END;SQL> /

Trigger created.

1 CREATE OR REPLACE TRIGGER AFTER_UPDATE_ROW 2 AFTER UPDATE ON EMP FOR EACH ROW 3 BEGIN 4 INSERT INTO DML_EX 5 VALUES 6 ('AFTERUPDATEROW',SYSTIMESTAMP); 7* END; 8 /

Trigger created.

1 CREATE OR REPLACE TRIGGER BEFORE_DELETE 2 BEFORE DELETE ON EMP 3 BEGIN 4 INSERT INTO DML_EX 5 VALUES 6 ('BEFOREDELETE',SYSTIMESTAMP); 7* END;SQL> /

Trigger created.

1 CREATE OR REPLACE TRIGGER BEFORE_DELETE_ROW 2 BEFORE DELETE ON EMP FOR EACH ROW 3 BEGIN 4 INSERT INTO DML_EX 5 VALUES 6 ('BEFOREDELETEROW',SYSTIMESTAMP); 7* END; 8 /

Trigger created.

1 CREATE OR REPLACE TRIGGER AFTER_DELETE 2 AFTER DELETE ON EMP 3 BEGIN 4 INSERT INTO DML_EX 5 VALUES 6 ('AFTERDELETE',SYSTIMESTAMP); 7* END;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

551

Page 552: Oracle Queries

ORACLESQL> /

Trigger created.

1 CREATE OR REPLACE TRIGGER AFTER_DELETE_ROW 2 AFTER DELETE ON EMP FOR EACH ROW 3 BEGIN 4 INSERT INTO DML_EX 5 VALUES 6 ('AFTERDELETEROW',SYSTIMESTAMP); 7* END; 8 /

Trigger created.

SQL> SELECT * FROM DML_EX;

no rows selected

SQL> INSERT INTO EMP 2 (EMPNO,DEPTNO) 3 VALUES 4 (1,10);INSERT INTO EMP *ERROR at line 1:ORA-01401: inserted value too large for column ORA-06512: at "SCOTT.BFORE_INSERT", line 2 ORA-04088: error during execution of trigger 'SCOTT.BFORE_INSERT'

SQL> ALTER TABLE DML_EX 2 MODIFY ACTION VARCHAR2(50);

Table altered.

SQL> INSERT INTO EMP 2 (EMPNO,DEPTNO) 3 VALUES 4 (1,10);

1 row created.

SQL> SELECT * FROM DML_EX;

ACTION

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

552

Page 553: Oracle Queries

ORACLE-------------------------------------------------- TDATE --------------------------------------------------------------------------- BFOREINSERT 08-SEP-05 06.59.01.000000 AM BFOREINSERTROW 08-SEP-05 06.59.01.000000 AM AFTERINSERTROW 08-SEP-05 06.59.01.000000 AM AFTERINSERT 08-SEP-05 06.59.01.000000 AM

SQL> DELETE FROM DML_EX;

4 rows deleted.

SQL> DELETE FROM EMP WHERE EMPNO=1;

1 row deleted.

SQL> SELECT * FROM DML_EX;

ACTION -------------------------------------------------- TDATE --------------------------------------------------------------------------- BEFOREDELETE 08-SEP-05 07.00.11.000001 AM BEFOREDELETEROW 08-SEP-05 07.00.11.000001 AM AFTERDELETEROW 08-SEP-05 07.00.11.000001 AM AFTERDELETE 08-SEP-05 07.00.11.000001 AM

SQL> DELETE FROM DML_EX;

4 rows deleted.

SQL> UPDATE EMP 2 SET SAL = SAL+0 3 WHERE EMPNO=7788;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

553

Page 554: Oracle Queries

ORACLE1 row updated.

SQL> SELECT * FROM DML_EX;

ACTION -------------------------------------------------- TDATE --------------------------------------------------------------------------- BEFOREUPDATE 08-SEP-05 07.01.36.000001 AM BEFOREUPDATEROW 08-SEP-05 07.01.36.000001 AM AFTERUPDATEROW 08-SEP-05 07.01.36.000001 AM AFTERUPDATE 08-SEP-05 07.01.36.000001 AM

SQL> DELETE FROM DML_EX;

4 rows deleted.

SQL> SELECT * FROM DML_EX;

no rows selected

SQL> UPDATE EMP 2 SET SAL = SAL+0;

14 rows updated.

SQL> SELECT * FROM DML_EX;

ACTION -------------------------------------------------- TDATE --------------------------------------------------------------------------- BEFOREUPDATE 08-SEP-05 07.02.26.000001 AM BEFOREUPDATEROW 08-SEP-05 07.02.26.000001 AM AFTERUPDATEROW 08-SEP-05 07.02.26.000001 AM

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

554

Page 555: Oracle Queries

ORACLEBEFOREUPDATEROW 08-SEP-05 07.02.26.000001 AM AFTERUPDATEROW 08-SEP-05 07.02.26.000001 AM BEFOREUPDATEROW 08-SEP-05 07.02.26.000001 AM AFTERUPDATEROW 08-SEP-05 07.02.26.000001 AM BEFOREUPDATEROW 08-SEP-05 07.02.26.000001 AM AFTERUPDATEROW 08-SEP-05 07.02.26.000001 AM BEFOREUPDATEROW 08-SEP-05 07.02.26.000001 AM AFTERUPDATEROW 08-SEP-05 07.02.26.000001 AM BEFOREUPDATEROW 08-SEP-05 07.02.26.000001 AM

ACTION -------------------------------------------------- TDATE --------------------------------------------------------------------------- AFTERUPDATEROW 08-SEP-05 07.02.26.000001 AM BEFOREUPDATEROW 08-SEP-05 07.02.26.000001 AM AFTERUPDATEROW 08-SEP-05 07.02.26.000001 AM BEFOREUPDATEROW 08-SEP-05 07.02.26.000001 AM AFTERUPDATEROW 08-SEP-05 07.02.26.000001 AM BEFOREUPDATEROW 08-SEP-05 07.02.26.000001 AM

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

555

Page 556: Oracle Queries

ORACLEAFTERUPDATEROW 08-SEP-05 07.02.26.000001 AM BEFOREUPDATEROW 08-SEP-05 07.02.26.000001 AM AFTERUPDATEROW 08-SEP-05 07.02.26.000001 AM BEFOREUPDATEROW 08-SEP-05 07.02.26.000001 AM AFTERUPDATEROW 08-SEP-05 07.02.26.000001 AM BEFOREUPDATEROW

ACTION -------------------------------------------------- TDATE --------------------------------------------------------------------------- 08-SEP-05 07.02.26.000001 AM AFTERUPDATEROW 08-SEP-05 07.02.26.000001 AM BEFOREUPDATEROW 08-SEP-05 07.02.26.000001 AM AFTERUPDATEROW 08-SEP-05 07.02.26.000001 AM BEFOREUPDATEROW 08-SEP-05 07.02.26.000001 AM AFTERUPDATEROW 08-SEP-05 07.02.26.000001 AM AFTERUPDATE 08-SEP-05 07.02.26.000001 AM

30 rows selected.

1* SELECT COUNT(*) FROM EMPSQL> /

COUNT(*) ----------

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

556

Page 557: Oracle Queries

ORACLE 14

DDL TRIGGERS:

CREATE [OR REPLACE ] TRIGGER TRIGGER_NAME

{BEFORE |AFTER|{DDL EVENT} ON {DATABASE|SCHEMA}

DECLARE

VARIABLE DECLARATIONS.

BEGIN

….SOME CODE….

END;

WHERE DDL_EVENT:

CREATE

ALTER

DROP

COMMENT.

GRANT.

REVOKE.

RENAME.

TRUNCATE.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

557

Page 558: Oracle Queries

ORACLE

SQL> CREATE TABLE CREATE_DDL_CREA 2 (ACTION VARCHAR2(20), 3 TDATE TIMESTAMP);

Table created.

1 CREATE OR REPLACE TRIGGER CREATE_DDL_BFORE 2 BEFORE CREATE ON SCHEMA 3 BEGIN 4 INSERT INTO CREATE_DDL_CREA 5 VALUES 6 ('CREATING',SYSTIMESTAMP); 7* END; 8 /

Trigger created.

1 CREATE OR REPLACE TRIGGER CREATE_DDL_AFTER 2 AFTER CREATE ON SCHEMA 3 BEGIN 4 INSERT INTO CREATE_DDL_CREA 5 VALUES 6 ('CREATED',SYSTIMESTAMP); 7* END; 8 /

Trigger created.

1 CREATE OR REPLACE TRIGGER CREATE_DDL_BFORE 2 BEFORE CREATE ON DATABASE 3 BEGIN 4 INSERT INTO CREATE_DDL_CREA 5 VALUES 6 ('CREATING DATABASE',SYSTIMESTAMP);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

558

Page 559: Oracle Queries

ORACLE 7* END; 8 /BEFORE CREATE ON DATABASE *ERROR at line 2:ORA-01031: insufficient privileges

SQL> CONNEnter user-name: SYS AS SYSDBAConnected.SQL> GRANT DBA TO SCOTT;

Grant succeeded.

SQL> CONNEnter user-name: SCOTTConnected.

SQL> CREATE OR REPLACE TRIGGER CREATE_DDL_BFORE 2 BEFORE CREATE ON DATABASE 3 BEGIN 4 INSERT INTO CREATE_DDL_CREA 5 VALUES 6 ('CREATING DATABASE',SYSTIMESTAMP); 7 END; 8 /CREATE OR REPLACE TRIGGER CREATE_DDL_BFORE *ERROR at line 1:ORA-04095: trigger 'CREATE_DDL_BFORE' already exists on another table, cannot replace it

1 CREATE OR REPLACE TRIGGER CREATE_DDL_BFORE_DATA 2 BEFORE CREATE ON DATABASE 3 BEGIN 4 INSERT INTO CREATE_DDL_CREA 5 VALUES 6 ('CREATING DATABASE',SYSTIMESTAMP); 7* END; 8 /

Trigger created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

559

Page 560: Oracle Queries

ORACLE 1 CREATE OR REPLACE TRIGGER CREATE_DDL_ATER_DATA 2 AFTER CREATE ON DATABASE 3 BEGIN 4 INSERT INTO CREATE_DDL_CREA 5 VALUES 6 ('CREATED DATABASE',SYSTIMESTAMP); 7* END;SQL> /

Trigger created.

SQL> CREATE TABLE B 2 (EMPNO NUMBER(10));

Table created.

SQL> SELECT * FROM CREATE_DDL_CREA;

ACTION TDATE -------------------- --------------------------------------------------------------------------- CREATING 08-SEP-05 07.17.57.000000 AM CREATING DATABASE 08-SEP-05 07.17.57.000000 AM CREATED 08-SEP-05 07.17.57.000000 AM CREATED DATABASE 08-SEP-05 07.17.57.000000 AM

DATABASE EVENT TRIGGERS:

DATABASE EVENT TRIGGERS FIRE WHENEVER DATABASE-WIDE EVENTS OCCUR.

THERE ARE FIVE DATABASE EVENT TRIGGERS:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

560

Page 561: Oracle Queries

ORACLESTARTUP.

FIRES WHEN THE DATABASE IS OPENED.

SHUTDOWN

FIRES WHEN THE DATABASE IS SHUTDOWN NORMALLY.

SERVERERROR

FIRES WHEN AN ORACLE ERROR IS RAISED.

LOGON

FIRES WHEN AN ORACLE SESSION BEGINS.

LOGOFF

FIRES WHEN ANORACLE SESSION TERMINATES NORMALLY.

CREATE [OR REPLACE] TRIGGER TRIGGER_NAME

{BEFORE|AFTER{DATABASE EVENT} ON {DATABASE|SCHEMA}

DECLARE

VARIABLE DECLARATIONS.

BEGIN

…SOME CODE…

END.

NO BEFORE STARTUP TRIGGERS.

NOAFTER SHUTDOWN TRIGGERS.

NOBEFORE LOGON TRIGGERS.

NOAFTERLOGOFF TRIGGERS.

NOBEFORESERVERERROR.

TABLE : BASIC UNIT OF STORAGE. COMPOSED OF ROWS AND COLUMNS.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

561

Page 562: Oracle Queries

ORACLEVIEW : LOGICALLY REPRESENTS SUBSETS OF DATA FROM ONE OR MORE TABLES.

SEQUENCE:GENERATES PRIMARY KEY VALUES.

INDEX: IMPROVES THE PERFORMANCE OF SOME QUERIES.

SYNONYM : ALTERNATIVE NAME FOR AN OBJECT.

INLINEVIEW:

INLINE VIEW IS BASICALLY A SUBQUERY WITH AN ALIAS(CORRELATION NAME) THAT YOU CAN USE LIKE A VIEW INSIDE A SQL STATEMENT.

IT IS NOT A SCHEMA OBJECT LIKE NORMAL VIEW.

QUERY DISPLAYS EMPLOYEE NAMES,SALARIES,DEPARTMENT NUMBERS AND MAXIMUM SALARIES FOR ALL THE EMPLOYEES WHO EARN LESS THAN THE MAX SAL IN THEIR DEPARTMENT.

SQL> SELECT A.ENAME,A.SAL,A.DEPTNO,B.MAXSAL 2 FROM EMP A,(SELECT DEPTNO,MAX(SAL) MAXSAL FROM EMP GROUP BY DEPTNO) B 3 WHERE A.DEPTNO=B.DEPTNO 4 AND A.SAL < B.MAXSAL ORDER BY ENAME;

ENAME SAL DEPTNO MAXSAL ---------- ---------- ---------- ---------- ADAMS 1100 20 3000 ALLEN 1600 30 2850 CLARK 2450 10 5000 JAMES 950 30 2850 JONES 2975 20 3000 MARTIN 1250 30 2850 MILLER 1300 10 5000 SMITH 800 20 3000 TURNER 1500 30 2850 WARD 1250 30 2850

10 rows selected.

SQL> SELECT ENAME,SAL,DEPTNO,MAXSAL 2 FROM EMP A 3 WHERE SAL < (SELECT MAX(SAL) 4 SQL> EDWrote file afiedt.buf

1 SELECT ENAME,SAL,DEPTNO

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

562

Page 563: Oracle Queries

ORACLE 2 FROM EMP A 3 WHERE SAL < (SELECT MAX(SAL) FROM EMP B 4* WHERE A.DEPTNO=B.DEPTNO) 5 ORDER BY ENAME;

ENAME SAL DEPTNO ---------- ---------- ---------- ADAMS 1100 20 ALLEN 1600 30 CLARK 2450 10 JAMES 950 30 JONES 2975 20 MARTIN 1250 30 MILLER 1300 10 SMITH 800 20 TURNER 1500 30 WARD 1250 30

10 rows selected.

TOP-N ANALYSIS:

TOP-N QUERIES ASK FOR THE N LARGEST OR SMALLEST VALUES OF A COLUMN.

FOR EXAMPLE:

- WHAT ARE THE TEN BEST SELLING PRODUCTS.- WHAT ARE THE TEN WORST SELLING PRODUCTS.

BOTH LARGEST VALUES AND SMALLEST VALUES SETS ARE CONSIDEREDTOP-N QUERIES.

PERFORMING TOP-N ANALYSIS:

THE HIGH-LEVEL STRUCTURE OF A TOP-N ANALYSIS QUERY IS:

SELECT [COLUMN_LIST],ROWNUM

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

563

Page 564: Oracle Queries

ORACLEFROM (SELECT [COLUMN_LIST] FROM TABLE ORDER BY TOP-N_COLUMN)

WHERE ROWNUM < = N;

A SUBQERY OR AN INLINE VIEW TO GENERATE THE SORTED LIST OF DATA. THE SUBQERY OR THE INLINE VIEW INCLUDES THE ORDER BY CLAUSE TO ENSURE THAT THE RANKING IS IN THE DESIRED ORDER. FOR RESULTS RETRIVING THE LARGEST VALUES,A DESC PARAMETER IS NEEDED.

AN OUTER QUERY TO LIMIT THE NUMBER OF ROWS IN THE FINAL RESULT SET.THE OUTER QUERY INCLUDES THE FOLLOWING COMPONENTS:

THE ROWNUM PSEDOCOLUMN, WHICH ASSIGNS A SEQUENTIAL VALUE STARTINGWITH 1 TO EACH OF THE ROWS RETURNED FROM THE SUBQUERY.

A WHERE CLAUSE, WHICH SPECIFIES THE N ROWS TO BE RETURNED. THE OUTER WHERE CLAUSE MUST USE A < OR < = OPERATOR.

SELECT ROWNUM AS RANK, ENAME,SAL

FROM (SELECT ENAME,SAL FROM EMP ORDER BY SAL DESC)

WHERE ROWNUM < = 3.

USING A SEQUENCE:

CACHING SEQUENCE VALUES IN MEMORY GIVES FASTER ACCESS TO THOSE VALUES.

GAPS IN SEQUENCE VALUES CAN OCCUR WHEN:

A ROLLBACK OCCURS.

THE SYSTEM CRASHES.

A SEQUENCE IS USED IN ANOTHER TABLE.

IF THE SEQUENCE WAS CREATED WITH NOCACHE, VIEW THE NEXT AVAILABLE VALUE, BY QUERYING THE USER_SEQUENCES TABLE.

DATABASE LINKS:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

564

Page 565: Oracle Queries

ORACLEA DATABASE LINK CONNECTION ALLOWS LOCAL USERS TO ACCESS DATA ON A REMOTE DATABASE.

A DATABASE LINK IS A POINTER THAT DEFINES A ONE-WAY COMMUNICATION PATH FROM AN ORACLE DATABASE SERVER TO ANOTHER DATABASE SERVER.

THE LINK POINTER IS ACTUALLY DEFINED AS AN ENTRY IN A DATA DICTIONARY TABLE.

TO ACCESS THE LINK,YOU MUST BE CONNECTED TO THE LOCAL DATABASE THAT CONTAINS THE DATA DICTIONARY ENTRY.

A DATABASE LINK CONNECTION IS ONE-WAY IN THE SENSE THAT A CLIENT CONNECTED TO LOCAL DATABASE ‘A’ CAN USE A LINK STORED IN DATABASE ‘A’TO ACCESS INFORMATION IN REMOTE DATABASE ‘B’, BUT USERS CONNECTED TO DATABASE B CANNOT USE THE SAME LINK TO ACCESS DATA IN DATABASE A.

IF LOCAL USERS ON DATABASE B WANT TO ACCESS DATA ON DATABSE A , THEY MUST DEFINE A LINK THAT IS STORED IN THE DATA DICTIONARY OF DATABASE B.

A DATABASE LINK CONNECTION GIVES LOCAL USERS ACCESS TO DATA ON REMOTE DATABASE. FOR THIS CONNECTION TO OCCUR, EACH DATABASE IN THE DISTRIBUTED SYSTEM MUST HAVE A UNIQUE GLOBAL DATABASE NAME.

THE GLOBAL DATABASE NAME UNIQUELY IDENTIFIES A DATABASE SERVER IN A DISTRIBUTED SYSTEM.

THE GREAT ADVANTAGE OF DATABASE LINKS IS THAT THEY ALLOW USERS TO ACCESS ANOTHER USERS OBJECTS IN A REMOTE DATABASE SO THAT THEY ARE BOUNDED BY THE PRIVILEGE SET OF THE OBJECTS OWNER.

IN OTHER WORDS , A LOCAL USER CAN ACCESS A REMOTE DATABASE WITHOUT HAVING TO BE A USER ON THE REMOTE DATABASE.

NOTE:

TYPICALLY, THE DBA IS RESPONSIBLE FOR CREATING THE DATABASE LINK. THE DICTIONARY VIEW USER_DB_LINKS CONTAINS INFORMATION ON LINKS TO WHICH A USER HAS ACCESS.

THE EXAMPLE SHOWS A USER SCOTT ACCESSING THE EMP TABLE ON THE REMOTE DATABASE WITH THE GLOBAL NAME HQ.ACME.COM.

CREATE THE DATABASE LINK:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

565

Page 566: Oracle Queries

ORACLE CREATE PUBLIC DATABASE LINK HQ.ACME.COM

USING ‘SALES’;

DATABASE LINK CREATED.

WRITE SQL STATEMENTS THAT USE THE DATABASE LINK:

SELECT * FROM [email protected].

THE USING CLAUSE IDENTIFIES THE SERVICE NAME OF A REMOTE DATABASE.

ONCE THE DATABASE LINK IS CREATED, YOU CAN WRITE SQL STATEMENTS AGAINST THE DATA IN THE REMOTE SITE. IF A SYNONYM IS SET UP, YOU CAN WRITE SQL STATEMENTS USING THE SYNONYM.

CREATE PUBLIC SYNONYM HQ_EMP FOR [email protected];

SELECT * FROM HQ_EMP;

YOU CANNOT GRANT PRIVILEGES ON REMOTE OBJECTS.

CORRELATED SUBQUERIES:

CORRELATED SUBQUERIES ARE USED FOR ROW-BY-ROW PROCESSING.EACH SUBQUERY IS EXECUTED ONCE FOR EVERY ROW OF THE OUTER QUERY.

CORRELATED SUBQUERIES EXECUTION:

1. GET A CANDIDATE ROW(FETCHED BY THE OUTER QUERY).

2. EXECUTE THE INNER QUERY USING THE VALUE OF THE CANDIDATE ROW.

3. USER THE VALUES RESULTING FROM THE INNER QUERY TO QUALIFY OR DISQUALIFY THE CANDIDATE.

4. REPEAT UNTIL NO CANDIDATE ROW REMAINS.

NESTED SUBQUERY EXECUTION:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

566

Page 567: Oracle Queries

ORACLETHE INNER QUERY EXECUTES FIRST AND FINDS A VALUE.

THE OUTER QUERY EXECUTES ONCE,USING THE VALUE FROM THE INNER QUERY.

THE ORACLE SERVER PERFORMS A CORRELATED SUBQUERY WHEN THE SUBQUERY REFERENCES A COLUMN FROM A TABLE REFERRED TO IN THE PARENT STATEMENT.

A CORRELATED SUBQUERY IS EVALUATED ONCE FOR EACH ROW PROCESSEDBY THE PARENT STATEMENT.

THE PARENT STATEMENT CAN BE A SELECT,UPDATE OR DELETE STATEMENT.

FIND ALL EMPLOYEES WHO EARN MORE THAN THE AVERAGE SALARY IN THEIR IN THEIR DEPARTMENETS.

SELECT ENAME,SAL,DEPTNO FROM EMP A

WHERE SAL < (SELECT AVG(SAL) FROM EMP B WHERE B.DEPTNO=A.DEPTNO);

CORRELATED UPDATE:

SQL> CREATE TABLE EMP_D 2 AS 3 SELECT * FROM EMP;

Table created.

SQL> DESC EMP_D Name Null? Type ----------------------------------------------------- -------- ------------------------------------ EMPNO NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2)

SQL> ALTER TABLE EMP_D 2 ADD DNAME VARCHAR2(11);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

567

Page 568: Oracle Queries

ORACLETable altered.

SQL> UPDATE EMP_D E 2 SET DNAME=(SELECT DNAME FROM DEPT D 3 WHERE E.DEPTNO=D.DEPTNO);

14 rows updated.

SQL> SELECT EMPNO,ENAME,DEPTNO,DNAME FROM EMP_D;

EMPNO ENAME DEPTNO DNAME ---------- ---------- ---------- ----------- 7369 SMITH 20 RESEARCH 7499 ALLEN 30 SALES 7521 WARD 30 SALES 7566 JONES 20 RESEARCH 7654 MARTIN 30 SALES 7698 BLAKE 30 SALES 7782 CLARK 10 ACCOUNTING 7788 SCOTT 20 RESEARCH 7839 KING 10 ACCOUNTING 7844 TURNER 30 SALES 7876 ADAMS 20 RESEARCH 7900 JAMES 30 SALES 7902 FORD 20 RESEARCH 7934 MILLER 10 ACCOUNTING

14 rows selected.

CORRELATED DELETE:

SQL> CREATE TABLE EMP_PRESENT 2 AS 3 SELECT * FROM EMP;

Table created.

SQL> CREATE TABLE EMP_PAST 2 AS 3 SELECT * FROM EMP;

Table created.

SQL> DELETE FROM EMP_PAST 2 WHERE EMPNO IN (7369,7782,7839,7844,7788);

5 rows deleted.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

568

Page 569: Oracle Queries

ORACLE

SQL> SELECT * FROM EMP_PAST;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

9 rows selected.

SQL> SELECT * FROM EMP_PRESENT;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10

14 rows selected.

SQL> DELETE FROM EMP_PRESENT E 2 WHERE EMPNO= 3 (SELECT EMPNO FROM EMP_PAST M WHERE M.EMPNO=E.EMPNO);

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

569

Page 570: Oracle Queries

ORACLE9 rows deleted.

SQL> SELECT * FROM EMP_PRESENT;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 500 0 30 CONTROLLING USER ACCESS:

IN A MULTI USER ENVIRNOMENT, YOU WANT TO MAINTAIN SECURITY OF THE DATABASE ACCESS AND USE. WITH THE ORACLE SERVER DATABASE SECURITY , YOU CAN DO THE FOLLOWING:

CONTOL DATABASE ACCESS.

GIVE ACCESS TO SPECIFIC OBJECTS IN THE DATABASE.

DATABASE SECURITY CAN BE CLASSIFIED INTO TWO CATEGORIES:

SYSTEM SECURITY.

DATA SECURITY.

SYSTEM SECURITY COVERS ACCESS AND USE OF THE DATABASE AT SYSTEM LEVEL,SUCH AS USERNAME AND PASSWORD,DISK SPACE ALLOCATED TO USERS, AND SYSTEM OPERATIONS ALLOWED BY THE USER.

DATABASE SECURITY COVERS ACCESS AND USE OF THE DATBASE OBJECTS AND THE ACTIONS THAT THOSE USERS CAN HAVE ON THE OBJECTS.

PRIVILEGES ARE THE RIGHT TO EXECUTE PARTICULAR SQL STATEMENTS.THE DATABASE ADMINISTRATOR IS A HIGH LEVEL USER WITH THE ABILITY TO GRANT USERS ACCESS TO THE DATABASE AND ITS OBJECTS. THE USERS REQUIRE SYSTEM PRIVILEGES TO GAIN ACCESS TO THE DATABASE AND OBJECT PRIVILEGES TO MANIPULATE THE CONTENT OF THE OBJECTS IN THE DATABASE. USERS CAN ALSO BE GIVEN THE PRIVILEGE TO GRANT ADDITIONAL PRIVILEGES TO OTHER USERS OR ROLES, WHICH ARE NAMED GROUPS OF RELATED PRIVILEGES.

SCHEMA:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

570

Page 571: Oracle Queries

ORACLEA SCHEMA IS A COLLECTION OF OBJECTS,SUCH AS TABLES,VIEWS, AND SEQUENCES. THE SCHEMA IS OWNED BY A DATABASE USER AND HAS THE SAME NAME AS THAT USER.

PRIVILEGES: 1.SYSTEM PRIVILEGS. 2. OBJECT PRIVILEGES.

SYSTEM PRIVILEGES: GAIN ACCESS TO THE DATABASE. SYSTEM PRIVILEGES TYPICALLY ARE PROVIDED BY THE DATABASE ADMINISTRATOR.THE DBA HAS HIGH LEVEL SYSTEM PRIVILEGES: CREATE USERS,REMOVE TABLES,BACK UP TABLES.

OBJECT PRIVILEGES:MANIPULATES THE CONTENTS OF THE DATABASE OBJECTS.

CREATING USERS:

THE DBA CREATES USERS BY USING THE CREATE USER STATEMENT.

SQL> CREATE USER PAVAN2 IDENTIFIED BY GAYATRI;User created.

AT THIS POINT USER DOES NOT HAVE ANY PRIVILEGES.THE DBA THEN GRANT THE NUMBER OF PRIVILEGES TO THAT USER.THESE PRIVILEGES DETERMINE WHAT THE USER CAN DO AT THE DATABASE LEVEL.

ONCE A USER IS CREATED, THE DBA CAN GRANT SPECIFIC SYSTEM PRIVILEGES TO USER.AN APPLICATION DEVELOPER MAY HAVE THE FOLLOWING SYSTEM PRIVILEGES.

CREATE SESSION

CREATE TABLE

CREATE SEQUENCE

CREATE VIEW

CREATE PROCEDURE.

SQL> GRANT CREATE SESSION,CREATE TABLE,CREATE SEQUENCE,CREATE VIEW,CREATE PROCEDURE TO PAVAN;

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

571

Page 572: Oracle Queries

ORACLEGrant succeeded.

GRANTING PRIVILEGES WITH THE PERMISSION TO GRANT TO OTHER USERS:

SQL> GRANT CREATE SESSION,CREATE TABLE,CREATE SEQUENCE,CREATE VIEW,CREATE PROCEDURE TO PAVANWITH ADMIN OPTION:

Grant succeeded.

THE DBA CREATES USER ACCOUNT YOU CAN CHANGE THE PASSWORD.SQL> ALTER USER PAVAN2 IDENTIFIED BY GAYATRI;

User altered.

ROLES:

A ROLE IS A NAMED GROUP OF RELATED PRIVILEGES THAT CAN BE GRANTED TO THE USER.THIS METHOD MAKES GRANTING AND REVOKING PRIVILEGES EASIER TO PERFORM AND MAINTAIN.FIRST,THE DBA MUST CREATE ROLE.THEN THE DBA CAN ASSIGN PRIVILEGES TO THE ROLE AND USERS TO THE ROLE.

SQL> CREATE ROLE MANAGER;Role created.

SQL> GRANT CREATE SESSION,CREATE TABLE,CREATE SEQUENCE,CREATE VIEW,CREATE PROCEDURE TO MANAGER;Grant succeeded.

SQL> GRANT MANAGER TO SCOTT,SATISH;Grant succeeded.

ORACLE PREDIFINES SEVERAL OTHER ROLES,WHICH INCLUDES COMMON SYSTEM PRIVILEGES.THE PREDIFINED ORACLE USER SYSTEM IS AUTOMATICALLY GRANTED ALL THESE ROLES.

CONNECT: ALTER SESSION,CREATE CLUSTER,CREATE DATABASE LINK,CREATE SEQUENCE,CREATE SESSION,CREATE SYNONYM,CREATE TABLE,CREATE VIEW.

RESOURCE:CREATE CLUSTER,CREATE SEQUENCE,CREATE INDEX TYPE,CREATE OPERATOR,CREATE PROCEDURE,CREATE TYPE,CREATE TRIGGER,CREATE TABLE.

DBA : ALL SYSTEM PRIVILEGS WITH ADMIN OPTION PLUS EXP_FULL_DATABASE AND IMP_FULL_DATABASE.

OBJECT PRIVILEGES:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

572

Page 573: Oracle Queries

ORACLEAN OBJECT PRIVILEGES IS A PRIVILEGE OR RIGHT TO PERFORM A PARTICULAR ACTION ON A SPECIFIC TABLE,VIEW,SEQUENCE OR PROCEDURE.

OBJECT PRIVILEGE

TABLE VIEW SEQUENCE PROCEDURE

ALTER YES YESDELETE YES YESEXECUTE YESINDEX YESINSERT YES YESREFERENCES YESSELECT YES YES YESUPDATE YES YES

OBJECT PRIVILEGES VARY FROM OBJECT TO OBJECT. AN OWNER HAS ALL THE PRIVILEGES ON THE OBJECT.AN OWNER CAN GIVE SPECIFIC PRIVILEGES ON THAT OWNER’S OBJECT.

SQL> GRANT SELECT ON EMP TO PAVAN,GAYATRI;Grant succeeded.

GIVING SPECIFIC COLUMNS PERMISSION:

SQL> GRANT UPDATE(DNAME,LOC)2 ON DEPT3 TO PAVAN,GAYATRI;Grant succeeded.

GIVING PERMISSION ON TABLE WITH GRANT OPTION:

SQL> GRANT SELECT,INSERT2 ON DEPT3 TO GAYATRI4 WITH GRANT OPTION;Grant succeeded.

GIVING PERMISSION ON TABLE TO ALL USERS:

SQL> GRANT SELECT ON EMP

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

573

Page 574: Oracle Queries

ORACLE2 TO PUBLIC;Grant succeeded.

GIVING ALL THE PRIVILEGES ON TABLE TO USER:

SQL> GRANT ALL ON EMP TO GAYATRI;Grant succeeded.

REVOKEING PERMISSIONS:

SQL> REVOKE SELECT ON EMP FROM PAVAN,GAYATRI;Revoke succeeded.

IF YOU WANT TO REVOKE COLUMN SPECIFIC PERMISSIONS WE HAVE TO REVOKE FROM TABLE NOT FROM COLUMN.

SQL> REVOKE UPDATE(DNAME,LOC)2 ON DEPT3 FROM PAVAN,GAYATRI;REVOKE UPDATE(DNAME,LOC)*ERROR at line 1:ORA-01750: UPDATE/REFERENCES may only be REVOKEd from the whole table, not by column

SQL> REVOKE UPDATE ON DEPT2 FROM PAVAN,GAYATRI;Revoke succeeded.

SQL> REVOKE SELECT,INSERT2 ON DEPT3* FROM GAYATRI;Revoke succeeded.

YOU CANNOT REVOKE PRIVILEGES THAT YOU HAD NOT GRANT BEFORE.

SQL> REVOKE SELECT,INSERT*ERROR at line 1:ORA-01927: cannot REVOKE privileges you did not grant

SQL> REVOKE SELECT ON EMP

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

574

Page 575: Oracle Queries

ORACLE2 FROM PUBLIC;Revoke succeeded.

SQL> REVOKE ALL ON EMP FROM GAYATRI;Revoke succeeded.

DESCRIBE TABLES OWNED BY THE USER:

SELECT * FROM USER_TABLES;

VIEW DISTINCT OBJECT TYPES OWNED BY THE USER:

SELECT DISTINCT OBJECT_TYPE FROM USER_OBJECTS;

VIEW TABLES,VIEWS,SYNONYMS AND SEQUENCES OWNED BY THE USER:

SELECT * FROM USER_CATALOG;

USER_CATALOG HAS A SYNONYM CALLED CAT.

TABLES IN THE ORACLE DATABASE:

USER TABLES:

COLLECTION OF TABLES CREATED AND MANTAINED BY THE USER.CONTAINS USER INFORMATION.

DATA DICTIONARY:

COLLECTION OF TABLES CREATED AND MAINTAINED BY THE ORACLE SERVER,CONTAINS DATABASE INFORMATION.ALL THE DATA DICTIONARY TABLES ARE OWNED BY THE SYS USER. THE BASE TABLES ARE RARELY ACCESSED BY THE USER BECAUSE THE INFORMATION IN

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

575

Page 576: Oracle Queries

ORACLETHEM IS NOT EASY TO UNDERSTAND.THEREFORE,USER TYPICALLY ACCESS DATA DICTIONARY VIEWS BECAUSE THE INFORMATION IS PRESENTED IN A FORMAT THAT IS EASY TO UNDERSTAND.INFORMATION STORED IN THE DATA DICTIONARY INCLUDE NAMES OF THE ORACLE SERVER USERS,PRIVILEGES GRANTED TO USERS.DATABASE OBJECT NAMES,TABLE CONSTRAINTS, AND AUDITING INFORMATION.

THERE ARE FOUR CATEGORIES OF DATA DICTIONARY VIEWS:

USER_ THESE VIEWS CONTAIN INFORMATION ABOUT OBJECTS OWNED BY THE USER.

ALL_ THESE VIEWS CONTAIN INFORMATION ABOUT ALL THE TABLES ACCESSIBLE TO THE USER.

DBA_ THESE VIEWS ARE RESTRICTED VIEWS. ONLY DBA OR ROLE DBA WHO HAS CAN ACCESS THESE.

V$_ THESE VIEWS CONTAINS INFORMATION ABOUT DYNAMIC PERFORMANCE VIEWS,DATABASE SERVER PERFORMANCE AND LOCKING.

PL/SQL SECURITY:

USERS MANIPULATE ORACLE TABLE DATA VIA SQL OR PL/SQL SENTENCES.

AN ORACLE TRANSACTION CAN BE MADE UP OF A SINGLE SQL SENTENCE OR SEVERAL SQL SENTENCES.

THIS GIVE RISE TO SINGLE QUERY TRASACTIONS AND MULTIPLE QUERY TRANSACTIONS.(I.E., SQT AND MQT).

THESE TRANSACTIONS (WHETHER SQT OR MQT) ACCESS AN ORACLE TABLE(S).SINCE ORACLE WORKS ON A MULTI-USER PLATFORM ,IT IS MORE THAN LIKELY THAT SEVERAL PEOPLE WILL ACCESS DATA EITHER FOR VIEWING OR FOR MANIPULATING (INSERTING,UPDATING AND DELETING RECORDS) FROM THE SAME TABLES AT THE SAME TIME VIA DIFFERENT SQL STATEMENTS.

THE ORACLE TABLE IS THEREFORE A GLOBAL RESOURCE. i.e., IT IS SHARED BY SEVERAL USERS.

TABLES(i.e.. GLOBAL RESOURCE) CONTAIN VALUABLE DATA ON WHICH BUSSINESS DECISIONS ARE BASED. THERE IS A DEFINITE NEED TO ENSURE THAT THE INTEGRITY OF DATA IN A TABLE IS MAINTAINED EACH TIME THAT ITS DATA IS ACCESSED.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

576

Page 577: Oracle Queries

ORACLETHE ORACLE ENGINE HAS TO ALLOW SIMULTANEOUS ACCESS TO TABLE DATA WITHOUT CAUSING DAMAGE TO THE DATA.

THE TECHNIQUE EMPLOYED BY THE ORACLE ENGINE TO PROTECT TABLE DATA WHEN SEVERAL PEOPLE ARE ACCESSING IT IS CALLED CONCURRENCY CONTROL.

ORACLE USES A METHOD CALLED LOCKING TO IMPLEMENT CONCURRENCY CONTROL WHEN MULTIPLE USERS ACCESS A TABLE TO MANIPULATE ITS DATA AT THE SAME TIME.

LOCKS ARE MECHANISMS USED TO ENSURE DATA INTEGRITY WHILE ALLOWING MAXIMUM CONCURRENT ACCESS TO DATA.

ORACLE’S LOCIING IS FULLY AUTOMATIC AND REQUIRES NO USER INTERVENTION.

THE ORACLE ENGINE AUTO MATICALLY LOCKS TABLE DATA WHILE EXECUTING SQL STATEMENTS.

THIS TYPE OF LOCKING IS CALLED IMPLICIT LOCKING.

IMPLICIT LOCKING:

SINCE THE ORACLE ENGINE HAS FULLY AUTOMATIC LOCKING STRATEGY, IT HAS TO DECIDE ON TWO ISSUES:

TYPE OF LOCK IS TO BE APPLIED.

LEVEL OF LOCK TO BE APPLIED.

TYPES OF LOCKS:

THE TYPE OF LOCK TO BE PLACED ON A RESOURCE DEPENDS ON THE OPERATION BEING PERFORMED ON THAT RESOURCE.

OPERATIONS ON TABLES CAN BE DISTINCTLY GROUPED INTO THE FOLLOWING TWO CATEGORIES:

READ OPERATIONS : SELECT STATEMENTS.

WRITE OPERATIONS: INSERT, UPDATE,DELETE STATEMENTS.

SINCE READ OPERATIONS MAKE NO CHANGES TO DATA IN A TABLE AND ARE MEANT ONLY FOR VIEWING PURPOSES,SIMULTANEOUS READ OPERATIONS CAN BE PERFORMED ON A TABLE WITHOUT ANY DANGER TO THE TABLE’S DATA.

HENCE,THE ORACLE ENGINE PLACES A SHARED LOCK ON A TABLE WHEN ITS DATA IS BEING VIEWED.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

577

Page 578: Oracle Queries

ORACLEON THE OTHER HAND, WRITE OPERATIONS CAUSE A CHANGE IN TABLE DATA i.e., ANY INSERT,UPDATE OR DELETE STATEMENT AFFECTS TABLE DATA DIRECTLY AND HENCE,SIMULTANEOUS WRITE OPERATIONS CAN ADVERSLY AFFECT TABLE DATA INTEGRITY.

SIMULTANEOUS WRITE OPERATION WILL CAUSE LOSS OF DATA CONSISTENCYIN THE TABLE.

HENCE ORACLE ENGINE PLACES AN EXCLUSIVE LOCK ON TABLE OR SPECIFIC SECTIONS OF THE TABLES’S RESOURCES WHEN DATA IS BEGING WRITTEN TO A TABLE.

THE RULES OF LOCKING:

DATA BEING CHANGED CANNOT BE READ.

WRITERS WAIT FOR OTHER WRITERS, IF THEY ATTEMPT TO UPDATE THE SAME ROWS AT THE SAME TIME.

THE TWO TYPES OF LOCKS SUPPORTED BY ORACLE ARE:

SHARED LOCKS:

SHARED LOCKS ARE PLACED ON RESOURCES WHENEVER A READ OPERATION(SELECT) IS PERFORMED.

MULTIPLE SHARED LOCKS CAN BE SIMULTANEOUSLY SET ON A RESOURCE.

EXCLUSIVE LOCKS:

EXCLUSIVE LOCKS ARE PLACED ON RESOURCES WHENEVER WRITE OPERATIONS (INSERT,UPDATE AND DELETE) ARE PERFORMED.

ONLY ONE EXCLUSIVE LOCK CAN BE PLACED ON A RESOURCE AT A TIME.

i.e., THE FIRST USER WHO ACQURIES AN EXCLUSIVE LOCK WILL CONTINUE TO HAVE THE SOLE OWNERSHIP OF THE RESOURCE, AND NO OTHER USER CAN ACQUIRE AN EXCLUSIVE LOCK ON THAT RESOURCE.

ORACLE PROVIDES THE FOLLOWING THREE LEVELS OF LOCKING:

ROW LEVEL.

PAGE LEVEL.

TABLE LEVEL.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

578

Page 579: Oracle Queries

ORACLETHE ORACLE ENGINE DECIDES ON THE LEVEL OF LOCK TO BE USED BY THE PRESENCE OR ABSENCE OF A WHERE CONDITION IN A SQL STATEMENT.

IF THE WHERE CLAUSE EVALUATES TO ONLY ONE ROW IN THE TABLE, A ROW LEVEL LOCK IS USED.

IF THE WHERE CLAUSE EVALUATES TO A SET OF DATA, A PAGE LEVEL LOCK IS USED.

IF THERE IS NO WHERE CLAUSE,(i.e., THE QUERY ACCESSES THE ENTIRE TABLE,) A TABLE LEVEL LOCK IS USED.

ALTHOUGH THE ORACLE ENGINE HAS A DEFAULT LOCKING STRATERGY IN COMMERCIAL APPLICATIONS, EXPLICIT USER DEFINED LOCKING OFTEN REQUIRED.

IF TWO CLIENT COMPUTERS(CLIENT A AND CLIENT B) ARE ENTERING SALES ORDERS, EACH TIME A SALES ORDER IS PREPARED, THE QUANTITY ON HAND OF THE PRODUCT FOR WHICH THE ORDER IS BEING GENERATED NEEDS TO BE UPDATED IN THE PRODUCT_MASTER TABLE.

NOW, IF THE CLIENT A FIRES AN UPDATE COMMAND ON A RECORD IN THE PRODUCT_MASTER TABLE, THEN ORACLE WILL IMPLICITLY LOCK THE RECORD SO THAT NO FURTHER DATA MANIPULATION CAN BE DONE BY ANY OTHER USER TILL THE LOCK IS RELEASED.

THE LOCK WILL BE RELEASED ONLY WHEN CLIENT A FIRES A COMMIT OR ROLLBACK.

IN THE MEANTIME , IF CLIENT B TRIES TO VIEW THE SAME RECORD, THE ORACLE ENGINE WILL DISPLAY THE OLD SET FOR VALUES FOR THE RECORD AS THE TRANSACTION FOR THAT RECORD HAS BEEN COMPLETED BY CLIENT A.

THIS LEADS TO WRONG INFORMATION BEING DISPLAYED TO CLIENT B.

IN SUCH CASES, CLIENT A MUST EXPLICITLY LOCK THE RECORD SUCH THAT, NO OTHER USER CAN ACCESS THE RECORD EVEN FOR VIEWING PURPOSES TILL CLIENT A’S TRANSACTION IS COMPLETED.

A LOCK SO DEFINED IS CALLED EXPLICIT LOCK. USER DEFINED EXPLICIT LOCKING ALWAYS OVERRIDES ORACLE’S DEFAULT LOCKING STRATEGY.

EXPLICIT LOCKING:

THE TECHNIQUE OF LOCK TAKEN ON A TABLE OR ITS RESOURCES BY A USER IS CALLED EXPLICIT LOCKING.

WHO CAN LOCK EXPLICITLY:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

579

Page 580: Oracle Queries

ORACLEUSER CAN LOCK TABLES THEY OWN OR ANY TABLES ON WHICH THEY HAVE BEEN GRANTED TABLE PRIVILEGES(SUCH AS SELECT,INSERT,UPDATE,DELETE).

ORACLE PROVIDES FACILITIES BY WHICH DEFAULT LOCKING STRATEGY CAN BE OVERRIDEN.

TABLES OR ROWS CAN BE EXPLICITLY LOCKED BY USING EITHER THE SELECT… FOR UPDATE STATEMENT, OR LOCK TABLE STATEMENT.

THE SELECT …. FOR UPDATE STATEMENT.

TWO CLIENT MACHINES CLIENT A AND CLIENT B ARE RECORDING THE TRANSACTIONS PERFORMED IN A BANK FOR A PARTICULAR ACCOUNT NUMBER SIMULTANEOUSLY.

CLIENT A FIRES THE FOLLOWING SELECT STATEMENT:

CLIENT A > SELECT * FROM ACCT_MSTR WHERE ACC_NO = ‘SB9’ FOR UPDATE.

ORACLE LOCKS THE RECORD SB9. IT RELEASES WHEN A COMMIT OR ROLLBACK IS FIRED BY CLIENT A.

NOW CLIENT B FIRES THE SELECT STATEMENT, WHICH POINTS TO RECORD SB9, WHICH IS ALREADY LOCKED BY CLIENT A.

CLIENT B> SELECT * FROM ACCT_MSTR WHERE ACC_NO = ‘SB9’ FOR UPDATE;

THE ORACLE ENGINE WILL ENSURE THAT CLIENT B’S SQL STATEMENT WAITS FOR THE LOCK TO BE RELEASED ON ACC_MSTR BY A COMMIT OR ROLLBACK STATEMENT FIRED BY CLIENT A FOREVER.

IN ORDER TO AVOID UNNECESSARY WAITING TIME, A NOWAIT OPTION CAN BE USED TO INFORM THE ORACLE ENGINE TO TERIMINATE THE SQL STATEMENT IF THE RECORD HAS BEEN LOCKED.

IF THIS HAPPENS THE ORCLE ENGINE TERIMINATES THE RUNNING DML AND COMES UP WITH A MESSAGE INDICATING THAT THE RESOURCE IS BUSY.

IF CLIENT B FIRES THE FOLLOWING SELECT STATEMENT NOW WITH NOWAIT CLAUSE.

CLIENT B> SELECT * FROM ACCT_MSTR WHERE ACC_NO = ‘SB9’ FOR UPDATE NOWAIT;

OUTPUT:

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

580

Page 581: Oracle Queries

ORACLESINCE CLIENT A HAS ALREADY LOCKED RECORD SB9 WHEN CLIENT B TRIES TO ACQUIRE A SHARED LOCK ON THE SAME RECORD THE ORACLE ENGINE DIPLAYS THE FOLLOWING MESSAGE.

SQL> 00054: RESOURCE BUSY AND ACQUIRE WITH NOWAIT SPECIFIED.

USING LOCK TABLE STATEMENT:

LOCK TABLE < TABLE NAME> [, < TABLE NAME]….

IN { ROW SHARE|ROW EXCLUSIVE |SHARE UPDATE|SHARE|SHARE ROW EXCLUSIVE |EXCLUSIVE}

[NO WAIT]

TABLE PARTITIONS:

TABLES CAN BE PARTITIONED AND STORED IN DIFFERENT LOCATIONS AS PER REQUIREMENT.

A SINGLE LOGICAL TABLE CAN BE SPILT IN TO A NUMBER OF PHYSICALLY SEPARATE PIECES BASED ON RANGES OF KEY VALUES.

EACH OF THE PARTS OF THE TABLE IS CALLED A PARTITION.

ALTHOUGH THE PARTITIONS ARE HELD AND MANAGED INDEPENDENTLY, THEY CAN BE QUERIED AND UPDATED BY REFERENCE TO THE NAME OF THE LOGICAL TABLE. ORACLE PROVIDES PARTITION TRANSPARENCY. THE APPLICATION COULD BE UNAWARE OF THE FACT THAT THE TABLE HAS BEEN PARTITIONED.

THERE IS A DIFFERENCE BETWEEN A TABLE , WHICH HAS A SINGLE PARTITION, AND A TABLE THAT HAS NO PARTITIONS. A NON-PARTITIONED TABLE CANNOT PARTITIONED LATER.EACH PARTITION IS STORED IN A DIFFERENT SEGMENT AND HAS DIFFERENT PHYSICAL ATTRIBUTES.

TABLE PARTITIONS CAN BE STORED IN DIFFERENT TABLE SPACES.

ORACLE PROVIDES PARTITION INDEPENDENCE.

WE CAN ACCESS AND MANIPULATE DATA IN ONE PARTITION EVEN IF SOME OR ALL OF THE OTHER PARTITION ARE UNAVAILABLE.

THIS IS MAJOR BENEFIT FOR ADMINISTRATORS AND USERS.

THIS MEANS THAT THEY CAN PERFORM MAINTENANCE OPERATIONS IN A PIECE MEAL FASHION AGAINST INDIVIDUAL PARTITIONS WHILE THE REST OF THE DATA REMAINS AVAILABLE FOR USE.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

581

Page 582: Oracle Queries

ORACLEADVANTAGES:

IT REDUCES THE POSSIBILITY OF DATA CORRUPTION INMULTIPLE PARTITIONS.

BACK UP AND RECOVERY OF EACH PARTITION CAN BE DONE INDEPENDENTLY.

CONTROLLING THE MAPPING OF PARTITIONS TO DISK DRIVES(IMPORTANT FOR BALANCING I/O LOAD) IS POSSIBLE.

PARTITIONED TABLES CANNOT CONTAIN ANY COLUMNS WITH LONG OR LONG RAW DATATYPES, LOB DATATYPES (BLOB,CLOB,NCLOB, OR BFILE) OR OBJECT TYPES.

THERE ARE TWO PRIMARY REASONS FOR PARTITIONING A TABLE.

DISK SPACE.

PROCESSING TIME.

CREATE TABLE TABLE_NAME

(COL1 DATATYPE,COL 2 DATATYPE,…….) PARTITION BY RANGE (COL_NAME)

(PARTITION < PARTITION_NAME> VALUES LESS THAN <VALUE>,PARTITION < PARTITION_NAME > VALUE LESS THAN < VALUE>);

1 CREATE TABLE ANGEL

2 (EMPNO NUMBER(10) CONSTRAINT ANGEL_PK PRIMARY KEY,

3 ENAME VARCHAR2(10),

4 JOB VARCHAR2(10))

5 PARTITION BY RANGE (EMPNO)

6* (PARTITION EM1 VALUES LESS THAN (10), PARTITION EM2 VALUES LESS THAN (20))

SQL> /

Table created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

582

Page 583: Oracle Queries

ORACLESQL> INSERT INTO ANGEL

2 VALUES

3 (1,'PAVAN','MANAGER');

1 row created.

1 INSERT INTO ANGEL

2 VALUES

3* (2,'KUMAR','MANAGER')

SQL> /

1 row created.

1 INSERT INTO ANGEL

2 VALUES

3* (11,'SMITH','MANAGER')

SQL> /

1 row created.

1 INSERT INTO ANGEL

2 VALUES

3* (12,'ALLEN','CLERK')

SQL> /

1 row created.

1 INSERT INTO ANGEL

2 VALUES

3* (10,'ARYA','CLERK')

SQL> /

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

583

Page 584: Oracle Queries

ORACLE1 row created.

SQL> COMMIT;

Commit complete.

SQL> SELECT * FROM ANGEL PARTITION(EM1);

EMPNO ENAME JOB ---------- ---------- ---------- 1 PAVAN MANAGER 2 KUMAR MANAGER

SQL> SELECT * FROM ANGEL PARTITION(EM2);

EMPNO ENAME JOB ---------- ---------- ---------- 11 SMITH MANAGER 12 ALLEN CLERK 10 ARYA CLERK

1 CREATE TABLE ANGEL2

2 (ORDERNO VARCHAR2(10) CONSTRAINT ANGEL2_PK PRIMARY KEY,

3 ODATE DATE,

4 VENCODE VARCHAR2(10))

5 PARTITION BY RANGE (ORDERNO,VENCODE)

6 (PARTITION OM1 VALUES LESS THAN ('O010','VO10'),

7 PARTITION OM2 VALUES LESS THAN ('O020','V020'),

8* PARTITION OM3 VALUES LESS THAN (MAXVALUE,MAXVALUE))

SQL> /

Table created.

SQL> INSERT INTO ANGEL2

2 VALUES

3 ('O001','23-FEB-99','V001');

1 row created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

584

Page 585: Oracle Queries

ORACLE 1 INSERT INTO ANGEL2

2 VALUES

3* ('O002','23-FEB-99','V002')

SQL> /

1 row created.

1 INSERT INTO ANGEL2

2 VALUES

3* ('O015','23-FEB-99','V002')SQL> /

1 row created.

1 INSERT INTO ANGEL2

2 VALUES

3* ('O025','23-FEB-99','V002')

SQL> /

1 row created.

1 INSERT INTO ANGEL2

2 VALUES

3* ('O026','23-FEB-99','V002')

SQL> /

1 row created.

1 INSERT INTO ANGEL2

2 VALUES

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

585

Page 586: Oracle Queries

ORACLE 3* ('O027','23-FEB-99','V002')

SQL> /

1 row created.

SQL> COMMIT;

Commit complete.

1* SELECT * FROM ANGEL2 PARTITION(OM1)SQL> /

ORDERNO ODATE VENCODE ---------- --------- ---------- O001 23-FEB-99 V001 O002 23-FEB-99 V002

1* SELECT * FROM ANGEL2 PARTITION(OM2)SQL> /

ORDERNO ODATE VENCODE ---------- --------- ---------- O015 23-FEB-99 V002

1* SELECT * FROM ANGEL2 PARTITION(OM3)SQL> /

ORDERNO ODATE VENCODE ---------- --------- ---------- O025 23-FEB-99 V002 O026 23-FEB-99 V002 O027 23-FEB-99 V002

HERE THE VALUES O025,O026,O027 ARE GREATER THAN FIRST AND SECOND PARTITION, BUT VENCODE VALUE IS FALLS IN THE FIRST PARTITION. EVEN THEN IT FALLS IN THIRD PARTITION BECAUSE THE LEFT PREFIX OF THE PARTITION BOUND TAKES PRECEDENCE.

MAINTAINING PARTITIONS:

MOVING PARTITIONS.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

586

Page 587: Oracle Queries

ORACLE ADDING PARTITIONS.

DROPPING PARTITIONS.

SPLITTING PARTITIONS.

EXCHANGING TABLE PARTITIONS.

MOVING PARTITIONS:

SQL> ALTER TABLE ANGEL2

2 MOVE PARTITION OM1 TABLESPACE PAVAN_TAB;

Table altered.

SQL> SELECT * FROM ANGEL2 PARTITION(OM1);

ORDERNO ODATE VENCODE ---------- --------- ---------- O001 23-FEB-99 V001 O002 23-FEB-99 V002

ADDING PARTITIONS:

SQL> ALTER TABLE ANGEL

2 ADD PARTITION EM3 VALUES LESS THAN (30);

Table altered.

SPLITTING PARTITIONS:

SQL> ALTER TABLE ANGEL

2 SPLIT PARTITION EM3 AT(25) INTO (PARTITION EM11, PARTITION EM12);

Table altered.

SQL> INSERT INTO ANGEL 2 VALUES 3 (21,'FORD','MANAGER');

1 row created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

587

Page 588: Oracle Queries

ORACLE 1 INSERT INTO ANGEL 2 VALUES 3* (22,'DON','MANAGER')SQL> /

1 row created.

1 INSERT INTO ANGEL 2 VALUES 3* (26,'FRANK','MANAGER')SQL> /

1 row created.

1 INSERT INTO ANGEL 2 VALUES 3* (28,'SCOTT','MANAGER')SQL> /

1 row created.

SQL> COMMIT;

Commit complete.

SQL> SELECT * FROM ANGEL PARTITION(EM3);SELECT * FROM ANGEL PARTITION(EM3) *ERROR at line 1:ORA-02149: Specified partition does not exist

1* SELECT * FROM ANGEL PARTITION(EM11)SQL> /

EMPNO ENAME JOB ---------- ---------- ---------- 21 FORD MANAGER 22 DON MANAGER

1* SELECT * FROM ANGEL PARTITION(EM12)SQL> /

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

588

Page 589: Oracle Queries

ORACLE EMPNO ENAME JOB ---------- ---------- ---------- 26 FRANK MANAGER 28 SCOTT MANAGER

SQL> ALTER TABLE ANGEL 2 DROP PARTITION EM3;DROP PARTITION EM3 *ERROR at line 2:ORA-02149: Specified partition does not exist

SQL> ALTER TABLE ANGEL 2 DROP PARTITION EM2;

Table altered.

SQL> SELECT * FROM ANGEL PARTITION(EM2);SELECT * FROM ANGEL PARTITION(EM2) *ERROR at line 1:ORA-02149: Specified partition does not exist

CREATING PARTITIONS IN DIFFERENT TABLE SPACES:

SQL> CREATE TABLE ANGEL3 2 (EMPNO NUMBER(10) PRIMARY KEY, 3 ENAME VARCHAR2(10), 4 JOB VARCHAR2(10)) 5 PARTITION BY RANGE(EMPNO) 6 (PARTITION EM1 VALUES LESS THAN (10) TABLESPACE PAVAN_TAB, 7 PARTITION EM2 VALUES LESS THAN (20) TABLESPACE PAVAN1_TAB);

Table created.

EXCHANGING TABLE PARTITIONS

SQL> CREATE TABLE ANGEL4 2 (EMPNO NUMBER(10) PRIMARY KEY, 3 ENAME VARCHAR2(10),

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

589

Page 590: Oracle Queries

ORACLE 4 JOB VARCHAR2(10)) 5 PARTITION BY RANGE(EMPNO) 6 (PARTITION EM1 VALUES LESS THAN (10),PARTITION EM2 VALUES LESS THAN (20));

Table created.

SQL> INSERT INTO ANGEL4 2 VALUES 3 (1,'PAVAN','MANAGER');

1 row created.

1 INSERT INTO ANGEL4 2 VALUES 3* (2,'KUMAR','MANAGER')SQL> /

1 row created.

1 INSERT INTO ANGEL4 2 VALUES 3* (11,'SMITH','MANAGER')SQL> /

1 row created.

1 INSERT INTO ANGEL4 2 VALUES 3* (12,'FORD','MANAGER')SQL> /

1 row created.

1 INSERT INTO ANGEL4 2 VALUES 3* (13,'FRANK','MANAGER')SQL> /

1 row created.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

590

Page 591: Oracle Queries

ORACLESQL> COMMIT;

Commit complete.

SQL> CREATE TABLE EXCHANGE_PAR 2 (EMPNO NUMBER(10) PRIMARY KEY, 3 ENAME VARCHAR2(10), 4 JOB VARCHAR2(10));

Table created.

SQL> INSERT INTO EXCHANGE_PAR 2 VALUES 3 (17,'SCOTT','CLERK');

1 row created.

1 INSERT INTO EXCHANGE_PAR 2 VALUES 3* (18,'KING','CLERK')SQL> /

1 row created.

1 INSERT INTO EXCHANGE_PAR 2 VALUES 3* (19,'JULI','CLERK')SQL> /

1 row created.

SQL> COMMIT;

Commit complete.

SQL> SELECT * FROM ANGEL4 PARTITION(EM1);

EMPNO ENAME JOB ---------- ---------- ---------- 1 PAVAN MANAGER 2 KUMAR MANAGER

1* SELECT * FROM ANGEL4 PARTITION(EM2)SQL> /

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

591

Page 592: Oracle Queries

ORACLE EMPNO ENAME JOB ---------- ---------- ---------- 11 SMITH MANAGER 12 FORD MANAGER 13 FRANK MANAGER

SQL> SELECT * FROM EXCHANGE_PAR;

EMPNO ENAME JOB ---------- ---------- ---------- 17 SCOTT CLERK 18 KING CLERK 19 JULI CLERK

SQL> ALTER TABLE ANGEL4 EXCHANGE PARTITION EM2 WITH TABLE EXCHANGE_PAR;

Table altered.

SQL> SELECT * FROM ANGEL4 PARTITION(EM2);

EMPNO ENAME JOB ---------- ---------- ---------- 17 SCOTT CLERK 18 KING CLERK 19 JULI CLERK

SQL> SELECT * FROM EXCHANGE_PAR;

EMPNO ENAME JOB ---------- ---------- ---------- 11 SMITH MANAGER 12 FORD MANAGER 13 FRANK MANAGER

EXCHANGING TABLE PARTITIONS IS USED CONVERT A PARTITION INTO A NON-PARTITIONED TABLE,AND A TABLE INTO A PARTITION OF A PARTITIONED TABLE BY EXCHANGING THEIR DATA SEGMENTS.

EXCHANGING TABLE PARTITIONS IS MOST USEFUL WHN AN APPLICATION USING NON-PARTITIONEDTABLES NEED TO BE CONVERTED INTO PARTITIONS OF A PARTICULAR TABLE.

I Soft Solutions ,Bang-54. STRUCTURED QUERY LANGUAGE

592