Sie sind auf Seite 1von 38

1

TABLE OF CONTENTS

DDL – Creating and maintaining database tables, etc.............................................................................................. 4

1) CREATE statement for creating database tables, views, indexes, etc..................................................4

2) ALTER statement for changing the structure of the database tables, views, indexes, etc...........4

3) DROP statement for removing database tables, views, indexes, etc....................................................5

4) Column and table modifier/constraints: Applying restrictions to group of columns...................5

a) NOT NULL constraint......................................................................................................................................... 5

b) UNIQUE CONSTRAINT....................................................................................................................................... 6

c) PRIMARY KEY constraint.................................................................................................................................. 6

d) FOREIGN KEY constraint.................................................................................................................................. 8

e) CHECK CONSTRAINT.......................................................................................................................................... 9

f) DEFAULT................................................................................................................................................................. 9

g) INDEX........................................................................................................................................................................ 9

DML – Querying SQL tables, modifying and updating data.................................................................................10

1) QUERYING SQL TABLES...................................................................................................................................... 10

a) SELECT statement to extract data.............................................................................................................. 10

i) WHERE [condition]...................................................................................................................................... 10

(1) Comparison test operators =, <, <=, >, >=, <>.........................................................................11

(2) Range test operator – BETWEEN................................................................................................. 12

(3) Set membership test operator – IN.............................................................................................. 12

(4) Pattern matching operator – LIKE............................................................................................... 12

(5) NULL value test operator – IS NULL............................................................................................ 12

(6) Logical operators – AND, OR, NOT............................................................................................... 13

ii) GROUP BY [column name] – Grouping the values...........................................................................13

iii) HAVING [condition] – Eliminating group of data........................................................................14

iv) ORDER BY [condition] – Ordering the output of query............................................................14


2

v) SQL FUNCTIONS............................................................................................................................................ 14

(1) AGGREGATE functions...................................................................................................................... 14

(a) MAX ()................................................................................................................................................. 14

(b) MIN ().................................................................................................................................................. 15

(c) SUM ()................................................................................................................................................. 15

(d) COUNT ()........................................................................................................................................... 15

(e) AVG ().................................................................................................................................................. 15

(2) String functions.................................................................................................................................... 15

(a) LENGTH ()......................................................................................................................................... 15

(b) SUBSTR ().......................................................................................................................................... 15

(c) UPPER ()............................................................................................................................................ 16

(d) LOWER ()........................................................................................................................................... 16

(e) INITCAP ()......................................................................................................................................... 16

(f) LTRIM ()............................................................................................................................................. 16

(g) RTRIM ()............................................................................................................................................ 16

(h) LPAD ()............................................................................................................................................... 17

(i) RPAD ()............................................................................................................................................... 17

(3) MATHEMATICAL functions............................................................................................................. 17

(a) ABS ().................................................................................................................................................. 17

(b) SIN ()................................................................................................................................................... 17

(c) COS ().................................................................................................................................................. 17

(d) TAN ()................................................................................................................................................. 17

(e) SQRT ()............................................................................................................................................... 17

(f) CEIL ()................................................................................................................................................. 18

(g) FLOOR ()............................................................................................................................................ 18

(h) ROUND ()........................................................................................................................................... 18

(4) Conversion functions......................................................................................................................... 19


3

(a) TO_DATE ()....................................................................................................................................... 19

(b) TO_CHAR ()....................................................................................................................................... 19

(c) TO_NUMBER ()................................................................................................................................ 19

2) NVL FUNCTION............................................................................................................................................. 19

vi) DISTINCT..................................................................................................................................................... 19

vii) SQL JOINS.................................................................................................................................................... 20

(1) INNER JOIN (EQUI -JOIN)................................................................................................................ 20

(2) SELF-JOIN............................................................................................................................................... 20

(3) OUTER JOIN........................................................................................................................................... 20

(a) LEFT OUTER JOIN.......................................................................................................................... 21

(b) RIGHT OUTER JOIN....................................................................................................................... 22

(c) FULL OUTER JOIN.......................................................................................................................... 23

(4) NON-EQUI JOIN.................................................................................................................................... 23

vii) SELECT – NESTED STATEMENTS..................................................................................................... 24

viii) UNION – Combining multiple queries............................................................................................. 25

1) MODIFYING AND UPDATING DATA............................................................................................................... 25

a) INSERT STATEMENT FOR ADDING DATA TO TABLES......................................................................25

b) UPDATE and DELETE statement for modifying data..........................................................................25

OTHER DATABASE OBJECTS........................................................................................................................................... 26

1) VIEW............................................................................................................................................................................ 26

2) SEQUENCE................................................................................................................................................................ 27

DCL (Data Control language)........................................................................................................................................... 27

1) GRANT statement................................................................................................................................................... 27

2) REVOKE statement................................................................................................................................................ 28

PL/SQL...................................................................................................................................................................................... 28

1) PL/SQL block........................................................................................................................................................... 28

2) CURSOR...................................................................................................................................................................... 31
4

3) STORED PROCEDURE........................................................................................................................................... 33

4) TRIGGER.................................................................................................................................................................... 37

DDL – CREATING AND MAINTAINING DATABASE TABLES, ETC.

1) CREATE STATEMENT FOR CREATING DATABASE TABLES, VIEWS, INDEXES,


ETC.

Syntax-

CREATE TABLE <table-name>


(
<column-name1> <data-type(size)> <constraint>
<column-name2> <data-type(size)> <constraint>
<column-name3> <data-type(size)> <constraint>
<column-name4> <data-type(size)> <constraint>
<column-name5> <data-type(size)> <constraint>

);

Data types –

NUMBER
CHAR
VARCHAR
DATE
BLOB
CLOB
INTEGER

E.g. –

CREATE TABLE CUSTOMER


(
CUSTOMER_ID INT,
CUSTOMER_NAME VARCHAR2(30) ,
EMAIL VARCHAR2(30) ,
DOB DATE
)

2) ALTER STATEMENT FOR CHANGING THE STRUCTURE OF THE DATABASE


TABLES, VIEWS, INDEXES, ETC.
5

Syntax-

ALTER TABLE <table-name>


ADD (<column-name> <data-type> <constraint>);

DROP (<column-name>);

MODIFY (<column-name> <data-type> <constraint>);

Examples –

ALTER TABLE CUSTOMER


ADD
PHONE NUMBER (10));

ALTER TABLE CUSTOMER


DROP
(PHONE);

ALTER TABLE CUSTOMER


MODIFY
(EMAIL VARCHAR2 (50));

3) DROP STATEMENT FOR REMOVING DATABASE TABLES, VIEWS, INDEXES,


ETC.

Syntax-

DROP TABLE <table-name>;

4) COLUMN AND TABLE MODIFIER/CONSTRAINTS: APPLYING RESTRICTIONS


TO GROUP OF COLUMNS

A) NOT NULL CONSTRAINT

The NOT NULL modifier prevents NULL (a token (non-zero) that designates a column as being
empty) values from appearing in the column.

Syntax-

CREATE TABLE T_CUSTOMER


(
CUSTOMER_ID INT NOT NULL,
CUSTOMER_NAME VARCHAR2(30) NOT NULL,
EMAIL VARCHAR2(30) ,
DOB DATE
)
6

B) UNIQUE CONSTRAINT

To avoid duplicate values to be added to a table, UNIQUE constraint is used on the column.
According to the ANSI standards SQL:92, SQL:1999, and SQL:2003, a UNIQUE constraint should
disallow duplicate non-NULL values, but allow multiple NULL values.

CREATE TABLE CUSTOMER


(

CUSTOMER_ID INT NOT NULL UNIQUE,


CUSTOMER_NAME VARCHAR2(30) NOT NULL,
EMAIL VARCHAR2(30),
DOB DATE

OR

CREATE TABLE CUSTOMER


(

CUSTOMER_ID INT NOT NULL,


CUSTOMER_NAME VARCHAR2(30) NOT NULL,
EMAIL VARCHAR2(30),
DOB DATE

ALTER TABLE CUSTOMER ADD


(
CONSTRAINT UNIQUE_CUSTOMER
UNIQUE (EMAIL)
);

C) PRIMARY KEY CONSTRAINT

PRIMARY KEY enforces both NOT NULL & UNIQUE constraints. On top of that, it helps to relate with
other tables.

There are two types of PRIMARY KEYS –

 SIMPLE PRIMARY KEY –

Syntax-

CREATE TABLE T_CUSTOMER


(
CUSTOMER_ID INT ,
7

CUSTOMER_NAME VARCHAR2(30) NOT NULL,


DOB DATE,
PRIMARY KEY(CUSTOMER_ID)
)

Usually it is a convention to add constraints after creating the table by using ALTER
statement.

CREATE TABLE T_CUSTOMER


(
CUSTOMER_ID INT,
CUSTOMER_NAME VARCHAR2 (30),
DOB DATE
)

ALTER TABLE T_CUSTOMER ADD


(
CONSTRAINT PK_CUSTOMER
PRIMARY KEY (CUSTOMER_ID)
);

This helps to give a custom name to the PRIMARY KEY; through this name the KEY can be
modified/deleted. Otherwise the SQL engine gives an internal name like – “SYS_C000308”.

 COMPOSITE PRIMARY KEY

CREATE TABLE T_ACCOUNT


(
BRANCH_CODE INT ,
ACC_TYPE INT,
ACC_NO INT,
PRIMARY KEY(BRANCH_CODE, ACC_TYPE, ACC_NO)
)

OR

CREATE TABLE T_ACCOUNT


(
BRANCH_CODE INT ,
ACC_TYPE INT,
ACC_NO INT,
)

ALTER TABLE T_ACCOUNT ADD


(
CONSTRAINT PK_ACCOUNT
PRIMARY KEY (BRANCH_CODE, ACC_TYPE, ACC_NO)
);
8

D) FOREIGN KEY CONSTRAINT

When there are multiple tables in a database the tables must be related to each other. For a table,
where a PRIMARY KEY of another table is used to relate data it is referred as FOREIGN KEY.

Syntax-

ALTER TABLE <table-name> ADD


(
CONSTRAINT <foreign-key name>
FOREIGN KEY (<column-name>)
REFERENCES <PK’s table-name> (<column-name>)
[ON DELETE CASCADE]
);

E.g.-

CREATE TABLE T_PHONE


(
CUSTOMER_ID INT,
PHONE_NO NUMBER(10)
)

ALTER TABLE T_PHONE ADD


(
CONSTRAINT FK_PHONE
FOREIGN KEY (CUSTOMER_ID)
REFERENCES T_CUSTOMER (CUSTOMER_ID)
ON DELETE CASCADE
);

CREATE TABLE T_EMAIL


(
CUSTOMER_ID INT,
EMAIL_ID VARCHAR2(40)
)

ALTER TABLE T_EMAIL ADD


(
CONSTRAINT FK_EMAIL
FOREIGN KEY (CUSTOMER_ID)
REFERENCES T_CUSTOMER (CUSTOMER_ID)
ON DELETE CASCADE
);
9

E) CHECK CONSTRAINT

Check constraint enforces some business rules on specified columns.

CREATE TABLE SCOTT.T_SUBJECTS


(
SUB_NO INTEGER,
SUB_NAME CHAR (20),
CREDITS NUMERIC(2) CHECK (CREDITS > 0 AND CREDITS <= 10)

OR

CREATE TABLE SCOTT.T_SUBJECTS


(
SUB_NO INTEGER,
SUB_NAME CHAR(20),
CREDITS NUMERIC(2)

ALTER TABLE SCOTT.T_SUBJECTS ADD


(CONSTRAINT CHK_CREDIT_SCORE CHECK (CREDITS > 0 AND CREDITS <= 10));

F) DEFAULT

The ANSI/ISO standard allows defining default values that columns should have. Usually, if no value
is supplied for a column, then it is assigned a NULL value. The DEFAULT modifier overrides this.

CREATE TABLE SCOTT.T_SUBJECTS


(
SUB_NO INTEGER NOT NULL,
SUB_NAME CHAR(20),
CREDITS NUMERIC(2) CHECK (CREDITS > 0 AND CREDITS <= 10),
PASS NUMERIC(2) DEFAULT 65
)

G) INDEX

Index is an object which contains ordered list of elements from one or multiple columns. Index can
be created on single or multiple columns. An index is a performance-tuning method of allowing
faster retrieval of records

Syntax –

CREATE INDEX <index-name> ON <table-name> (<column1>, <column2>);

E.g.,
10

CREATE TABLE T_CUSTOMER


(
CUSTOMER_ID INT,
CUSTOMER_NAME VARCHAR2(30) ,
EMAIL VARCHAR2(30) ,
DOB DATE
)

CREATE INDEX CNAME_INDEX ON SCOTT.T_CUSTOMER (CUSTOMER_NAME);

DROP INDEX SCOTT.ENAME_INDEX

Whenever index is created on the table then all the values of the specified column will be sorted and
the sorted values will be placed under specified index name.

DML – QUERYING SQL TABLES, MODIFYING AND UPDATING DATA.

1) QUERYING SQL TABLES

A) SELECT STATEMENT TO EXTRACT DATA

Syntax-

SELECT * / <column1>, <column2>


FROM <table-name1>, <table-name2>
[WHERE condition]
[GROUP BY <column-name>]
[HAVING condition]
[ORDER BY < column-name >]

Anything specified in [ ] is optional.

Using conditions for selecting particular rows for output

I) WHERE [CONDITION]

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO


7369 SMITH CLERK 7902 11/12/2008 800 NULL 20
7499 ALLEN SALESMAN 7698 2/20/1981 1600 300 30
7521 WARD SALESMAN 7698 2/22/1981 1250 500 30
7566 JONES MANAGER 7839 4/2/1981 2975 NULL 20
7654 MARTIN SALESMAN 7698 9/28/1981 1250 1400 30
7698 BLAKE MANAGER 7839 5/1/1981 2850 NULL 30
7782 CLARK MANAGER 7839 6/9/1981 2450 NULL 10
7788 SCOTT ANALYST 7566 4/19/1987 3000 NULL 20
11

7839 KING PRESIDENT NULL 11/17/1981 5000 NULL 10


7844 TURNER SALESMAN 7698 9/8/1981 1500 0 30
7876 ADAMS CLERK 7788 5/23/1987 1100 NULL 20
7900 JAMES CLERK 7698 12/3/1981 950 NULL 30
7902 FORD ANALYST 7566 12/3/1981 3000 NULL 20
7934 MILLER CLERK 7782 1/23/1982 1300 NULL 10

(1) COMPARISON TEST OPERATORS =, <, <=, >, >=, <>


SELECT ENAME, SAL FROM EMP WHERE SAL > 2000

ENAME SAL
JONES 2975
BLAKE 2850
CLARK 2450
SCOTT 3000
KING 5000
FORD 3000

SELECT ENAME, SAL FROM EMP WHERE SAL <> 2000

ENAME SAL
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

(2) RANGE TEST OPERATOR – BETWEEN


SELECT ENAME FROM SCOTT.EMP WHERE SAL BETWEEN 100 AND 1000

ENAME
SMITH
12

JAMES

(3) SET MEMBERSHIP TEST OPERATOR – IN


SELECT EMPNO, ENAME, JOB, MGR FROM EMP WHERE ENAME IN ('SMITH','ALLEN','WARD')

EMPNO ENAME JOB MGR


7369 SMITH CLERK 7902
SALESMA
7499 ALLEN N 7698
SALESMA
7521 WARD N 7698

(4) PATTERN MATCHING OPERATOR – LIKE


SELECT EMPNO, ENAME, JOB FROM EMP WHERE JOB LIKE ('CLE%')

EMPNO ENAME JOB


7369 SMITH CLERK
7876 ADAMS CLERK
7900 JAMES CLERK
7934 MILLER CLERK

(5) NULL VALUE TEST OPERATOR – IS NULL

SELECT * FROM SCOTT.EMP WHERE COMM IS NULL

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO


7369 SMITH CLERK 7902 11/12/2008 800   20
7566 JONES MANAGER 7839 4/2/1981 2975   20
7698 BLAKE MANAGER 7839 5/1/1981 2850   30
7782 CLARK MANAGER 7839 6/9/1981 2450   10
7788 SCOTT ANALYST 7566 4/19/1987 3000   20
7839 KING PRESIDENT   11/17/1981 5000   10
7876 ADAMS CLERK 7788 5/23/1987 1100   20
7900 JAM ESCLERK 7698 12/3/1981 950   30
7902 FORD ANALYST 7566 12/3/1981 3000   20
7934 MILLER CLERK 7782 1/23/1982 1300   10

(6) LOGICAL OPERATORS – AND, OR, NOT.


AND
13

SELECT EMPNO, ENAME, JOB, MGR FROM EMP WHERE JOB='SALESMAN' AND MGR = 7698

EMPNO ENAME JOB MGR


SALESMA
7499 ALLEN N 7698
SALESMA
7521 WARD N 7698
SALESMA
7654 MARTIN N 7698
SALESMA
7844 TURNER N 7698

OR

SELECT EMPNO, ENAME, JOB, MGR FROM EMP WHERE JOB='SALESMAN' OR MGR = 7698

EMPNO ENAME JOB MGR


SALESMA
7499 ALLEN N 7698
SALESMA
7521 WARD N 7698
SALESMA
7654 MARTIN N 7698
SALESMA
7844 TURNER N 7698
7900 JAMES CLERK 7698

NOT

SELECT * FROM SCOTT.EMP WHERE COMM IS NOT NULL

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO


SALESMA
7499 ALLEN N 7698 2/20/1981 1600 300 30
SALESMA
7521 WARD N 7698 2/22/1981 1250 500 30
SALESMA
7654 MARTIN N 7698 9/28/1981 1250 1400 30
SALESMA
7844 TURNER N 7698 9/8/1981 1500 0 30

II) GROUP BY [COLUMN NAME] – GROUPING THE VALUES


14

SELECT JOB, AVG (SAL) FROM SCOTT.EMP GROUP BY JOB

JOB AVG(SAL)
ANALYST 3000
CLERK 1037.5
MANAGER 2758.333333
PRESIDENT 5000
SALESMAN 1400

III) HAVING [CONDITION] – ELIMINATING GROUP OF DATA


SELECT JOB, AVG (SAL) FROM SCOTT.EMP GROUP BY JOB HAVING AVG (SAL) > 2500

JOB AVG(SAL)
ANALYST 3000
MANAGER 2758.333333
PRESIDENT 5000

IV) ORDER BY [CONDITION] – ORDERING THE OUTPUT OF QUERY


SELECT * FROM SCOTT.EMP ORDER BY SAL DESC

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO


7839 KING PRESIDENT   11/17/1981 5000   10
7788 SCOTT ANALYST 7566 4/19/1987 3000   20
7902 FORD ANALYST 7566 12/3/1981 3000   20
7566 JONES MANAGER 7839 4/2/1981 2975   20
7698 BLAKE MANAGER 7839 5/1/1981 2850   30
7782 CLARK MANAGER 7839 6/9/1981 2450   10
7499 ALLEN SALESMAN 7698 2/20/1981 1600 300 30
7844 TURNER SALESMAN 7698 9/8/1981 1500 0 30
7934 MILLER CLERK 7782 1/23/1982 1300   10
7521 WARD SALESMAN 7698 2/22/1981 1250 500 30
7654 MARTIN SALESMAN 7698 9/28/1981 1250 1400 30
7876 ADAMS CLERK 7788 5/23/1987 1100   20
7900 JAMES CLERK 7698 12/3/1981 950   30
7369 SMITH CLERK 7902 11/12/2008 800   20

V) SQL FUNCTIONS

(1) AGGREGATE FUNCTIONS


(A) MAX ()
15

SELECT ENAME, SAL FROM SCOTT.EMP WHERE SAL = (SELECT MAX (SAL) FROM SCOTT.EMP
WHERE JOB='CLERK')

ENAME SAL
MILLER 1300

(B) MIN ()
SELECT ENAME, SAL FROM SCOTT.EMP WHERE SAL = (SELECT MIN(SAL) FROM SCOTT.EMP
WHERE JOB='CLERK')

ENAME SAL
SMITH 800

(C) SUM ()
SELECT SUM (SAL) AS CLERKS_SALARY FROM SCOTT.EMP WHERE JOB='CLERK'

CLERKS_SALARY
4150

(D) COUNT ()
SELECT COUNT (JOB) AS NO_OF_MANAGERS FROM SCOTT.EMP WHERE JOB='MANAGER'

NO_OF_MANAGERS
3

(E) AVG ()
SELECT AVG (SAL) AS AVERAGE_SALARY_FOR_CLERK FROM SCOTT.EMP WHERE JOB='CLERK'

AVERAGE_SALARY_FOR_CLERK
1037.5

(2) STRING FUNCTIONS


(A) LENGTH ()
SELECT LENGTH ('cluster') FROM DUAL

LENGTH('CLUSTER')
7

(B) SUBSTR ()
SELECT SUBSTR ('CLUSTER', 2, 5) FROM DUAL
16

SUBSTR('CLUSTER',2,5)
LUSTE

(C) UPPER ()
SELECT UPPER ('cluster') FROM DUAL

UPPER('CLUSTER')
CLUSTER

(D) LOWER ()
SELECT LOWER ('CLUSTER') FROM DUAL

LOWER('CLUSTER')
Cluster

(E) INITCAP ()
SELECT INITCAP ('hello world') FROM DUAL

INITCAP('HELLOWORLD')
Hello World

(F) LTRIM ()
SELECT LENGTH (' cluster') FROM DUAL

LENGTH('CLUSTER')
9

SELECT LENGTH (LTRIM (' cluster')) FROM DUAL

LENGTH(LTRIM('CLUSTER'))
7

(G) RTRIM ()
SELECT LENGTH(RTRIM('cluster ')) FROM DUAL

LENGTH(RTRIM('CLUSTER'))
7

(H)LPAD ()
17

SELECT LPAD ('CLUSTER', 10,'*') FROM DUAL

LPAD('CLUSTER',10,'*')
***CLUSTER

(I) RPAD ()
SELECT RPAD ('CLUSTER', 10,'*') FROM DUAL

RPAD('CLUSTER',10,'*')
CLUSTER***

(3) MATHEMATICAL FUNCTIONS


(A) ABS ()
SELECT ABS (-23.65) FROM DUAL

ABS(-23.65)
23.65

SELECT ABS (-23) FROM DUAL

(B) SIN ()
SELECT SIN (3) FROM DUAL

SIN(3)
0.141120008

(C) COS ()

SELECT COS (30) FROM DUAL

COS(30)
-0.989992497

(D) TAN ()
(E) SQRT ()
SELECT SQRT (9) FROM DUAL

SQRT(9)
3
18

(F) CEIL ()
SELECT CEIL (32.35) FROM DUAL

CEIL(32.35)
33

SELECT CEIL (-32.35) FROM DUAL

CEIL(32.35)
32

(G) FLOOR ()
SELECT FLOOR (5.9) FROM DUAL

FLOOR(5.9)
5

SELECT FLOOR (-5.9) FROM DUAL

FLOOR(-5.9)
-6

(H)ROUND ()
SELECT ROUND (5.5) FROM DUAL

ROUND(5.5)
6

SELECT ROUND (5.5555, 2) FROM DUAL

ROUND(5.5555,2)
5.56

(4) CONVERSION FUNCTIONS


(A) TO_DATE ()
The to_date function converts a STRING to a DATE.

SELECT TO_DATE ('070903', 'MMDDYY') FROM DUAL


19

SELECT TO_DATE ('31/12/2008','DD/MM/YYYY') FROM DUAL

SELECT TO_DATE ('2003/07/09', 'yyyy/mm/dd') FROM DUAL

SELECT TO_DATE ('070903', 'MMDDYY') FROM DUAL

INSERT INTO T_CONVERSION_TEST (DATE_TEST) VALUES (TO_DATE ('070903', 'MMDDYY'))

Would always store the value of date in MM/DD/YYYY format in the database

(B) TO_CHAR ()
The to_char function converts a NUMBER or DATE to STRING

NUMBER to STRING

SELECT TO_CHAR (12345) FROM DUAL

DATE to STRING

SELECT TO_CHAR (SYSDATE,'YYYY/MM/DD') FROM DUAL

INSERT INTO T_CONVERSION_TEST (STRING_TEST) VALUES (TO_CHAR (SYSDATE,'MON DDth,


YYYY'))

Converts and inserts a date value as string.

(C) TO_NUMBER ()
The to_number function converts a STRING to NUMBER

SELECT TO_NUMBER ('1210.73') FROM DUAL

2) NVL FUNCTION
In Oracle/PLSQL, the NVL function lets you substitute a value when a null value is encountered.

SELECT NVL (COMM, SAL) FROM EMP

VI) DISTINCT
The DISTINCT clause allows you to remove duplicates from the result set. The DISTINCT clause can
only be used with select statements.

SELECT DISTINCT JOB FROM SCOTT.EMP;

VII) SQL JOINS


20

(1) INNER JOIN (EQUI -JOIN)


SELECT ENAME, JOB, DNAME, LOC
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO

(2) SELF-JOIN
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 11/12/2008 800 NULL 20
7499 ALLEN SALESMAN 7698 2/20/1981 1600 300 30
7521 WARD SALESMAN 7698 2/22/1981 1250 500 30
7566 JONES MANAGER 7839 4/2/1981 2975 NULL 20
7654 MARTIN SALESMAN 7698 9/28/1981 1250 1400 30
7698 BLAKE MANAGER 7839 5/1/1981 2850 NULL 30
7782 CLARK MANAGER 7839 6/9/1981 2450 NULL 10
7788 SCOTT ANALYST 7566 4/19/1987 3000 NULL 20
7839 KING PRESIDENT NULL 11/17/1981 5000 NULL 10
7844 TURNER SALESMAN 7698 9/8/1981 1500 0 30
7876 ADAMS CLERK 7788 5/23/1987 1100 NULL 20
7900 JAMES CLERK 7698 12/3/1981 950 NULL 30
7902 FORD ANALYST 7566 12/3/1981 3000 NULL 20
7934 MILLER CLERK 7782 1/23/1982 1300 NULL 10
EMP TABLE

SYNTAX -

SELECT EMPLOYEE.ENAME AS EMPLOYEE, MANAGER.ENAME AS MANAGER


FROM EMP EMPLOYEE, EMP MANAGER
WHERE EMPLOYEE.MGR = MANAGER.EMPNO

(3) OUTER JOIN


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

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO


7369 SMITH CLERK 7902 11/12/2008 800   20
7499 ALLEN SALESMAN 7698 2/20/1981 1600 300 30
7521 WARD SALESMAN 7698 2/22/1981 1250 500 30
7566 JONES MANAGER 7839 4/2/1981 2975   20
21

7654 MARTIN SALESMAN 7698 9/28/1981 1250 1400 30


7698 BLAKE MANAGER 7839 5/1/1981 2850   30
7782 CLARK MANAGER 7839 6/9/1981 2450   10
7788 SCOTT ANALYST 7566 4/19/1987 3000   20
7839 KING PRESIDENT   11/17/1981 5000   10
7844 TURNER SALESMAN 7698 9/8/1981 1500 0 30
7876 ADAMS CLERK 7788 5/23/1987 1100    
7900 JAMES CLERK 7698 12/3/1981 950   30
7902 FORD ANALYST 7566 12/3/1981 3000   20
7934 MILLER CLERK 7782 1/23/1982 1300    
EMP TABLE

GRADE LOSAL HISAL


1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999
SALGRADE TABLE

(A) LEFT OUTER JOIN

SELECT ENAME, JOB, DNAME, LOC

FROM EMP LEFT OUTER JOIN DEPT

ON EMP.DEPTNO = DEPT.DEPTNO

OR

SELECT ENAME, JOB, DNAME, LOC

FROM EMP, DEPT

WHERE EMP.DEPTNO = DEPT.DEPTNO (+)

ENAME JOB DNAME LOC


KING PRESIDENT ACCOUNTING NEW YORK
CLARK MANAGER ACCOUNTING NEW YORK
FORD ANALYST RESEARCH DALLAS
SCOTT ANALYST RESEARCH DALLAS
JONES MANAGER RESEARCH DALLAS
22

SMITH CLERK RESEARCH DALLAS


JAMES CLERK SALES CHICAGO
TURNER SALESMAN SALES CHICAGO
BLAKE MANAGER SALES CHICAGO
MARTIN SALESMAN SALES CHICAGO
WARD SALESMAN SALES CHICAGO
ALLEN SALESMAN SALES CHICAGO
MILLER CLERK    
ADAMS CLERK    

(B) RIGHT OUTER JOIN

SELECT ENAME, JOB, DNAME, LOC

FROM EMP RIGHT OUTER JOIN DEPT

ON EMP.DEPTNO = DEPT.DEPTNO

OR

SELECT ENAME, JOB, DNAME, LOC

FROM SCOTT.EMP, SCOTT.DEPT

WHERE EMP.DEPTNO (+) = DEPT.DEPTNO

ENAME JOB DNAME LOC


CLARK MANAGER ACCOUNTING NEW YORK
KING PRESIDENT ACCOUNTING NEW YORK
MILLER CLERK ACCOUNTING NEW YORK
SMITH CLERK RESEARCH DALLAS
ADAMS CLERK RESEARCH DALLAS
FORD ANALYST RESEARCH DALLAS
SCOTT ANALYST RESEARCH DALLAS
JONES MANAGER RESEARCH DALLAS
ALLEN SALESMAN SALES CHICAGO
BLAKE MANAGER SALES CHICAGO
MARTIN SALESMAN SALES CHICAGO
JAMES CLERK SALES CHICAGO
TURNER SALESMAN SALES CHICAGO
WARD SALESMAN SALES CHICAGO
    OPERATIONS BOSTON
23

(C) FULL OUTER JOIN


ENAME JOB DNAME LOC
KING PRESIDENT ACCOUNTING NEW YORK
CLARK MANAGER ACCOUNTING NEW YORK
FORD ANALYST RESEARCH DALLAS
SCOTT ANALYST RESEARCH DALLAS
JONES MANAGER RESEARCH DALLAS
SMITH CLERK RESEARCH DALLAS
JAMES CLERK SALES CHICAGO
TURNER SALESMAN SALES CHICAGO
BLAKE MANAGER SALES CHICAGO
MARTIN SALESMAN SALES CHICAGO
WARD SALESMAN SALES CHICAGO
ALLEN SALESMAN SALES CHICAGO
MILLER CLERK    
ADAMS CLERK    
    OPERATIONS BOSTON

(4) NON-EQUI JOIN


SELECT E.EMPNO, E.ENAME, E.SAL, S.GRADE

FROM EMP E, SALGRADE S

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

EMPNO ENAME SAL GRADE


7369 SMITH 800 1
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
24

SELECT E.ENAME, E.JOB, E.SAL, S.GRADE


FROM EMP E, SALGRADE S
WHERE E.SAL > S.LOSAL AND E.SAL < S.HISAL

CARTESIAN PRODUCT - If two tables in a join query have no join condition, Oracle returns their
Cartesian product. Oracle combines each row of one table with each row of the other. A Cartesian
product always generates many rows and is rarely useful. For example, the Cartesian product of
two tables, each with 100 rows, has 10,000 rows. Always include a join condition unless you
specifically need a Cartesian product.

VII) SELECT – NESTED STATEMENTS


Writing a query inside another query is required sometimes. The query which is inside is called
SUB-QUERY. The query which encloses the SUB-QUERY is called MAIN QUERY.

Example 1 - =, < OPERATOR

SELECT ENAME, SAL FROM SCOTT.EMP WHERE SAL =


(SELECT MAX (SAL) FROM SCOTT.EMP WHERE SAL <
(SELECT MAX (SAL) FROM SCOTT.EMP))

Example 2 – IN OPERATOR

SELECT ENAME, DEPTNO FROM EMP WHERE DEPTNO IN


(SELECT DEPTNO FROM DEPT WHERE LOC IN ('NEW YORK','DALLAS'))

EXAMPE 3 – HAVING, GROUP BY, ORDER BY

SELECT DEPTNO, MIN (SAL)


FROM EMP
GROUP BY DEPTNO
HAVING MIN (SAL) > (SELECT MIN (SAL) FROM EMP WHERE DEPTNO = 20)
ORDER BY MIN (SAL)

SELECT DEPTNO, MIN (SAL)


FROM (SELECT * FROM EMP WHERE DEPTNO IS NOT NULL)
GROUP BY DEPTNO
HAVING MIN (SAL) > (SELECT MIN (SAL) FROM EMP WHERE DEPTNO = 20)

Example 4 – ALL , ANY OPERATOR

SELECT ENAME, JOB, SAL FROM EMP WHERE SAL > ALL (SELECT SAL FROM EMP WHERE DEPTNO
= 20)

SELECT ENAME, JOB, SAL FROM EMP WHERE SAL > ANY (SELECT SAL FROM EMP WHERE
DEPTNO = 20) AND DEPTNO <> 20
25

Example 5 –

CREATE TABLE T_EMPLOYEE AS (SELECT * FROM EMP)

If you do not want to move the data then –

CREATE TABLE T_EMPLOYEE AS (SELECT * FROM EMP where 1=2)

VIII) UNION – COMBINING MULTIPLE QUERIES.

1) MODIFYING AND UPDATING DATA

A) INSERT STATEMENT FOR ADDING DATA TO TABLES

Syntax-

For inserting values in all the columns –


INSERT INTO <table-name> VALUES (<value1>, <value2>, <value3>)

For inserting values in particular columns –


INSERT INTO <table-name> (<column1>, <column2>, <column3>) VALUES (<value1>, <value2>,
<value3>)

B) UPDATE AND DELETE STATEMENT FOR MODIFYING DATA

Syntax-

UPDATE <table-name> SET <column1> = <value1>, <column2> = <value2> [WHERE condition].

Anything specified in [ ] is optional. If WHERE condition is not specified then all the records will be
updated.

DELETE FROM <table-name> [WHERE condition]

If WHERE condition is not specified then all the records of the table will be deleted.

OTHER DATABASE OBJECTS


26

1) VIEW

A view is, in essence, a virtual table. It does not physically exist. Rather, it is created by a query
joining one or more tables. Advantages - Restrict access, Eases the "complicated" joins, present
different views of the same data according to their particular criteria. You can use views instead of
creating temporary tables and dropping them daily.

CREATING OR UPDATING A VIEW

CREATE OR REPLACE VIEW <view_name> AS

SELECT <columns>

FROM table

WHERE predicates;

DROPPING A VIEW

DROP VIEW view_name;

The views are of 2 types

i) Simple view

ii) Complex view

A Simple view selects from one table. A Complex view selects from one or more tables.

You can perform DML through Simple views but you cannot always perform DML through
Complex views.

Example –

CREATE OR REPLACE VIEW SCOTT.V_EMP AS


SELECT EMPNO, ENAME, JOB, EMP.DEPTNO
FROM SCOTT.EMP

INSERT INTO SCOTT.V_EMP VALUES (3, 'JOHN', 'ASSISTANT', 20)

CREATE OR REPLACE VIEW SCOTT.V_EMP_DEPT AS


SELECT EMPNO, ENAME, JOB, EMP.DEPTNO, DNAME, LOC
FROM SCOTT.EMP, SCOTT.DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;

DROP VIEW SCOTT.V_EMP_DEPT


27

2) SEQUENCE

In Oracle, you can create an auto number field by using sequences. A sequence is an object in Oracle
that is used to generate a number sequence. This can be useful when you need to create a unique
number to act as a primary key.

CREATE SEQUENCE SCOTT.EMP_SEQ

MINVALUE 1

MAXVALUE 999999999999999999999999999

START WITH 1

INCREMENT BY 1

NOCACHE

CYCLE;

SELECT SCOTT.EMP_SEQ.NEXTVAL FROM DUAL

SELECT SCOTT.EMP_SEQ.CURRVAL FROM DUAL

While inserting into a table the syntax would be –

INSERT INTO <table-name> VALUES (<seq-name>.NEXTVAL, ‘ ‘, ‘ ‘);

Eg-

INSERT INTO SCOTT.T_EMPL VALUES (EMP_SEQ.NEXTVAL, 'JEETU')

DROP SEQUENCE SCOTT.EMP_SEQ

DCL (DATA CONTROL LANGUAGE)

1) GRANT STATEMENT

GRANT statement is used to give various permissions to the user on various database objects.

Syntax

GRANT [SELECT, INSERT, UPDATE, DELETE]

ON <object-name>

TO <user-name>
28

Example -

GRANT SELECT, INSERT, UPDATE, DELETE ON CLUSTERS.T_CUSTOMER TO SCOTT

GRANT SELECT, INSERT, UPDATE ON CLUSTERS.T_SILVERCUSTOMER TO SCOTT

2) REVOKE STATEMENT

REVOKE statement is used to withdraw permissions to the user on the database objects.

Syntax-

REVOKE [SELECT, INSERT, UPDATE, DELETE]

ON<object-name>

FROM<user-name>

Example-

REVOKE SELECT, INSERT, UPDATE, DELETE ON CLUSTERS.T_CUSTOMER FROM SCOTT

PL/SQL

1) PL/SQL BLOCK

A PL/SQL block contains 1 or more PL/SQL statements. Such a block must at least have the two
keywords BEGIN and END. However, such a block cannot declare any (local) variables. In order to
have local variables, the BEGIND...END block must be preceded with a DECLARE followed by the
variable declarations.

Example 1 – Basic example

DECLARE
A INTEGER;
B INTEGER;
S INTEGER;
BEGIN
A:= 10;
B:= 20;
S:=A+B;
DBMS_OUTPUT.PUT_LINE (S);
END;

Example 2 – Exception block, another way of declaring data type


29

DECLARE
ENAM SCOTT.EMP.ENAME%TYPE;
ESAL SCOTT.EMP.SAL%TYPE;
BEGIN
SELECT ENAME, SAL INTO ENAM, ESAL FROM SCOTT.EMP WHERE EMPNO = &EMPNO;
DBMS_OUTPUT.PUT_LINE ('NAME : ' || ENAM);
DBMS_OUTPUT.PUT_LINE ('SAL : ' || ESAL);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE ('EMPLOYEE DOES NOT EXIST');
END;

Example 3 – Iterating using while loop

DECLARE
A1 NUMBER;
B1 NUMBER;
S INTEGER;
N NUMBER;
I NUMBER;
BEGIN
SELECT COUNT (*) INTO N FROM SCOTT.T_SUM;
DBMS_OUTPUT.PUT_LINE (N);
I:= 1;
WHILE (I<=N)
LOOP
SELECT A, B INTO A1, B1 FROM SCOTT.T_SUM WHERE CID = I;
S:= A1 + B1;
UPDATE SCOTT.T_SUM SET C = S WHERE CID = I;
DBMS_OUTPUT.PUT_LINE (S);
I:= I+1;
END LOOP;
END;

UPDATE SCOTT.T_SUM SET C = NULL;

Example 3 – Using conditional statement (IF, ELSIF THEN)

DECLARE
M NUMBER;
N NUMBER;
I NUMBER;
BEGIN
SELECT COUNT (*) INTO N FROM SCOTT.T_MARKS;
DBMS_OUTPUT.PUT_LINE (N);
I:= 1;
WHILE (I<=N)
LOOP
SELECT MARKS INTO M FROM SCOTT.T_MARKS WHERE SID = I;
30

IF (M>=90) THEN
DBMS_OUTPUT.PUT_LINE ('EXCELLENT');
UPDATE SCOTT.T_MARKS SET REMARKS = 'EXCELLENT' WHERE SID=I;
ELSIF (M>=60 AND M <90) THEN
DBMS_OUTPUT.PUT_LINE ('GOOD');
UPDATE SCOTT.T_MARKS SET REMARKS = 'GOOD' WHERE SID = I;
ELSIF (M>=35 AND M <60) THEN
DBMS_OUTPUT.PUT_LINE ('AVERAGE');
UPDATE SCOTT.T_MARKS SET REMARKS = 'AVERAGE' WHERE SID = I;
ELSIF (M <35) THEN
DBMS_OUTPUT.PUT_LINE ('FAIL');
UPDATE SCOTT.T_MARKS SET REMARKS = 'FAIL' WHERE SID = I;
END IF;
I:= I+1;
END LOOP;
END;

UPDATE SCOTT.T_MARKS SET REMARKS = NULL;

Example 4 – Iterating using FOR loop

DECLARE
N NUMBER;
I NUMBER;
BEGIN
N:=10;
FOR I IN 1..N
LOOP
DBMS_OUTPUT.PUT_LINE (I);
END LOOP;
END;

DECLARE
N NUMBER;
I NUMBER;
BEGIN
N:=10;
FOR I IN REVERSE 1..N
LOOP
DBMS_OUTPUT.PUT_LINE (I);
END LOOP;
END;

2) CURSOR

A cursor is a mechanism by which you can assign a name to a "SELECT STATEMENT" and
manipulate the information within that SQL statement.
31

For every SQL statement execution, certain area in memory is allocated. PL/SQL allows you to name
this area. This private SQL area is called context area or cursor. A cursor acts as a handle or pointer
into the context area. A PL/SQL program controls the context area using the cursor. Cursor
represents a structure in memory and is different from cursor variable.

Cursors allow the programmer to retrieve data from a table and perform actions on that data one
row at a time. There are two types of cursors implicit cursors and explicit cursors.

IMPLICIT CURSOR

For SQL queries returning single row PL/SQL declares implicit cursors. Implicit cursors are simple
SELECT statements and are written in the BEGIN block (executable section) of the PL/SQL. Implicit
cursors are easy to code, and they retrieve exactly one row. PL/SQL implicitly declares cursors for
all DML statements. The most commonly raised exceptions here are NO_DATA_FOUND or
TOO_MANY_ROWS.
Syntax:

SELECT ename, sal INTO enam, esal FROM EMP WHERE EMPNO = 7844;

DECLARE
ENAM SCOTT.EMP.ENAME%TYPE;
ESAL SCOTT.EMP.SAL%TYPE;
BEGIN
SELECT ENAME, SAL INTO ENAM, ESAL FROM SCOTT.EMP WHERE EMPNO = &EMPNO;
DBMS_OUTPUT.PUT_LINE ('NAME : ' || ENAM);
DBMS_OUTPUT.PUT_LINE ('SAL : ' || ESAL);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE ('EMPLOYEE DOES NOT EXIST');
END;

EXPLICIT CURSOR

Explicit cursors are used in queries that return multiple rows. The set of rows fetched by a query is
called active set. The size of the active set meets the search criteria in the select statement. Explicit
cursor is declared in the DECLARE section of PL/SQL program.

Syntax:

CURSOR <cursor-name> IS <select statement>

Sample Code:

DECLARE
CURSOR emp_cur IS SELECT ename FROM EMP;
BEGIN
----
32

---
END;

Opening Cursor:

Syntax: OPEN <cursor-name>;

Example : OPEN emp_cur;

When a cursor is opened the active set is determined, the rows satisfying the where clause in the
select statement are added to the active set. A pointer is established and points to the first row in
the active set.

Fetching from the cursor:

To get the next row from the cursor we need to use fetch statement.

Syntax: FETCH <cursor-name> INTO <variables>;

Example: FETCH emp_cur INTO ena;

FETCH statement retrieves one row at a time. Bulk collect clause need to be used to fetch more than
one row at a time.

Closing the cursor:

After retrieving all the rows from active set the cursor should be closed. Resources allocated for the
cursor are now freed. Once the cursor is closed the execution of fetch statement will lead to errors.

CLOSE <cursor-name>;

Example 1

DECLARE
ENAM SCOTT.EMP.ENAME%TYPE;
ESAL SCOTT.EMP.SAL%TYPE;
CURSOR C1 IS
SELECT ENAME, SAL INTO ENAM, ESAL FROM SCOTT.EMP;
BEGIN
OPEN C1;
FETCH C1 INTO ENAM, ESAL;
DBMS_OUTPUT.PUT_LINE (ENAM || ' SALARY IS $ ' || ESAL);
FETCH C1 INTO ENAM, ESAL;
DBMS_OUTPUT.PUT_LINE (ENAM || ' SALARY IS $ ' || ESAL);
FETCH C1 INTO ENAM, ESAL;
DBMS_OUTPUT.PUT_LINE (ENAM || ' SALARY IS $ ' || ESAL);
FETCH C1 INTO ENAM, ESAL;
DBMS_OUTPUT.PUT_LINE (ENAM || ' SALARY IS $ ' || ESAL);
CLOSE C1;
END;
33

Explicit Cursor Attributes

Every cursor defined by the user has 4 attributes. When appended to the cursor name these
attributes let the user access useful information about the execution of a multirow query.

The attributes are:

%NOTFOUND: It is a Boolean attribute, which evaluates to true, if the last fetch failed. i.e. when
there are no rows left in the cursor to fetch.
%FOUND: Boolean variable, which evaluates to true if the last fetch, succeeded.
%ROWCOUNT: It’s a numeric attribute, which returns number of rows fetched by the cursor so far.
%ISOPEN: A Boolean variable, which evaluates to true if the cursor is opened otherwise to false.

Example 2 – Iterating through cursor

DECLARE
ENAM SCOTT.EMP.ENAME%TYPE;
ESAL SCOTT.EMP.SAL%TYPE;
CURSOR C1 IS
SELECT ENAME, SAL INTO ENAM, ESAL FROM SCOTT.EMP ORDER BY SAL DESC;
BEGIN
OPEN C1;
IF C1%ISOPEN THEN
LOOP
FETCH C1 INTO ENAM, ESAL;
DBMS_OUTPUT.PUT_LINE (ENAM || ' SALARY IS $ ' || ESAL);
EXIT WHEN C1%NOTFOUND;
END LOOP;
END IF;
CLOSE C1;
END;

3) STORED PROCEDURE

Syntax –

CREATE [OR REPLACE] PROCEDURE procedure_name


[ (parameter ,parameter) ]
IS
[declaration_section]
BEGIN
executable_section
END [procedure_name];
34

CREATING A PROCEDURE

CREATE OR REPLACE PROCEDURE SCOTT.MARKS_PROCEDURE (ID NUMBER) IS


M NUMBER;
BEGIN
SELECT MARKS INTO M FROM SCOTT.T_MARKS WHERE SID = ID;
IF (M>=90) THEN
DBMS_OUTPUT.PUT_LINE ('EXCELLENT');
UPDATE SCOTT.T_MARKS SET REMARKS = 'EXCELLENT' WHERE SID=ID;
ELSIF (M>=60 AND M <90) THEN
DBMS_OUTPUT.PUT_LINE ('GOOD');
UPDATE SCOTT.T_MARKS SET REMARKS = 'GOOD' WHERE SID = ID;
ELSIF (M>=35 AND M <60) THEN
DBMS_OUTPUT.PUT_LINE ('AVERAGE');
UPDATE SCOTT.T_MARKS SET REMARKS = 'AVERAGE' WHERE SID = ID;
ELSIF (M <35) THEN
DBMS_OUTPUT.PUT_LINE ('FAIL');
UPDATE SCOTT.T_MARKS SET REMARKS = 'FAIL' WHERE SID = ID;
END IF;
END;

EXECUTING A PROCEDURE

EXEC MARKS_PROCEDURE (8)

In PL/SQL, we can pass parameters to procedures and functions in three ways.

1) IN type parameter: These types of parameters are used to send values to stored
procedures.

2) OUT type parameter: These types of parameters are used to get values from stored
procedures. This is similar to a return type in functions.

3) IN OUT parameter: These types of parameters are used to send values and get values from
stored procedures.

NOTE: If a parameter is not explicitly defined a parameter type, then by default it is an IN type
parameter.

IN PARAMETER
This is similar to passing parameters in programming languages. We can pass values to the stored
procedure through these parameters or variables. This type of parameter is a read only parameter.
We can assign the value of IN type parameter to a variable or use it in a query, but we cannot
change its value inside the procedure.

The general syntax to pass a IN parameter is

CREATE [OR REPLACE] PROCEDURE <procedure_name> ( param_name1 IN data-type,


param_name12 IN data-type ... )
35

Example -
CREATE OR REPLACE PROCEDURE SCOTT.IN_PARAM (MESG VARCHAR2) IS
BEGIN
DBMS_OUTPUT.PUT_LINE (MESG);
END IN_PARAM;
/

EXEC IN_PARAM ('SINGLE IN PARAMETER');

OUT PARAMETER
The OUT parameters are used to send the OUTPUT from a procedure or a function. This is a write-
only parameter i.e, we cannot pass values to OUT parameters while executing the stored procedure,
but we can assign values to OUT parameter inside the stored procedure and the calling program
can receive this output value.

The General syntax to create an OUT parameter is

CREATE [OR REPLACE] PROCEDURE proc2 (param_name OUT data-type)


The parameter should be explicitly declared as OUT parameter.

Example -
CREATE OR REPLACE PROCEDURE SCOTT.OUT_PARAM (MESG OUT VARCHAR2) IS
BEGIN
MESG := 'SINGLE OUT PARAMETER';
END OUT_PARAM;
/

DECLARE
S VARCHAR2 (50);
BEGIN
OUT_PARAM (S);
DBMS_OUTPUT.PUT_LINE (S);
END;

IN OUT PARAMETER
The IN OUT parameter allows us to pass values into a procedure and get output values from the
procedure. This parameter is used if the value of the IN parameter can be changed in the calling
program.

By using IN OUT parameter we can pass values into a parameter and return a value to the calling
program using the same parameter. But this is possible only if the value passed to the procedure
and output value have a same datatype. This parameter is used if the value of the parameter will be
changed in the procedure.

The General syntax to create an IN OUT parameter is

CREATE [OR REPLACE] PROCEDURE proc3 (param_name IN OUT datatype)

Example -
CREATE OR REPLACE PROCEDURE SCOTT.INOUT_PARAM (MESG IN OUT VARCHAR2) IS
36

BEGIN
MESG := MESG || ' AN IN OUT PARAMETER';
END INOUT_PARAM;
/

DECLARE
S VARCHAR2 (50) := 'THIS PROCEDURE USES';
BEGIN
SCOTT.INOUT_PARAM(S);
DBMS_OUTPUT.PUT_LINE(S);
END;

CREATING A STORED PROCEDURE WITHIN A PACKAGE

Specify the contents of the package

CREATE OR REPLACE PACKAGE SCOTT.PKG_OUT_PARAM AS


PROCEDURE PROC_OUT_PARAM (MESG OUT VARCHAR2);
END PKG_OUT_PARAM;

Create the body

CREATE OR REPLACE PACKAGE BODY SCOTT.PKG_OUT_PARAM AS


PROCEDURE PROC_OUT_PARAM (MESG OUT VARCHAR2) IS
BEGIN
MESG := 'SINGLE OUT PARAMETER';
END PROC_OUT_PARAM;
END PKG_OUT_PARAM;

EXECUTION

DECLARE
S VARCHAR2 (50);
BEGIN
PKG_OUT_PARAM.PROC_OUT_PARAM (S);
DBMS_OUTPUT.PUT_LINE (S);
END;

CREATING MULTIPLE STORED PROCEDURES WITHIN A SINGLE PACKAGE

/* First create a package and specify the content of the package. Here we are declaring 2
procedures*/
CREATE OR REPLACE PACKAGE SCOTT.PKG_WITH_MULTIPLE_PROCS AS
PROCEDURE PROC_OUT_PARAM (MESG OUT VARCHAR2);
PROCEDURE MARKS_PROCEDURE (ID NUMBER);
END PKG_WITH_MULTIPLE_PROCS;
37

/*Creates the package body which includes procedures */


CREATE OR REPLACE PACKAGE BODY SCOTT.PKG_WITH_MULTIPLE_PROCS AS
PROCEDURE PROC_OUT_PARAM (MESG OUT VARCHAR2) IS
BEGIN
MESG := 'SINGLE OUT PARAMETER';
END PROC_OUT_PARAM;
PROCEDURE MARKS_PROCEDURE (ID NUMBER) IS
M NUMBER;
BEGIN
SELECT MARKS INTO M FROM SCOTT.T_MARKS WHERE SID = ID;
IF (M>=90) THEN
DBMS_OUTPUT.PUT_LINE ('EXCELLENT');
UPDATE SCOTT.T_MARKS SET REMARKS = 'EXCELLENT' WHERE SID=ID;
ELSIF (M>=60 AND M <90) THEN
DBMS_OUTPUT.PUT_LINE ('GOOD');
UPDATE SCOTT.T_MARKS SET REMARKS = 'GOOD' WHERE SID = ID;
ELSIF (M>=35 AND M <60) THEN
DBMS_OUTPUT.PUT_LINE ('AVERAGE');
UPDATE SCOTT.T_MARKS SET REMARKS = 'AVERAGE' WHERE SID = ID;
ELSIF (M <35) THEN
DBMS_OUTPUT.PUT_LINE ('FAIL');
UPDATE SCOTT.T_MARKS SET REMARKS = 'FAIL' WHERE SID = ID;
END IF;
END;
END PKG_WITH_MULTIPLE_PROCS;

4) TRIGGER

CREATE OR REPLACE TRIGGER TR1


BEFORE UPDATE OR DELETE ON T_TRIGGER_TEST
FOR EACH ROW
DECLARE
OPERATION VARCHAR2 (10);
CD DATE;
A NUMBER;
B NUMBER;
C NUMBER;
BEGIN
IF DELETING THEN
OPERATION:='DELETE';
END IF;
IF UPDATING THEN
OPERATION:='UPDATE';
END IF;
CD:=SYSDATE;
A:=:OLD.A;
B:=:OLD.B;
C:=:OLD.C;
INSERT INTO T_TRIGGER_TEST_HISTORY VALUES (A, B, C, OPERATION, CD);
38

DBMS_OUTPUT.PUT_LINE (OPERATION);
DBMS_OUTPUT.PUT_LINE (CD);
END;

Note – Execute it from normal SQL Editor

DROPPING A TRIGGER

DROP TRIGGER <trigger_name>;

OTHER INFORMATION

Logging in as a DBA
SYS/AS SYSDBDA

Description of DUAL table


DESC DUAL

Das könnte Ihnen auch gefallen