Oracle Query
Oracle Query
ORACLE SYLABUS:
DATA BASE CONCEPTS:
FEATURES OF SQL
FEATURES OF SQL * PLUS
SQL VS SQL*PLUS
RULES FOR SQL.
DDL, DRL, DML, TCL, DCL COMMANDS.
INTRODUCTION OF ISQL*PLUS:
DATABASE OBJECTS:
DATABASE OBJECTS.
NAMING CONVENTIONS.
SELECT STATEMENT
SELETING ALL COLUMNS
SELECTING WITH WHERE CLAUSE,
COULMN HEADING DEFAULTS.
CONSTRAINTS:
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.
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.
SUBQUERIES:
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.
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.
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.
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.
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.
WHAT IS EXCEPTION.
TYPES OF EXCEPTIONS.
USER AND PREDEFINED EXCEPTIONS.
HANDLING EXCEPTIONS.
RAISE-APPLICATION-ERROR
EXCEPTION_INIT.
SQLCODE.
SQLERRM.
PL/SQL SECURITY:
STORED PROCEDURES:
OVERVIEW OF 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.
DBMS_JOB.
DBMS_OUTPUT.
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.
USER_OBJECTS.
USER_SOURCE.
USER_ERRORS.
USER_TRIGGERS.
DEBUGGING USING DBMS_OUTPUT.
MANAGING DEPENDENCIES:
UNDERSTANDING DEPENDENCIES
USER_DEPENDENCIES.
FILE INPUT/OUTPUT:
CREATION OF OBJECTS.
USER DEFINED TYPES.
OBJECT TABLES.
OBJECT VIEWS.
DML THROUGH OBJECTS.
WHAT IS LOB.
COLB.
BLOB.
NCOLB.
BFILE.
CREATING TABLES WITH LOBS.
DBMS_LOB.
CREATION OF EXTERNAL TABLES.
VARRAYS.
NESTED TABLES.
INDEX BY TABLES.
DML OPERATIONS ON NESTED TABLES.
PROJECT:
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.
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.
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
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:
Table created.
EMPNO NUMBER(10)
ENAME VARCHAR2(10)
JOB VARCHAR2(10)
MGR NUMBER(10)
HIREDATE DATE
SAL NUMBER(10)
COMM NUMBER(10)
DEPTNO NUMBER(10)
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
4 rows selected.
2 WHERE EMPNO=100;
1 row selected.
1 row selected.
UPDATE STATEMENT:
WHILE UPDATING A TABLE IF YOU DON’T GIVE WHERE CLAUSE WHOLE TABLE WILL
BE UPDATED.
4 rows updated.
4 rows selected.
1 row updated.
4 rows selected.
1 row updated.
4 rows selected.
IF YOU WANT TO DELETE INFO FROM A TABLE,HERE IF YOU WON’T SPECIFY THE
WHERE CLAUSE WHOLE TABLE INFO WILL BE DELETED.
1 row deleted.
3 rows selected.
1 row deleted.
2 rows selected.
2 rows deleted.
AS
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.
AS
HERE EMP TABLE CREATED WITH EMPNO,ENAME COLUMNS AND DATA FOR THAT
COLUMNS FROM EMPLOYEE_INFO TABLE.
(EMPLOYEE_NO,EMPLOYEE_NAME)
AS
HERE EMP TABLE CREATED WITH COLUMNS EMPNO,ENAME BUT THEIR HEADINGS
WILL BE EMPLOYEE_NO,EMPLOYEE_NAME.
EMP
DEPT
SALGRADE.
DELETE VS TRUNCATE:
2 rows deleted.
no rows selected
Rollback complete.
2 ROWS DELETED.
SQL> COMMIT;
COMMIT COMPLETE.
ROLLBACK COMPLETE.
NO ROWS SELECTED
2 VALUES
3 (100,'PAVAN','CHAIRMAN',NULL,'01-JAN-05',32000,10000,10);
1 ROW CREATED.
SQL> COMMIT;
COMMIT COMPLETE.
TABLE TRUNCATED.
ROLLBACK COMPLETE.
NO ROWS SELECTED
BUT AFTER DELETE IF YOU TYPE COMMIT. THEN INFORMATION WILL BE DELETED
PERMENENTLY.
ORDER BY CLAUSE:
SELECT ENAME , SAL FROM EMP ORDER BY SAL ; DEFAULT IS ASCENDING ORDER.
10 ROWS SELECTED.
14 ROWS SELECTED.
DISTINCT:
WE CAN SUPPRESS DUPLICATE ROWS WHILE SELECTING DATA BY USING THE KEY
WORD DISTINCT:
JOB
---------
CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK
14 rows selected.
JOB
---------
ANALYST
CLERK
MANAGER
PRESIDENT
SALESMAN
CONSTRAINTS:
NOT NULL.
UNIQUE.
PRIMARY KEY.
FOREIGN KEY.
CHECK.
NOT NULL:
Table created.
1 row created.
SQL> /
1 row created.
1 row created.
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.
Table dropped.
Table created.
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.
IF 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.
UNIQUE:
Table dropped.
Table created.
1 row created.
SQL> /
1 row created.
1 row created.
1 row created.
1 row created.
SQL> /
1 row created.
EMPNO ENAME
---------- ----------
1 PAVAN
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
EMPNO ENAME
---------- ----------
1 PAVAN
1 PAVAN
1 PAVAN
1 PAVAN
HERE ALSO WE MAKE EMPNO HAS UNIQUE, THAT IS EMPNO COLUMN SHOLD NOT
ALLOW US TO ENTER DUPLICATE VALUES.
Table dropped.
Table created.
1 row created.
HERE IF YOU TRIES TO ASSIGN SAME NUMBER FOR PAVAN THAT IS WRONG
BECAUSE WE KEPT UNIQUE CONSTRAINT ON EMPNO.
1 row created.
1 row created.
EMPNO ENAME
---------- ----------
1 PAVAN
2 PAVAN
PAVAN
PRIMARY KEY:
Table created.
3 (1,'PAVAN');
1 row created.
SQL> /
INSERT INTO EMPLOYEE
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.SYS_C002752) violated
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.
Table dropped.
3 ENAME VARCHAR2(10));
Table created.
1 row created.
CHECK CONSTRAINT:
Table created.
1 row created.
1 row created.
1 row created.
HERE WE WANT STOP SOME ONE ENTERING BELOW 1000 IN BALANCE COLUMN, FOR
THAT WE KEEP CHECK CONSTRAINT ON COLUMN BALANCE.
Table dropped.
Table created.
1 row created.
Table dropped.
Table created.
Table dropped.
Table created.
Table altered.
FOREIGN KEY:
Table created.
Table created.
14 rows selected.
1 row created.
1 row created.
1 row created.
17 rows selected.
HERE IF U OBSERVE DEPTNO COLUMN IN EMP1 TABLE, IF ANY ONE ASKS WHAT IS
THE NAME OF
DEPARTMENT NUMBER 20, U WILL QUERY DEPT1 TABLE LIKE THIS
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.
Table altered.
Table altered.
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.
2 (EMPNO NUMBER(10),
3 ENAME VARCHAR2(10),
4* DEPTNO NUMBER(10) REFERENCES DEPT1(DEPTNO))
SQL> /
Table created.
Table created.
UNIQUE:
PRIMARY KEY:
FOREIGN KEY:
CHECK:
VIEWING CONSTRAINTS:
YOU CAN SEE THE CONSTRAINTS THAT ARE CREATED ON TABLES IN THE ORACLE
TABLE CALLED
USER_CONSTRAINTS
WHERE TABLE_NAME=’EMP’;
IF YOU WANT TO SEE COLUMNS ASSOCIATED WITH CONSTRAINTS THEN YOU HAVE
TO SEE IN
USER_CONS_COLUMNS
WHERE TABLE_NAME=’EMP’;
Table created.
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
CONSTRAINT_NAME
------------------------------
COLUMN_NAME
----------------------------------------------------------------------------------------------------
TABLE_NAME
------------------------------
EMPLOYEE_CK
SAL
EMPLOYEE
EMPLOYEE_FK
DEPTNO
EMPLOYEE
EMPLOYEE_NN
EMPNO
EMPLOYEE
EMPLOYEE_PK
JOB
EMPLOYEE
EMPLOYEE_UK
ENAME
EMPLOYEE
Table created.
Table altered.
1 row created.
Table altered.
1 row created.
1 row created.
EMPNO ENAME
---------- ----------
1 PAVAN
1 KUMAR
1 GAYATRI
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.
EMPNO ENAME
---------- ----------
1 PAVAN
1 KUMAR
1 GAYATRI
2 rows deleted.
Table altered.
EMPNO ENAME
---------- ----------
1 PAVAN
DROPING CONSTRAINTS:
Table created.
Table created.
Table altered.
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.
Table altered.
Table altered.
1 row deleted.
11 rows selected.
Table altered.
Table altered.
1 row deleted.
40 OPERATIONS BOSTON
11 rows selected.
HERE ALL THE INFO OF 20 DEPARTMENT WAS NOT DELETED ONLY DEPTNO 20 WAS
SET TO NULL.
Table created.
Table altered.
Table altered.
DEPTNO NUMBER(2)
ADDRESS VARCHAR2(10)
ADDRESS1 VARCHAR2(10)
ADDRESS2 VARCHAR2(10)
Table altered.
DROPING COLUMNS:
Table altered.
Table altered.
Table altered.
GROUP FUNCTIONS:
DUAL TABLE:
JOB
---------
CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK
14 rows selected.
JOB
---------
ANALYST
CLERK
MANAGER
PRESIDENT
SALESMAN
COUNT(*)
----------
14
COUNT(DISTINCT(JOB))
--------------------
SYSDATE
---------
19-JUL-05
SYSTIMESTAMP
---------------------------------------------------------------------------
19-JUL-05 12.08.11.000001 AM +05:30
USER
------------------------------
SCOTT
UID
----------
66
D
-
X
23*23
----------
529
2*2
----------
4
GROUP FUNCTIONS:
DEFAULT JUSTIFICATION:
ARITHMETIC EXPRESSIONS:
+ ADD
-- SUBTRACT
* MULTIPLY
/ DIVIDE
14 rows selected.
OPERATOR PRECEDENCE:
* / + -
NULL FUNCTION:
13 rows selected.
ANNAUAL SALARY:
SAL SAL+100*12
---------- ----------
800 2000
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.
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.
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.
14 rows selected.
14 rows selected.
14 rows selected.
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:
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.
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.
HERE WE HAD GIVEN GAP FOR COLUMN ALIASING. THAT IS WRONG. FOR CORRECT
OUTPUT
WE HAVE TO GIVE “ “ FOR COLUMN ALIASING.
14 rows selected.
CONCATINATION OPERATOR:
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.
14 rows selected.
ENAME||'HASA'||JOB
--------------------------
SMITH HAS A CLERK
ALLEN HAS A SALESMAN
WARD HAS A SALESMAN
JONES HAS A MANAGER
MARTIN 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.
SQL> /
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
SELECT ENAME,SAL FROM EMP WHERE SAL BETWEEN 1000 AND 1500;
12 rows selected.
12 rows selected.
14 rows selected.
SQL> SELECT * FROM EMP WHERE SAL BETWEEN 1000 AND 2000;
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:
NOT IN OPERATOR:
IF YOU DON’T WANT TO SEE THOSE EMPLOYEES INFO,YOU KEEP THEM IN NOT IN
CLAUSE.
11 rows selected.
AND OPERATOR:
IN ADD OPERATOR IF BOTH CONDITIONS ARE TRUE THEN ONLY RESULT COMES.
HERE WE GET INFO ABOUT CLERKS AND WHOSE SALARY >=THAN 1100;
HERE WE GET INFO ABOUT CLERKS AND ALL THE INFO ABOUT EMPLOYEES WHOSE
SALARY >=1100.
14 rows selected.
OR TRUE FALSE
TRUE TRUE TRUE
FALSE TRUE FALSE
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.
14 rows selected.
14 rows selected.
14 rows selected.
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.
CARTESIAN PRODUCT
EQUI-JOIN
NON-EQUI JOIN
OUTER-JOIN.
SELF-JOIN.
CARTESIAN PRODUCT:
HERE FIRST TABLE EMP ROWS COMPLETELY MULTIPLIED BY FIRST ROW IN SECOND
TABLE DEPT AND SO ON
56 rows selected.
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.
TO SLOVE THAT WE HAVE KEEP DEPT OR EMP BEFORE DEPTNO,BCOZ BOTH TABLES
HAVE DEPTNO COLUMN.
14 rows selected.
SELECT EMPNO,ENAME,SAL,E.DEPTNO,DNAME,LOC
WHERE E.DEPTNO=D.DEPTNO;
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
SELECT ENAME,SAL,GRADE
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(+).
SELECT E.EMPNO,E.ENAME,D.DEPTNO,D.DNAME
SELECT E.EMPNO,E.ENAME,E.DEPTNO,D.DNAME
15 rows selected.
15 rows selected.
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
Table created.
Table created.
HERE BOTH THE TABLES HAVE NO RELATION WITH FOREIGN KEY AND PRIMARY
KEY.
1 row created.
1 row created.
SQL> COMMIT;
Commit complete.
17 rows selected.
15 rows selected.
15 rows selected.
UPDATING ROWS:
UPDATE EMP
SET SAL = SAL+100,DEPTNO=10,JOB=’CLERK’;
UPDATE EMP
SET SAL = SAL+100,DEPTNO=10,JOB=’CLERK’;
WHERE <CONDITION>
Table created.
14 rows updated.
3 rows updated.
Table renamed.
DEFAULT:
Table created.
1 row created.
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 row created.
IN THE ABOVE QUERY WHENEVER YOU DON'T GIVE VALUE FOR DEPTNO THERE
DEFAULT VALUE WILL BE TAKEN.
NOW I AM CREATING COMMENTS ON THE TABLE EMP THAT IT SORES ALL THE
EMPLOYEE INFO.
SQL> /
Comment created.
VIEWING COMMENTS:
ALL_TAB_COMMENTS,USER_TAB_COMMENTS ;
TABLE_NAME TABLE_TYPE
------------------------------ -----------
COMMENTS
----------------------------------------------------------------------------------------------------
EMP TABLE
IT STORES EMPLOYEE INFO
DROP COMMENTS:
Comment created.
SQL> /
TABLE_NAME TABLE_TYPE
------------------------------ -----------
COMMENTS
----------------------------------------------------------------------------------------------------
EMP TABLE
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.
Table created.
Table created.
Table altered.
Table altered.
Table altered.
NOW BOTH PRIMARY KEY FOR DEPT1 AND FOREIGN KEY FOR EMP1 BOTH ARE
DELETED.
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.
SQL> /
JOB
---------
ANALYST
CLERK
MANAGER
PRESIDENT
JOB
---------
MANAGER
PRESIDENT
CLERK
CLERK
MANAGER
ANALYST
CLERK
ANALYST
8 rows selected.
SQL> /
JOB
---------
CLERK
MANAGER
WITH IN OPERATOR:
JOB
---------
PRESIDENT
JOB
---------
PRESIDENT
JOB
---------
PRESIDENT
1* SELECT JOB FROM EMP WHERE DEPTNO IN (10,20) – THIS IS UNION ALL
SQL> /
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
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.
DEPTNO SUM(SAL)
---------- ----------
10 8750
20 10875
30 9400
DEPTNO SUM(SAL)
---------- ----------
10 8750
20 10875
30 9400
DEPTNO COUNT(ENAME)
---------- ------------
10 3
20 5
30 6
DEPTNO AVG(SAL)
---------- ----------
10 2916.66667
20 2175
30 1566.66667
DEPTNO SUM(SAL)
---------- ----------
10 8750
20 10875
30 9400
SELECT AVG(SAL)
FROM EMP
GROUP BY DEPTNO;
AVG(SAL)
----------
2916.66667
2175
1566.66667
SELECT DEPTNO,AVG(SAL)
FROM EMP
GROUP BY DEPTNO
ORDER BY AVG(SAL);
DEPTNO AVG(SAL)
---------- ----------
30 1566.66667
20 2175
10 2916.66667
SELECT DEPTNO,JOB,SUM(SAL)
FROM EMP
GROUP BY DEPTNO,JOB;
9 rows selected.
SELECT DEPTNO,AVG(SAL)
FROM EMP
WHERE DEPTNO=10
GROUP BY DEPTNO
HAVING AVG(SAL) >2000;
no rows selected
DEPTNO SUM(SAL)
---------- ----------
10 8750
SELECT DEPTNO,AVG(SAL)
FROM EMP
WHERE AVG(SAL) >2000
GROUP BY DEPTNO;
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.
SELECT DEPTNO,AVG(SAL)
FROM EMP
GROUP BY DEPTNO
HAVING AVG(SAL) >2000;
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.
MAX(AVG(SAL))
-------------
2916.66667
CHARACTER FUNCTIONS:
LOWER
-----
pavan
UPPER
-----
PAVAN
INITC
-----
Pavan
CONCAT(
-------
GOODBOY
SUB
---
PAV
LENGTH('PAVAN')
---------------
5
INSTR('PAVAN','V')
------------------
3
DATE FUNCTIONS:
MONTHS_BETWEEN('01-SEP-95','11-JAN-94')
---------------------------------------
19.6774194
MONTHS_BETWEEN('11-JAN-94','01-SEP-95')
---------------------------------------
-19.677419
ADD_MONTH
---------
11-JUL-94
NEXT_DAY(
---------
06-SEP-96
LAST_DAY(
---------
30-SEP-96
SPOOL C:\PAVAN : IT IS USED FOR SAVING OUTPUT OF THE QUERY IN THE FILE.THE
FILE
EXTENSION IS .LST.
14 rows selected.
SQL> @PAVAN
IT EXECUTES THE QUERY THAT IS THERE IN FILE PAVAN.
SQL SQL*PLUS
IS A LANGUAGE FOR COMMUNICATING WITH RECOGNIZES SQL STATEMENTS AND SENDS
THE ORACLE SERVER TO ACCESS DATA. THEM TO THE SERVER.
IS BASED ON AMERICAN NATIONAL IS THE ORACLE PROPRIETARY INTERFACE FOR
STANDARDS INSTITUTE. EXECUTING SQL STATEMENTS.
MANIPULATES DATA AND TABLE DOES NOT ALLOWMANIPULATION OF VALUES
DEFINITIONS IN THE DATABASE. IN THE DATABASE.
OPERATORS PRECEDENCE:
14 rows selected.
JAMES 30 950
WARD 30 1250
MARTIN 30 1250
TURNER 30 1500
ALLEN 30 1600
BLAKE 30 2850
14 rows selected.
14 rows selected.
SET VERIFY ON
SQL> /
Enter value for employee_number: 7369
SQL> /
Enter value for employee_number: 7566
SQL> /
WHERE CONDITION
ORDER BY
COLUMN EXPRESSION
TABLE
SELECT EMPNO,ENAME,&COLUMN_NAME
FROM &TABLE_NAME
WHERE &WHERE_CONDITIN
ORDER BY & COL_NAME
14 rows selected.
6 rows selected.
Table created.
1 row created.
SQL STATEMENTS:
SYNONYMS:
Synonym created.
Synonym created.
SUBQUERIES:
SINGLE-ROW SUBQUERIES:
SELECT ENAME,JOB,SAL
FROM EMP
WHERE SAL = (SELECT MIN(SAL) FROM EMP)
SELECT ENAME,JOB,SAL
FROM EMP
WHERE SAL = (SELECT MAX(SAL) FROM EMP)
MAX(SAL)
----------
5000
SQL> SELECT * FROM EMP WHERE SAL = (SELECT MAX(SAL) FROM EMP);
SQL> /
SQL> SELECT * FROM EMP WHERE JOB=(SELECT JOB FROM EMP WHERE
ENAME='SMYTHE');
no rows selected
MULTI-ROW SUBQURIES:
WHICH DISPLAYS ALL THE ROWS OF EMP, THAT IS IT IS SAME AS SELECT * FROM
EMP;
WHICH DISPLAYS ALL THE ROWS OF EMP. THAT IS ‘= ANY’ MEANS ‘IN’
14 rows selected.
14 rows selected.
14 rows selected.
< ANY MEANS LESS THAN THE MAXIMUM.HERE MAX SALARY IS 5000.
EXCEPT THAT EVERY SAL DISPALYED.
13 rows selected.
13 rows selected.
2ND HIGHEST:
3RD HIGHEST:
4TH HIGHEST:
5TH HIGHEST:
AND SO ON……………………………………
2ND HIGHEST:
SQL> /
3RD HIGHEST:
4TH HIGHEST:
5TH HIGHEST:
> ANY MEANS MORE THAN THE MINIMUM.HERE MIN SALARY IS 800. EXCEPT THAT
EVERY SAL DISPALYED
13 rows selected.
13 rows selected.
2ND LEAST:
3RD LEAST:
SQL> /
4TH LEAST:
AND SO ON………………………………….
<ALL OPERATOR:
no rows selected
13 rows selected.
2ND HIGHEST:
3RD HIGHEST:
4TH HIGHEST:
AND SO ON…………………
>ALL OPERATOR:
no rows selected
13 rows selected.
2ND LEAST:
3RD LEAST:
4TH LEAST:
AND SO ON…………….
14 rows selected.
14 rows selected.
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.
ORACLE 9I:
WHEN EVER WE DO EQUI JOIN WE GET COMMON INFO WHICH IS THERE IN TWO
TABLES.
SELECT EMPNO,ENAME,DEPT.DEPTNO,DNAME,LOC
FROM EMP,DEPT
WHERE EMP.DEPTNO=DEPT.DEPTNO;
14 rows selected.
ORACLE 9I:
NATURAL JOIN:
THIS IS ALSO EQUI JOIN HERE NO NEED GIVE JOIN CONDITION.
SELECT EMPNO,ENAME,EMP.DEPTNO,DNAME,LOC
ON EMP.DEPTNO=DEPT.DEPTNO ;
14 rows selected.
JOIN-USING:
3 USING(DEPTNO);
WITHOUT ALIASING:
3* USING(DEPTNO)
SQL> /
JOIN – ON:
SELECT EMPNO,ENAME,EMP.DEPTNO,DNAME,LOC
FROM EMP JOIN DEPT
ON EMP.DEPTNO=DEPT.DEPTNO
SQL> /
SELECT EMPNO,ENAME,EMP.DEPTNO,DNAME,LOC
ON EMP.DEPTNO=DEPT.DEPTNO;
15 rows selected.
SELECT EMPNO,ENAME,DEPT.DEPTNO,DNAME,LOC
ON EMP.DEPTNO=DEPT.DEPTNO;
40 OPERATIONS BOSTON
15 rows selected.
SELECT EMPNO,ENAME,EMP2.DEPTNO,DNAME,LOC
FROM EMP2,DEPT
WHERE EMP2.DEPTNO(+)=DEPT.DEPTNO;
OPERATIONS BOSTON
15 rows selected.
1 SELECT EMPNO,ENAME,DEPT.DEPTNO,DNAME,LOC
2 FROM EMP2,DEPT
3* WHERE EMP2.DEPTNO(+)=DEPT.DEPTNO;
40 OPERATIONS BOSTON
15 rows selected.
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
ON EMP.DEPTNO=DEPT.DEPTNO;
14 rows selected.
HERE WE CREATE EMP2 TABLE AND INSERT 50,60,70 VALUES IN TO THE TABLE.
Table created.
14 rows selected.
1 row created.
1 row created.
1 row created.
SELECT EMPNO,ENAME,EMP2.DEPTNO,DNAME,LOC
ON EMP2.DEPTNO=DEPT.DEPTNO;
1 SELECT EMPNO,ENAME,EMP2.DEPTNO,DNAME,LOC
2 FROM EMP2,DEPT
3* WHERE EMP2.DEPTNO=DEPT.DEPTNO(+)
1 PAVAN 50
2 KUMAR 60
3 GAYATRI 70
17 rows selected.
SELECT EMPNO,ENAME,EMP2.DEPTNO,DNAME,LOC
ON EMP2.DEPTNO=DEPT.DEPTNO;
OPERATIONS BOSTON
18 rows selected.
SELECT EMPNO,ENAME,EMP2.DEPTNO,DEPT.DEPTNO,DNAME,LOC
FROM EMP2 FULL OUTER JOIN DEPT
ON EMP2.DEPTNO=DEPT.DEPTNO
18 rows selected.
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(+);
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.
2 FROM EMP2,DEPT
3 WHERE EMP2.DEPTNO(+)=DEPT.DEPTNO
4 UNION
6 FROM EMP2,DEPT
7 WHERE EMP2.DEPTNO=DEPT.DEPTNO(+)
40 OPERATIONS BOSTON
18 rows selected.
SELF JOIN:
SQL> /
JOIN -ON
SEQUENCES:
WHAT IS A SEQUENCE?
A SEQUENCE:
TABLES.)
SEQUENCE-GENERATING ROUTINE).
CACHED IN MEMORY.
[INCREMENT BY N]
[START WITH N]
[{MAXVALUE N | NOMAXVALUE}]
[{MINVALUE N | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE N | NOCACHE}];
IN SYNTAX:
CREATION OF SEQUENCE:
2 INCREMENT BY 10
3 START WITH 10
4 MAXVALUE 100
5 NOCACHE
6 NOCYCLE;
Sequence created.
DEPT_DUP_SEQ 1 100 10 NN 0 10
1 row created.
1 row created.
1 row created.
CURRVAL
----------
30
VIEWING SEQUENCES IN DATABASE:
NEXTVAL
----------
40
1 row created.
HERE WE ARE SUPPOSED TO GET 40 BUT WE GOT 50. THAT MEANS WHEN WE SAW
NEXT AVALIABLE
NUMBER 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.
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
ALTERING A SEQUENCE:
Sequence altered.
NEXTVAL
----------
110
Sequence altered.
NEXTVAL
----------
120
NEXTVAL
----------
130
SQL> /
NEXTVAL
----------
140
SQL> /
NEXTVAL
----------
150
SQL> /
NEXTVAL
----------
1
SQL> /
NEXTVAL
----------
11
Sequence created.
2 /
NEXTVAL
----------
100
DROPING SEQUENCES:
ORACLE FUNCTIONS:
ABS(-20)
----------
20
POWER(3,2)
----------
ROUND(15.19,1)
--------------
15.2
SQRT(25)
----------
5
YEAR MONTH
---------- ----------
2004 7
MOD1 MOD2
---------- ----------
1 1.7
FLOOR(24.8) FLOOR(13.15)
----------- ------------
24 13
CEIL(24.8) CEIL(13.15)
---------- -----------
25 14
TRANSLATE
---------
7PAVAV5A9
LENGTH('PAVAN')
---------------
5
LTRI
----
ISHA
RTRI
----
NISH
TRIM(
-----
PAVAN
TRIM(LEAD
---------
HANSELXXX
TRIM(B
------
HANSEL
TRIM(BOTH'
----------
23HANSEL12
LPAD
----------
****PAGE 1
RPAD
----------
SMITHXXXXX
14 rows selected.
14 rows selected.
TO_NUMBER:
TO_NUMBER(SUBSTR('$100',2,3))
-----------------------------
100
TO_CHAR:
TO_CHAR
-------
$1,234
TO_CHAR(SYSDATE,'
-----------------
JULY 28,2005
TO_CHAR(SYSDATE,'MONTHDA
------------------------
JULY THURSDAY ,2005
TO_CHAR(SYSDATE,'MONTHDAYYEAR')
--------------------------------------------------------------
JULY THURSDAY TWO THOUSAND FIVE
TO_CHAR(
--------
07 28 05
TO_CHAR(
--------
28 07 05
TO_DATE:
TO_DATE('
---------
06-JUL-02
ENAME 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.
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.
ENAME TO_CHAR(HIREDATE,'DDS
---------- ---------------------
SMITH SEVENTEENTH-DEC-80
ALLEN 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.
TO_CHAR(TO_DATE(34654,'J'),'JSP')
-------------------------------------------
THIRTY-FOUR THOUSAND SIX HUNDRED FIFTY-FOUR
TO_CHAR(TO_DATE(34654,'J'),'JSP')
-------------------------------------------
Thirty-Four Thousand Six Hundred Fifty-Four
TO_CHAR(TO_DATE(34654,'J'),'JSP')
-------------------------------------------
thirty-four thousand six hundred fifty-four
EMPLOYEE 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
JOB: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:
10 rows selected.
ROLL UP:
1 SELECT DEPTNO,JOB,SUM(SAL)
2 FROM EMP
3* GROUP BY ROLLUP(DEPTNO,JOB)
4 /
20 MANAGER 2975
20 10875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30 9400
29025
15 rows selected.
GROUP BY DEPTNO,JOB.
GROUP BY DEPTNO.
GROUP BY ().
9 rows selected.
SQL> /
DEPTNO SUM(SAL)
---------- ----------
10 8750
20 10875
30 9400
SUM(SAL)
----------
29025
CUBE:
1 SELECT DEPTNO,JOB,SUM(SAL)
2 FROM EMP
3* GROUP BY CUBE(DEPTNO,JOB)
SQL> /
30 SALESMAN 5600
30 9400
ANALYST 6000
CLERK 4150
MANAGER 8275
PRESIDENT 5000
SALESMAN 5600
29025
21 rows selected.
GROUP BY DEPTNO,JOB.
GROUP BY DEPTNO.
GROUP BY JOB.
GROUP BY ().
9 rows selected.
3* GROUP BY (DEPTNO)
SQL> /
DEPTNO SUM(SAL)
---------- ----------
10 8750
20 10875
30 9400
SUM(SAL)
----------
29025
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 /
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
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> /
21 rows selected.
GROUPING SETS:
19 rows selected.
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.
GROUP BY DEPT,JOB.
GROUP BY JOB,MGR.
1 SELECT DEPTNO,JOB,SUM(SAL)
2 FROM EMP
3* GROUP BY(DEPTNO,JOB)
SQL> /
9 rows selected.
1 SELECT JOB,MGR,SUM(SAL)
2 FROM EMP
3* GROUP BY(JOB,MGR)
SQL> /
8 rows selected.
COMPOSITE COLUMNS:
14 rows selected.
GROUP BY DEPTNO,JOB,MGR.
GROUP BY DEPTNO.
GROUP BY.
1 SELECT DEPTNO,JOB,MGR,SUM(SAL)
2 FROM EMP
3* GROUP BY DEPTNO,JOB,MGR
SQL> /
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
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> /
31 rows selected.
GROUP BY DEPTNO,JOB,MGR.
GROUP BY DEPTNO,MGR.
GROUP BY DEPTNO,JOB.
GROUP BY DEPTNO.
1 SELECT DEPTNO,JOB,MGR,SUM(SAL)
2 FROM EMP
3* GROUP BY DEPTNO,JOB,MGR
SQL> /
10 rows selected.
1 SELECT DEPTNO,MGR,SUM(SAL)
2 FROM EMP
3* GROUP BY DEPTNO,MGR
4 /
9 rows selected.
1 SELECT DEPTNO,JOB,SUM(SAL)
2 FROM EMP
3* GROUP BY DEPTNO,JOB
SQL> /
9 rows selected.
1 SELECT DEPTNO,SUM(SAL)
2 FROM EMP
3* GROUP BY DEPTNO
SQL> /
DEPTNO SUM(SAL)
---------- ----------
10 8750
20 10875
30 9400
“TOP_N “ ANALYSIS:
3 /
4
RN ENAME
---------- ----------
4 JONES
5 MARTIN
6 BLAKE
7 CLARK
RN ENAME
---------- ----------
4 JONES
5 MARTIN
6 BLAKE
7 CLARK RETRIVING EVEN AND ODD
NUMBER OF ROWS:
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.
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.
DROPING COLUMN:
Table created.
Table altered.
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
Table altered.
SOUNDEX:
Table created.
1 row created.
1 row created.
3* ('DIPU')
SQL> /
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
NAME
----------
NEETA
MITA
DIPU
DEEPU
DIPA
ANIL
SUNIL
7 rows selected.
NAME
----------
DIPU
DEEPU
DIPA
7 rows selected.
Table created.
1 row created.
2 VALUES
3* (0,'KUMAR')
SQL> /
1 row created.
1 row created.
1 row created.
1 UPDATE CUSTOMERS1
2* SET CUST_NO = ROWNUM
SQL> /
4 rows updated.
CUST_NO NAME
---------- ----------
1 PAVAN
2 KUMAR
3 GAYATRI
4 SRISHA
Sequence created.
4 rows updated.
CUST_NO NAME
---------- ----------
10 PAVAN
11 KUMAR
12 GAYATRI
13 SRISHA
CONDITIONAL EXPRESSIONS:
CASE EXPRESSION.
DECODE FUNCTION.
CASE:
1 SELECT EMPNO,ENAME,SAL,
6* FROM EMP
SQL> /
14 rows selected.
DECODE:
1 SELECT EMPNO,ENAME,SAL,
5 SAL ) "REVISED_SALARY"
6* FROM EMP
7 /
14 rows selected.
VIEWS:
WHAT IS VIEW?
A VIEW CONTAINS NO DATA OF ITS OWN BUT IS LIKE A WINDOW THROUGH WHICH
DATA FROM TABLES
ADVANTAGES OF VIEWS:
VIEWS RESTRICT ACCESS TO THE DATA BECAUSE THE VIEW CAN DISPLAY
SELECTIVE COLUMNS FROM THE TABLES.
[(ALIAS[,ALIAS…..)]
AS SUBQUERY
IN THE SYNTAX:
WITH CHECK OPTION SPECIFIES THAT ONLY ROWS ACCESSIBLE TO THE VIEW
CAN BE INSERTED OR UPDATED.
THE SUBQUERY THAT DEFINES THE VIEW CANNOT CONTAIN AN ORDER BY CLAUSE.
THE ORDER BY
CLAUSE IS SPECIFIED WHEN YOU RETRIVE THE DATA FROM THE VIEW.
Table created.
View created.
1 row created.
VIEW_NAME
------------------------------
TEXT
--------------------------------------------------------------------------------
EMPVU10
SELECT "EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","DEPTNO" FROM
EMP_DUP
ORACLE SERVER
USER_VIEWS.
IT SEES THE SELECT
I Soft Solutions ,Bang-54. STRUCTURED QUERY
STATEMENT LANGUAGE
HERE.
ORACLE
183
SQL * PLUS:
BASE TABLE.
IT EXECUTES QUERY
ON THIS TABLE AND
SENDS OUTPUT TO
SQL*PLUS.
View created.
VIEW_NAME
------------------------------
TEXT
--------------------------------------------------------------------------------
EMPVU1_10
SELECT EMPNO,ENAME FROM EMP_DUP
WHERE DEPTNO=10
4 rows updated.
2 rows deleted.
MODIFYING VIEW:
View created.
View created.
4 WHERE DEPTNO=30;
View created.
GROUP FUNCTIONS.
A GROUP BY CLAUSE.
GROUP FUNCTIONS.
A GROUP BY CLAUSE.
GROUP FUNCTIONS.
A GROUP BY CLAUSE.
NOT NULL COLUMNS IN THE BASE TABLES THAT ARE NOT SELECTED BY THE
VIEW.
THE WITH CHECK OPTION CLAUSE SPECIFIES THAT INSERTS AND UPDATES
PERFORMED
THROUGH THE VIEW CANNOT CREATE ROWS WHICH THE VIEW CANNOT SELECT.
Table created.
View created.
5 rows updated.
no rows selected
Table dropped.
Table created.
View dropped.
View created.
CONSTRAINT_NAME C
------------------------------ -
EMP_DUPVU20_VIEWCHECK V
View created.
ERROR at line 1:
ORA-01733: virtual column not allowed here
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:
View created.
MINSAL NUMBER
MAXSAL NUMBER
AVGSAL NUMBER
View created.
14 rows selected.
DROPING VIEW:
View dropped.
GROUP BY:
10 rows selected.
ROLL UP:
1 SELECT DEPTNO,JOB,SUM(SAL)
2 FROM EMP
3* GROUP BY ROLLUP(DEPTNO,JOB)
4 /
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.
GROUP BY DEPTNO,JOB.
GROUP BY DEPTNO.
GROUP BY ().
9 rows selected.
SQL> /
DEPTNO SUM(SAL)
---------- ----------
10 8750
20 10875
30 9400
SUM(SAL)
----------
29025
CUBE:
1 SELECT DEPTNO,JOB,SUM(SAL)
2 FROM EMP
3* GROUP BY CUBE(DEPTNO,JOB)
SQL> /
29025
21 rows selected.
GROUP BY DEPTNO,JOB.
GROUP BY DEPTNO.
GROUP BY JOB.
GROUP BY ().
9 rows selected.
DEPTNO SUM(SAL)
---------- ----------
10 8750
20 10875
30 9400
4 /
SUM(SAL)
----------
29025
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 /
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> /
21 rows selected.
GROUPING SETS:
20 CLERK 950
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 1400
19 rows selected.
17 rows selected.
GROUP BY DEPT,JOB.
GROUP BY JOB,MGR.
1 SELECT DEPTNO,JOB,SUM(SAL)
2 FROM EMP
3* GROUP BY(DEPTNO,JOB)
SQL> /
9 rows selected.
1 SELECT JOB,MGR,SUM(SAL)
2 FROM EMP
3* GROUP BY(JOB,MGR)
SQL> /
8 rows selected.
COMPOSITE COLUMNS:
14 rows selected.
GROUP BY DEPTNO,JOB,MGR.
GROUP BY DEPTNO.
GROUP BY.
1 SELECT DEPTNO,JOB,MGR,SUM(SAL)
2 FROM EMP
3* GROUP BY DEPTNO,JOB,MGR
SQL> /
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
10 MANAGER 7839 2450
22 rows selected.
CONCATENATED GROUPING:
1 SELECT DEPTNO,JOB,MGR,SUM(SAL)
2 FROM EMP
3* GROUP BY DEPTNO,ROLLUP(JOB),CUBE(MGR)
SQL> /
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.
GROUP BY DEPTNO,JOB,MGR.
GROUP BY DEPTNO,MGR.
GROUP BY DEPTNO,JOB.
GROUP BY DEPTNO.
1 SELECT DEPTNO,JOB,MGR,SUM(SAL)
2 FROM EMP
3* GROUP BY DEPTNO,JOB,MGR
SQL> /
10 rows selected.
1 SELECT DEPTNO,MGR,SUM(SAL)
2 FROM EMP
3* GROUP BY DEPTNO,MGR
4 /
9 rows selected.
1 SELECT DEPTNO,JOB,SUM(SAL)
2 FROM EMP
3* GROUP BY DEPTNO,JOB
SQL> /
9 rows selected.
1 SELECT DEPTNO,SUM(SAL)
2 FROM EMP
3* GROUP BY DEPTNO
SQL> /
DEPTNO SUM(SAL)
---------- ----------
10 8750
20 10875
30 9400
UNCONDITIONAL INSERT.
CONDITIONAL FIRST.
PIVOTING INSERT.
Table created.
Table created.
28 rows created.
14 rows selected.
14 rows selected.
14 rows deleted.
14 rows deleted.
10 rows created.
5 rows deleted.
5 rows deleted.
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)
6* SELECT EMPNO,HIREDATE,SAL,MGR,DEPTNO FROM EMP
7 /
17 rows created.
6 rows selected.
11 rows selected.
6 rows deleted.
11 rows deleted.
14 rows created.
13 rows selected.
Table created.
Table created.
Table created.
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 EMP
SQL> /
14 rows created.
DEPTNOSAL
---------- ----------
20 2975
30 2850
10 2450
20 3000
10 5000
20 3000
6 rows selected.
DEPTNO HIREDATE
---------- ---------
30 20-FEB-81
30 22-FEB-81
30 28-SEP-81
30 08-SEP-81
30 03-DEC-81
DEPTNO HIREDATE
---------- ---------
20 23-MAY-87
DEPTNO HIREDATE
---------- ---------
20 17-DEC-80
10 23-JAN-82
Table created.
Table created.
4* SAL NUMBER)
5 /
Table created.
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 EMP
SQL> /
14 rows created.
6 rows selected.
6 rows deleted.
2 rows deleted.
5 rows deleted.
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
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.
no rows selected
10 rows selected.
20 23-MAY-87 1100
DEPTNO HIREDATE
---------- ---------
20 17-DEC-80
10 23-JAN-82
PIVOTING INSERT:
Table created.
1 row created.
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_DATA
SQL> /
5 rows created.
SCALAR SUBQUERIES:
A SCALAR THAT RETURNS EXACTLY ONE COLUMN VALUE FROM ONE ROW
IS REFERED AS A SCALAR SUB QUERY.
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> /
14 rows selected.
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:
SCOTT 3000 20
KING 5000 10
FORD 3000 20
6 rows selected.
11 rows selected.
EXISTS:
6 rows selected.
1 SELECT EMPNO,ENAME,JOB,DEPTNO
2 FROM EMP
3 WHERE EMPNO IN (SELECT MGR FROM EMP
4* WHERE MGR IS NOT NULL)
SQL> /
6 rows selected.
NOT EXISTS:
DEPTNO DNAME
---------- --------------
40 OPERATIONS
DEPTNO DNAME
---------- --------------
40 OPERATIONS
1 INSERT INTO
2 (SELECT EMPNO,ENAME,JOB,DEPTNO FROM EMP)
3 VALUES
4* (100,'PAVAN','MANAGER',10)
SQL> /
1 row created.
1 INSERT INTO
2 (SELECT EMPNO,ENAME,JOB,DEPTNO
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:
Table created.
1 row created.
1 row created.
2 rows updated.
INTRODUCTION TO PL/SQL:
FOR EXAMPLE :
END IF;
END LOOP;
ANONYMOUS BLOCK
NAMED BLOCK.
NAMED BLOCKS ARE BLOCKS THAT HAVE NAME ASSOCIATED WITH THEM.NAMED
BLOCKS FURTHER CLASSIFIED IN TO 3 TYPES
LABELED BLOCKS.
TRIGGERS.
DECLARE
BEGIN
EXCEPTION
END;
DECLARE
V_HIREDATE DATE;
VARCHAR2(MAX_LEN)
NUMBER(P,S);
DATE
CHAR(MAX_LEN)
LONG
LONG RAW
BOOLEAN
BINARY_INTEGER
PLS_INTEGER
DECLARE
V_JOB VARCHAR2(10);
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.
SQL> 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 END;
11 /
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';
11* END;
SQL> /
SQL> /
30 CHICAGO
<<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';
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
8 FROM EMP
9 WHERE DEPTNO=V_DEPTNO;
10 DBMS_OUTPUT.PUT_LINE(V_SUM_SAL);
11* END;
SQL> /
8750
INSERTING DATA:
BEGIN
END;
UPDATING DATA:
BEGIN
V_SAL_INCREASE EMP.SAL%TYPE:=2000;
BEGIN
UPDATE EMP
END;
DELETING DATA:
DECLARE
BEGIN
WHERE DEPTNO=V_DEPTNO;
END;
CONDITIONAL IF STATEMENTS:
IF BOOLEAN_EXPRESSION1 THEN
SEQUENCE_STATEMENTS;
SEQUENCE_STATEMENTS;
ELSE
SEQUENCE_STATEMENTS;
END IF;
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
7 DBMS_OUTPUT.PUT_LINE(V_JOB);
10 DBMS_OUTPUT.PUT_LINE(V_JOB);
13 DBMS_OUTPUT.PUT_LINE(V_JOB);
15 ELSE
16 DBMS_OUTPUT.PUT_LINE (V_JOB);
18 END IF;
19* END;
20 /
Enter value for employee_number: 7369
CLERK
SQL> /
Enter value for employee_number: 7499
SALESMAN
HIS SALARY INCREASES 20%
PL/SQL procedure successfully completed.
SQL> /
Enter value for employee_number: 7566
MANAGER
HIS SALARY INCREASES 30%
PL/SQL procedure successfully completed.
SQL> /
Enter value for employee_number: 7788
ANALYST
HIS SALARY INCREASES 0%
PL/SQL procedure successfully completed.
CASE STATEMENT:
1 DECLARE
2 V_JOB EMP.JOB%TYPE;
3 BEGIN
6 CASE V_JOB
8 DBMS_OUTPUT.PUT_LINE(V_JOB);
11 DBMS_OUTPUT.PUT_LINE(V_JOB);
14 DBMS_OUTPUT.PUT_LINE(V_JOB);
16 ELSE
17 DBMS_OUTPUT.PUT_LINE(V_JOB);
19 END CASE;
20* END;
SQL> /
Enter value for employee_number: 7369
CLERK
HIS SALARY INCREASES 10%
PL/SQL procedure successfully completed.
SQL> /
Enter value for employee_number: 7466
DECLARE
*
ERROR at line 1:
ORA-01403: no data found
ORA-06512: at line 4
SQL> /
Enter value for employee_number: 7499
SALESMAN
HIS SALARY INCREASES 20%
PL/SQL procedure successfully completed.
SQL> /
Enter value for employee_number: 7566
MANAGER
HIS SALARY INCREASES 30%
SQL> /
Enter value for employee_number: 7788
ANALYST
HIS SALARY INCREASES 0%
PL/SQL procedure successfully completed.
1 DECLARE
2 V_JOB EMP.JOB%TYPE;
3 BEGIN
6 CASE V_JOB
8 DBMS_OUTPUT.PUT_LINE(V_JOB);
11 DBMS_OUTPUT.PUT_LINE(V_JOB);
14 DBMS_OUTPUT.PUT_LINE(V_JOB);
16 END CASE;
17* END;
SQL> /
Enter value for employee_number: 7788
DECLARE
*
ERROR at line 1:
SQL> /
Enter value for employee_number: 7369
CLERK
HIS SALARY INCREASES 10%
PL/SQL procedure successfully completed.
1 DECLARE
2 V_JOB EMP.JOB%TYPE;
3 BEGIN
6 <<MYCASE>>
7 CASE V_JOB
9 DBMS_OUTPUT.PUT_LINE(V_JOB);
12 DBMS_OUTPUT.PUT_LINE(V_JOB);
15 DBMS_OUTPUT.PUT_LINE(V_JOB);
18* END;
SQL> /
Enter value for employee_number: 7369
CLERK
1 DECLARE
2 V_JOB EMP.JOB%TYPE;
3 BEGIN
6 CASE
8 DBMS_OUTPUT.PUT_LINE(V_JOB);
11 DBMS_OUTPUT.PUT_LINE(V_JOB);
14 DBMS_OUTPUT.PUT_LINE(V_JOB);
16 ELSE
17 DBMS_OUTPUT.PUT_LINE(V_JOB);
19 END CASE ;
20* END;
21 /
Enter value for employee_number: 7369
CLERK
HIS SALARY INCREASES 10%
SQL> /
Enter value for employee_number: 7788
ANALYST
HIS SALARY INCREASES 0%
PL/SQL procedure successfully completed.
LOGIC TABLES:
AND:
AND TRUE FALSE NULL
TRUE TRUE FALSE NULL
FALSE FALSE FALSE FALSE
NULL NULL FALSE NULL
OR:
OR TRUE FALSE NULL
TRUE TRUE TRUE TRUE
FALSE TRUE FALSE NULL
NULL TRUE NULL NULL
NOT:
NOT
TRUE FALSE
FALSE TRUE
NULL NULL
ITERATIVECONTROL:
LOOP STATEMENTS
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;
8 EXIT;
9 END IF;
10 END LOOP;
11* END;
SQL> /
0
1
2
3
4
5
6
7
8
9
10
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;
8 END LOOP;
9* END;
SQL> /
0
1
2
3
4
5
6
7
8
9
10
FOR LOOP:
1 BEGIN
2 FOR I IN 1 .. 10 LOOP
3 DBMS_OUTPUT.PUT_LINE(I);
4 END LOOP;
5* END;
SQL> /
1
2
3
4
5
6
7
8
9
10
SQL>
1 BEGIN
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;
4 BEGIN
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:
IMPLICIT CURSORS.
EXPLICIT CURSORS.
THE ORACLE SERVER USES IMPLICIT CIRSORS TO PARSE AND EXECUTE YOUR SQL
STATEMENTS.
USING IMPLICIT CURSOR ATTRIBUTES,YOU CAN TEST THE OUTCOME OF YOUR SQL
STATEMENTS.
SQL> DECLARE
3 BEGIN
5 WHERE DEPTNO=V_DEPTNO;
7 END;
8 /
ROW_DELETED
--------------------------------
3ROWS DELETED
SQL> BEGIN
3 WHERE DEPTNO=10;
4 IF SQL%FOUND THEN
6 END IF;
7 IF SQL%NOTFOUND THEN
9 END IF;
10 END;
11 /
DEPARTMENT SUCCESSFULLY DELTED
PL/SQL procedure successfully completed.
1 BEGIN
3 WHERE DEPTNO=10;
4 IF SQL%FOUND THEN
6 END IF;
7 IF SQL%NOTFOUND THEN
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
5 WHERE DEPTNO=10;
6 ROWS_DELETED:=SQL%ROWCOUNT;
8* END;
SQL> /
NO OF ROWS DELETED: 3
PL/SQL procedure successfully completed.
THE FOUR PL/SQL STEPS NECESSARY FOR EXPLICIT CURSOR PROCESSING ARE AS
FOLLOWS:
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
7 WHERE EMPNO=&EMPLOYEE_NO;
9* END;
SQL> /
Enter value for employee_no: 7369
SMITH CLERK 800
PL/SQL procedure successfully completed.
1 DECLARE
2 V_ENAME EMP.ENAME%TYPE;
3 V_JOB EMP.JOB%TYPE;
4 V_SAL EMP.SAL%TYPE;
5 BEGIN
7 WHERE DEPTNO=&DEPARTMENT_NO;
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
1 DECLARE
3 WHERE DEPTNO=&DEPARTMENT_NO;
4 V_ENAME EMP.ENAME%TYPE;
5 V_JOB EMP.JOB%TYPE;
6 V_SAL EMP.SAL%TYPE;
7 BEGIN
8 OPEN C;
9 LOOP
13 END LOOP;
14* END;
SQL> /
Enter value for department_no: 10
CLARK MANAGER 2450
KING PRESIDENT 5000
MILLER CLERK 1300
PL/SQL procedure successfully completed.
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);
8 BEGIN
9 OPEN EMP_CURSOR;
10 LOOP
14 END LOOP;
15 V_NO_ROWS := EMP_CURSOR%ROWCOUNT;
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.
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);
8 BEGIN
9 OPEN EMP_CURSOR;
10 IF EMP_CURSOR%ISOPEN THEN
11 LOOP
15 END LOOP;
16 V_NO_ROWS := EMP_CURSOR%ROWCOUNT;
18 END IF;
19 CLOSE EMP_CURSOR;
20* END;
SQL> /
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);
8 BEGIN
9 OPEN EMP_CURSOR;
10 IF EMP_CURSOR%ISOPEN THEN
11 LOOP
13 IF EMP_CURSOR%FOUND THEN
15 ELSE
16 EXIT;
17 END IF;
18 END LOOP;
19 V_NO_ROWS := EMP_CURSOR%ROWCOUNT;
21 END IF;
22 CLOSE EMP_CURSOR;
23 END;
24 /
WORKINGWITH%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);
8 BEGIN
9 OPEN EMP_CURSOR;
10 IF EMP_CURSOR%ISOPEN THEN
11 LOOP
13 IF EMP_CURSOR%NOTFOUND THEN
14 EXIT;
15 ELSE
17 END IF;
18 END LOOP;
19 V_NO_ROWS := EMP_CURSOR%ROWCOUNT;
21 END IF;
22 CLOSE EMP_CURSOR;
23 END;
24 /
NO OF ROWS AFFECTED 3
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);
8 BEGIN
9 OPEN EMP_CURSOR;
10 IF EMP_CURSOR%ISOPEN THEN
15 END LOOP;
16 V_NO_ROWS := EMP_CURSOR%ROWCOUNT;
18 END IF;
19 CLOSE EMP_CURSOR;
20* END;
21 /
NO OF ROWS AFFECTED 3
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);
8 BEGIN
11 V_NO_ROWS :=EMP_CURSOR%ROWCOUNT;
12 END LOOP;
14* END;
15 /
NO OF ROWS AFFECTED 3
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;
9 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);
10* 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 8
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;
10 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);
11 EXCEPTION
12 DBMS_OUTPUT.PUT_LINE('DEPRTMENT NO:'||V_DEPTNO||
'IS NOT PRESENT IN THE EMPTABLE');
14 DBMS_OUTPUT.PUT_LINE('DEPRTMENT NO:'||V_DEPTNO||
'IS RETRIVING MORE THAN ONE ROW');
15* END;
/
16 /
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 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);
10 EXCEPTION
12 DBMS_OUTPUT.PUT_LINE('DEPRTMENT NO:'||V_DEPTNO||
13 'IS RETRIVING MORE THAN ONE ROW');
13* END;
SQL> /
Enter value for department_no: 1
DECLARE
*
ERROR at line 1:
ORA-01403: no data found
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 BEGIN
7 V_DEPTNO := &DEPARTMENT_NO;
9 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);
10 EXCEPTION
12 DBMS_OUTPUT.PUT_LINE('DEPRTMENT NO:'||V_DEPTNO||
13 'IS NOT PRESENT IN THE EMPTABLE');
14 DBMS_OUTPUT.PUT_LINE('DEPRTMENT NO:'||V_DEPTNO||
15 'IS RETRIVING MORE THAN ONE ROW');
15* END;
SQL> /
Table created.
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';
10* END;
SQL> /
ORA-06512: at line 9
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';
10 EXCEPTION
SQL> /
Enter value for department_no: 10
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';
10 EXCEPTION
13* END;
14 /
Enter value for department_no: 10
Enter value for department_name: COMPUTERS & TECHNOLOGY
Enter 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';
10 EXCEPTION
15* END;
16 /
RAISE STATEMENT:
Table created.
1 row created.
SQL> ED
Wrote file afiedt.buf
1 row created.
SQL> ED
Wrote file afiedt.buf
1 row created.
SQL> ED
Wrote 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;
9 WHERE ACC_NO=V_ACCNO;
10 V_WITHDRAWAMT := &WITHDRAWAMT;
12 RAISE MORE_THAN_BAL;
13 ELSE
15 END IF;
16 EXCEPTION
18 DBMS_OUTPUT.PUT_LINE('ATTEMPTED TO WITH
19 DRAW MORE THAN THE CURRENT BALANCE'
20 || ' '|| V_CURRBAL ||' ' || ' FROM THE ACCOUNT NUMBER' || '
21 ' || V_ACCNO);
20* END;
21 /
Enter value for account_no: 1
SQL> /
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;
9 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);
10* END;
11 /
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 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;
11 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);
12 EXCEPTION
15* END;
SQL> /
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;
11 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);
12 EXCEPTION
15* END;
SQL> /
DECLARE
*
ERROR at line 1:
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at line 10
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 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);
10 EXCEPTION
12 DBMS_OUTPUT.PUT_LINE('THE DEPTNO
13 '||V_DEPTNO ||' ' || 'FETCHING MORE THAN ONE ROW');
13* END;
14 /
WHEN OTHERS:
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 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);
10 EXCEPTION
15* END;
SQL> /
SQL> /
SQL> DECLARE
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 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);
12 EXCEPTION
16 V_ERRORCODE:=SQLCODE;
17 V_ERRORTEXT:=SQLERRM;
18 DBMS_OUTPUT.PUT_LINE(V_ERRORCODE || V_ERRORTEXT);
19 END;
20 /
1 DECLARE
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);
8 BEGIN
9 V_DEPTNO := &DEPARTMENT_NO;
11 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);
12 EXCEPTION
16 V_ERRORCODE:=SQLCODE;
17 V_ERRORTEXT:=SQLERRM;
18 DBMS_OUTPUT.PUT_LINE(V_ERRORCODE || V_ERRORTEXT);
19* END;
SQL> /
1 DECLARE
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);
8 BEGIN
9 V_DEPTNO := &DEPARTMENT_NO;
11 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);
12 EXCEPTION
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: 1
100
ORA-01403: no data found
1 DECLARE
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);
8 BEGIN
9 V_DEPTNO := &DEPARTMENT_NO;
11 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);
12 EXCEPTION
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
SQL> DECLARE
2 V_EMPNO NUMBER(10);
3 V_ENAME NUMBER(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_EMPNO := &EMPLOYEE_NO;
11 DBMS_OUTPUT.PUT_LINE(V_EMPNO||V_ENAME||V_SAL);
12 EXCEPTION
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
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;
8 BEGIN
9 V_ACCNO := &ACCOUNT_NO;
11 WHERE ACC_NO=V_ACCNO;
12 V_WITHDRAWAMT := &WITHDRAWAMT;
14 RAISE MORE_THAN_BAL;
15 ELSE
17 END IF;
18 EXCEPTION
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 /
RAISE_APPLICATION_ERROR(ERROR_NUMBER, ERROR_MESSAGE).
1 DECLARE
2 V_SAL NUMBER(10);
3 V_EMPNO NUMBER(10);
4 BEGIN
5 V_EMPNO:=&EMPLOYEE_NO;
7 WHERE EMPNO=V_EMPNO;
10 END IF;
11 DBMS_OUTPUT.PUT_LINE(V_SAL);
12 EXCEPTION
15* END;
SQL> /
SQL> /
800
SQL> /
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;
8 END IF;
10 WHERE EMPNO=V_EMPNO;
11 DBMS_OUTPUT.PUT_LINE(V_SAL);
12 EXCEPTION
13 WHEN NO_DATA_FOUND THEN
15* END;
SQL> /
800
SQL> /
DECLARE
*
ERROR at line 1:
ORA-20001: THERE IS NO DATA FOR THE EMPNO YOU ENTERED
ORA-06512: at line 14
SQL> /
DECLARE
*
ERROR at line 1:
ORA-20000: YOU CANNOT ENTER EMPNO WITH MORE THAN 4 NUMBERS
ORA-06512: at line 7
PARAMETERISED CURSORS:
1 DECLARE
2 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
1 DECLARE
2 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(&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: 10
7782CLARK
7839KING
7934MILLER
SQL> /
Enter value for deptno: 20
7369SMITH
7566JONES
7788SCOTT
7876ADAMS
7902FORD
SQL> /
Enter value for deptno: 30
7499ALLEN
7521WARD
7654MARTIN
7698BLAKE
7844TURNER
7900JAMES
1 DECLARE
2 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;
10 /
Enter value for deptno: 10
7782CLARK
7839KING
7934MILLER
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: 10
7782CLARK
7839KING
7934MILLER
SQL> /
Enter value for deptno: 20
7369SMITH
7566JONES
7788SCOTT
7876ADAMS
7902FORD
SQL> /
Enter value for deptno: 30
7499ALLEN
7521WARD
7654MARTIN
7698BLAKE
7844TURNER
7900JAMES
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
8 DBMS_OUTPUT.PUT_LINE(V_DEPTNO||V_DNAME||V_LOC);
9* END;
10 /
Enter value for deptno: 10
PL/SQL procedure successfully completed.
10ACCOUNTINGNEW YORK
PL/SQL procedure successfully completed.
SQL> /
Enter value for deptno: 20
20RESEARCHDALLAS
SQL> /
Enter value for deptno: 30
30SALESCHICAGO
SQL> /
Enter value for deptno: 40
40OPERATIONSBOSTON
1 DECLARE
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: 10
10ACCOUNTINGNEW YORK
SQL> /
Enter value for deptno: 20
20RESEARCHDALLAS
SQL> /
Enter value for deptno: 30
30SALESCHICAGO
SQL> /
Enter value for deptno: 40
40OPERATIONSBOSTON
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
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;
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
USING %ROWTYPE:
1 DECLARE
1 DECLARE
2 CURSOR C IS SELECT * 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
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
7782CLARKMANAGER783909-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 TABLES:
1 DECLARE
2 TYPE NUMBERTAB IS TABLE OF NUMBER
3 INDEX BY BINARY_INTEGER;
4 V_NUMBERS NUMBERTAB;
5 BEGIN
FOR 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:
12* END;
13 /
10
20
30
40
50
60
70
80
90
100
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;
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
SQL> ED
Wrote file afiedt.buf
1 DECLARE
2 TYPE NUMBERTAB IS TABLE OF NUMBER
3 INDEX BY BINARY_INTEGER;
4 V_NUMBERS NUMBERTAB;
5 BEGIN
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
1 DECLARE
4 V_NUMBERS NUMBERTAB;
5 BEGIN
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
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
10
1
10
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;
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
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;
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
1 DECLARE
4 V_NUMBERS NUMBERTAB;
5 BEGIN
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
1 DECLARE
4 V_NUMBERS NUMBERTAB;
5 BEGIN
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
1 DECLARE
4 V_NUMBERS NUMBERTAB;
5 BEGIN
1 DECLARE
4 V_NUMBERS NUMBERTAB;
5 BEGIN
9 V_NUMBERS.DELETE;
1 DECLARE
4 V_NUMBERS NUMBERTAB;
5 BEGIN
9 V_NUMBERS.DELETE(8);
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
1 DECLARE
4 V_NUMBERS NUMBERTAB;
5 BEGIN
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
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
1 DECLARE
4 V_NUMBERS NUMBERTAB;
5 V_BOOL BOOLEAN;
6 BEGIN
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
1 DECLARE
4 V_NUMBERS NUMBERTAB;
5 V_BOOL BOOLEAN;
6 BEGIN
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: 1
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
SQL> /
Enter value for number: 11
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 NOT EXISITS
1 DECLARE
4 V_CHAR CHARTAB;
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
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
1 DECLARE
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> /
1 DECLARE
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* END;
20 /
10ACCOUNTINGNEW YORK
1 DECLARE
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 /
10ACCOUNTINGNEW YORK
20RESEARCHDALLAS
30SALESCHICAGO
40OPERATIONSBOSTON
STORED PROCEDURES:
Table created.
14 rows selected.
PROCEDURE WITH IN PARAMETER:
2 (V_EMPNO IN EMP_DUP.EMPNO%TYPE)
3 IS
4 BEGIN
5 UPDATE EMP_DUP
8* END;
SQL> /
Procedure created.
14 rows selected.
2 (V_EMPNO IN EMP.EMPNO%TYPE,
7 IS
8 BEGIN
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> /
SMITH80020
G_ENAME
--------------------------------
SMITH
G_SAL
----------
800
G_DEPTNO
----------
20
3 IS
4 BEGIN
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;
7 /
800
1 BEGIN
2 :G_EMPNO_SAL:=7369;
3* END;
SQL> /
G_EMPNO_SAL
-----------
800
Table created.
4 rows deleted.
SQL> COMMIT;
Commit complete.
Sequence created.
4 IS
5 BEGIN
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');
6* END;
SQL> /
Table created.
DECLARING SUBPROGRAMS:
2 (V_EMPNO IN EMP.EMPNO%TYPE)
3 IS
4 PROCEDURE LOG_EXEC
5 IS
6 BEGIN
8 VALUES (USER,SYSDATE);
9 END LOG_EXEC;
10 BEGIN
12 WHERE EMPNO=V_EMPNO;
13 LOG_EXEC;
14 END;
15 /
Procedure created.
no rows selected
SQL> SELECT * FROM EMP_DUP;
14 rows selected.
SQL> BEGIN
2 LEAVE_EMP2(7369);
3 END;
4 /
USERID LOG_DATE
---------- ---------
SCOTT 09-JUN-05
13 rows selected.
2 (V_EMPNO IN EMP.EMPNO%TYPE)
3 IS
4 BEGIN
5 UPDATE EMP_DUP
7 WHERE EMPNO=V_EMPNO;
8 END;
9 /
Procedure created.
14 rows selected.
2 IS
4 BEGIN
5 FOR E IN C
6 LOOP
7 RAISE_SALARY(E.EMPNO);
8 END LOOP;
9 COMMIT;
10* END;
SQL> /
Procedure created.
14 rows selected.
Procedure dropped.
OBJECT_NAME
--------------------------------------------------------------------------------------------------------------------------
------
OBJECT_TYPE
------------------
ADD_DEPT
PROCEDURE
BALAJI
PROCEDURE
BALAJI1
PROCEDURE
BALAJI2
PROCEDURE
LEAVE_EMP2
PROCEDURE
RAISE_SALARY
PROCEDURE
6 rows selected.
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.
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
SELECT ENAME,SAL,DEPTNO INTO V_ENAME,V_SAL,V_DEPTNO
FROM EMP WHERE EMPNO=V_EMPNO;
END;
11 rows selected.
TEXT
--------------------------------------------------------------------------------------------------------------------------
--------
PROCEDURE BALAJI2
7 rows selected.
2 IS
3 BEGIN
5 VALUES
6 (USER,SYSDATE);
7 END;
8 /
POS
---------------------------------------------------------------------------------
TEXT
--------------------------------------------------------------------------------------------------------------------------
--------
4/7
PLS-00103: Encountered the symbol "INTO" when expecting one of the following:
:= . ( @ % ;
7/1
PLS-00103: Encountered the symbol "END"
LINE/COL ERROR
-------- -----------------------------------------------------------------
4/7 PLS-00103: Encountered the symbol "INTO" when expecting one of
the following:
:= . ( @ % ;
STORED FUNCTIONS:
Function created.
CALLING FUNTION:
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;
SQL> /
800
Function created.
14 rows selected.
EMPNO
----------
7839
7788
7902
7566
SAL TAX(SAL)
---------- ----------
5000 400
3000 240
3000 240
2975 238
DROPING A FUNCTION:
Function dropped.
OBJECT_NAME
--------------------------------------------------------------------------------------------------------------------------
------
OBJECT_TYPE
------------------
GET_SAL
FUNCTION
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.
PROCEDURE FUNCTION
IMPROVED PERFORMANCE.
IMPROVED MAINTENANCE.
TRIGGERS:
CREATING TRIGGERS:
TRIGGER TIMING:
TRIGGER COMPONENTS:
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.
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.
FIRING SEQUENCE:
DML STATEMENT:
TRIGGERING ACTION:
UPDATE EMP
SET SAL = SAL*1.1
WHERE DEPTNO=30;
7788 SMITH 30
BEFORE ROW TRIGGER
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.
3 BEGIN
4 IF (TO_CHAR(SYSDATE,'DY') IN ('SAT','SUN')) OR
8 END IF;
9 END;
10 /
Trigger created.
1 row created.
3 BEGIN
4 IF (TO_CHAR(SYSDATE,'DY') IN ('SAT','SUN')) OR
6 THEN
7 IF DELETING
9 ELSIF INSERTING
13 ELSE
15 END IF;
16 END IF;
17* END;
18 /
Trigger created.
Table created.
2 (USERNAME VARCHAR2(10),
3 TODAYDATE TIMESTAMP,
4 NEW_DEPTNO NUMBER(10),
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.
4 BEGIN
6 VALUES
7 (USER,SYSTIMESTAMP,:NEW.DEPTNO,:OLD.DEPTNO,:NEW.DNAME,:OLD.DNAME,
8 :NEW.LOC,:OLD.LOC);
9* END;
SQL> /
Trigger created.
THE OLD AND NEW QUALIFIERS ARE ONLY AVAILABLEIN ROW TRIGGERS.
PREFIX THESE QUALIFIERS WITH A COLON(:) IN EVERY SQL AND PL/SQL STATEMENT.
DELETING:
1 row deleted.
INSERTING:
1 row created.
1 row updated.
4 rows updated.
7 rows selected.
PROCEDURE VS TRIGGERS:
TRIGGER PROCEDURE
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
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'
LOGGING ON OR OFF
CREATE:
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.
3 BEGIN
5 VALUES
6 (USER,SYS.DICTIONARY_OBJ_TYPE,SYS.DICTIONARY_OBJ_NAME,
7 SYS.DICTIONARY_OBJ_OWNER,SYSTIMESTAMP);
8 END;
9 /
Trigger created.
2* (EMPNO NUMBER(10))
SQL> /
Table created.
DROP:
3 BEGIN
4 IF ORA_DICT_OBJ_OWNER='SCOTT'
6 THEN RAISE_APPLICATION_ERROR
8 END IF;
9 END;
10 /
Trigger created.
3 BEGIN
4 IF ORA_DICT_OBJ_OWNER='SCOTT'
7 THEN RAISE_APPLICATION_ERROR
9 END IF;
10 END;
11 /
Trigger created.
2 (USER_ID VARCHAR2(10),
3 LOG_DATE DATE,
4* ACTION VARCHAR2(10))
SQL> /
Table created.
3 BEGIN
5 VALUES
6 (USER,SYSDATE,'LOGGGING ON');
7* END;
SQL> /
Trigger created.
3 BEGIN
5 VALUES
6 (USER,SYSDATE,'LOGGGING OFF');
7* END;
SQL> /
Trigger created.
2 (USER_ID VARCHAR2(20),
3 DATETIME TIMESTAMP(5),
4* ACTION VARCHAR2(20))
SQL> /
Table created.
3 BEGIN
5 VALUES
6 (USER,SYSTIMESTAMP,'LOGGGING OFF');
7* END;
SQL> /
Trigger created.
3 BEGIN
5 VALUES
6 (USER,SYSTIMESTAMP,'LOGGGING ON');
7* END;
SQL> /
Trigger created.
(DATETIME TIMESTAMP(5));
Table created.
2 AFTER STARTUP
3 ON DATABASE
4 BEGIN
5 INSERT INTO
6 START_SHUT_DBASE
7 VALUES
8 (SYSTIMESTAMP);
9 END;
10 /
Trigger created.
2 BEFORE SHUTDOWN
3 ON DATABASE
4 BEGIN
5 INSERT INTO
6 START_SHUT_DBASE
7 VALUES
8 (SYSTIMESTAMP);
9 END;
10 /
Trigger created.
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.
3 BEGIN
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> 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
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
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
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
2 (ACTION VARCHAR2(10),
3 DATETIME TIMESTAMP(5));
Table created.
4 WHEN (NEW.JOB='MANAGER')
5 BEGIN
7 VALUES
8 ('MANAGER',SYSTIMESTAMP);
9* END;
SQL> /
Trigger created.
2 VALUES
3 (1,'PAVAN','MAANGER',12,'01-DEC-81',1000,100,10);
1 row created.
2 VALUES
3* (2,'PAVAN','MANAGER',12,'01-DEC-81',1000,100,10)
SQL> /
1 row created.
2 VALUES
3* (3,'KUMAR','MANAGER',12,'01-DEC-81',1000,100,10)
SQL> /
1 row created.
ACTION DATETIME
---------- ---------------------------------------------------------------------------
MANAGER 15-JUN-05 12.20.55.00000 AM
MANAGER 15-JUN-05 12.21.09.00000 AM
2 VALUES
3* (4,'KUMAR','GER',12,'01-DEC-81',1000,100,10)
SQL> /
1 row created.
ACTION DATETIME
---------- ---------------------------------------------------------------------------
MANAGER 15-JUN-05 12.20.55.00000 AM
MANAGER 15-JUN-05 12.21.09.00000 AM
2 VALUES
3* (5,'MANAGER','MANAGER',12,'01-DEC-81',1000,100,10)
SQL> /
1 row created.
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
2 (USER VARCHAR2(10),
3* TDATE TIMESTAMP)
SQL> /
Table created.
2 AS
3 BEGIN
5 VALUES
6 (USER,SYSTIMESTAMP);
7 END;
8 /
Procedure created.
3* CALL CALL_TRIGGER
SQL> /
Trigger created.
no rows selected
1 row created.
US D
---------- ---------
SCOTT 15-JUN-05
CREATING PACKAGES:
PACKAGE BODY CONTAINS BODY FOR ALL WHAT ALL WE DECLARED IN THE
PACKAGE SPECIFICATION.
2 G_SAL NUMBER;
3 PROCEDURE FIND_SAL
4 (V_EMPNO IN NUMBER);
5* END;
6 /
Package created.
2 FUNCTION FINDFUN_SAL
3 (V_EMPNO IN NUMBER)
4 RETURN NUMBER IS
5 V_SAL NUMBER(10);
6 BEGIN
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);
16 DBMS_OUTPUT.PUT_LINE(G_SAL);
17 END;
18* END;
SQL> /
4 END;
5 /
Package created.
2 IS
3 V_SAL NUMBER(10);
4 BEGIN
6 WHERE EMPNO=GOLBAL_VARS.V_EMPNO;
7 DBMS_OUTPUT.PUT_LINE(V_SAL);
8* END;
SQL> /
Procedure created.
OVERLOADING IN PACKAGES:
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;
SQL> /
Package created.
2 PROCEDURE ADD_DEPT
3 (V_DEPTNO IN DEPT.DEPTNO%TYPE)
4 IS
5 BEGIN
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)
14 IS
15 BEGIN
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
28 (DEPTNO,DNAME,LOC)
29 VALUES
30 (V_DEPTNO,V_DNAME,V_LOC);
31 END;
32* END;
33 /
7 rows selected.
CREATING TYPES:
2 (STREET VARCHAR2(10),
3 CITY VARCHAR2(10),
4 STATE VARCHAR2(10),
5 ZIP NUMBER);
6 /
Type created.
2 (NAME VARCHAR2(10),
3 ADDRESS ADDRESS_TY);
4 /
TYPE CREATED.
2 (CUSTOMER_ID NUMBER,
3 PERSON PERSON_TY);
Table created.
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.
SQL> /
SQL> /
1 row created.
1 row created.
1 row created.
CUSTOMER_ID
-----------
PERSON(NAME, ADDRESS(STREET, CITY, STATE, ZIP))
------------------------------------------------------------------------------------------
1
PERSON_TY('PAVAN', ADDRESS_TY('RAMNAGAR', 'HYD', 'A.P', 500044))
2
PERSON_TY('GAYATRI', ADDRESS_TY('RAMNAGAR', 'HYD', 'A.P', 500044))
3
PERSON_TY('GAYATRIJI', ADDRESS_TY('RAMNAGAR', 'HYD', 'A.P', 500044))
CUSTOMER_ID
-----------
1
2
3
CUSTOMER_ID PERSON.NAM
----------- ----------
1 PAVAN
2 GAYATRI
3 GAYATRIJI
1 SELECT CUSTOMER_ID,CLIENT.PERSON.NAME,
SQL> /
3 WHERE CLIENT.PERSON.NAME='GAYATRIJI';
1 row updated.
2 WHERE CLIENT.PERSON.NAME='PAVAN';
1 ROW DELETED.
OBJECT VIEWS:
3 NAME VARCHAR2(10),
4 STREET VARCHAR2(10),
5 CITY VARCHAR2(10),
6 STATE VARCHAR2(10),
7* ZIP NUMBER(10))
SQL> /
Table created.
2 (STREET VARCHAR2(10),
3 CITY VARCHAR2(10),
4 STATE VARCHAR2(10),
5* ZIP NUMBER(10));
SQL> /
Type created.
2 (NAME VARCHAR2(10),
3* ADDRESS ADDRESS_TY1);
4 /
Type created.
2 (CUSTOMER_ID NUMBER,
3* PERSON PERSON_TY);
SQL> /
Type created.
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.
no rows selected
1 row created.
2 VALUES
3* (2,'GAYATRI','RAMNAGAR','HYD','AP',500044)
4 /
1 row created.
2 VALUES
3* (3,'GAYATRIJI','RAMNAGAR','HYD','AP',500044)
SQL> /
1 row created.
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))
2 VALUES
3* (4,PERSON_TY1('GAYAANGEL',
ADDRESS_TY1('RAMNAGAR','HYD','AP',500044)))
SQL> /
1 row created.
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))
3 WHERE E.PERSON.NAME='PAVAN';
1 row updated.
CUSTOMER_ID
-----------
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))
2 WHERE E.CUSTOMER_ID=1;
1 row deleted.
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))
2 WHERE E.PERSON.NAME='GAYAANGEL';
1 row deleted.
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))
DBMS_OUTPUT PACKAGE:
SQL> DECLARE
2 V_SAL NUMBER(10);
3 BEGIN
5 WHERE EMPNO=&EMPNO;
6 DBMS_OUTPUT.PUT_LINE(V_SAL);
7 END;
8 /
SQL> /
800
SQL> BEGIN
2 DBMS_OUTPUT.DISABLE;
3 END;
4 /
SQL> DECLARE
2 V_SAL NUMBER(10);
3 BEGIN
5 WHERE EMPNO=&EMPNO;
6 DBMS_OUTPUT.PUT_LINE(V_SAL);
7 END;
8 /
SQL> BEGIN
2 DBMS_OUTPUT.ENABLE;
3 END;
4 /
SQL> DECLARE
2 V_SAL NUMBER(10);
3 BEGIN
5 WHERE EMPNO=&EMPNO;
6 DBMS_OUTPUT.PUT_LINE(V_SAL);
7 END;
8 /
Enter value for empno: 7369
800
1 DECLARE
2 BEGIN
3 DBMS_OUTPUT.ENABLE(2000);
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 /
PAVAN
GAYATRI
PRATHIMA
SQL> BEGIN
2 DBMS_OUTPUT.ENABLE(2000);
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');
9 DBMS_OUTPUT.NEW_LINE;
10 END;
11 /
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> /
UTL_FILE PACKAGE:
1 DECLARE
2 FILE_HANDLE UTL_FILE.FILE_TYPE;
3 DATA_LINE VARCHAR2(100);
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> /
SQL> /
GOD IS GREAT.
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');
7 UTL_FILE.PUT_LINE(FILE_HANDLE,TO_CHAR(V_EMP.EMPNO)||
9 END LOOP;
10 UTL_FILE.FCLOSE(FILE_HANDLE);
11* END;
12 /
CREATION OF DIRECTORY:
Directory created.
DROPING DIRECTORY:
Directory dropped.
17 PARALLEL 5
18* REJECT LIMIT 200
19 /
Table created.
Table created.
4 rows created.
20 GAYATRI MANAGER
30 PRATHIMA MANAGER
40 SRIDEVI MANAGER
NVL2:
14 rows selected.
14 rows selected.
NULLIF:
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 EMP
SQL> /
14 rows selected.
COALESCE:
THE COALESCE FUNCTION RETURNS THE FIRST NON-NULL EXPRESSION IN THE LIST.
COALESCE(EXPR1,EXPR2,……EXPRN)
IN SYNTAX:
EXPR2 RETURNS THIS EXPRESSION IF THE FIRST EXPRESSION IS NULL AND THIS
EXPRESSION IS NOT NULL.
14 rows selected.
14 rows selected.
1 row created.
1 row created.
16 rows selected.
IN THE SYNTAX:
THE FOR UPDATE CLAUSE WILL BE THE LAST CLAUSE IN A SELECT STATEMENT
EVEN AFTER ORDER BY.
DECLARE
CUSSOR EMP_CURSOR IS
SELECT * FROM EMP WHERE DEPTNO=10 FOR UPDATE OF SAL NOWAIT;
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.
DECLARE
CURSOR SAL_CURSOR IS
SELECT * FROM EMP WHERE DEPTNO =10
FOR UPDATE OF SALARY NOWAIT;
BEGIN
FOR EMP_RECORD IN SAL_CURSOR
LOOP
IF EMP_RECORD.SAL < 5000 THEN
UPDATE EMP
SET SAL = EMP_RECORD.SAL*1.10
WHERE CURRENT OF SAL_CURSOR;
END IF;
END LOOP;
END;
CREATING INDEXES:
AN INDEX:
IS A SCHEMA OBJECT.
USING A POINTER.
CAN REDUCE DISK I/O BY USING A RAPID PATH ACCESS METHOD TO LOCATE
DATA QUICKLY.
AUTOMATICALLY:
MANUALLY:
USER EXPLICITLY CAN CREATE INDEXES FOR SPEED UP THE ACCESS TO THE ROWS.
CREATING NON-UNIQUE_INDEX:
Index created.
CREATING UNIQUE_INDEX:
Index created.
CREATING COMPOSITE_INDEX:
Index created.
CREATING FUNCTIONBASED_INDEX:
Index created.
CREATING BITMAP_INDEX:
Index 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:
IN A WHERE CLAUSE.
14 rows selected.
14 rows selected.
VARRAYS:
Table created.
Table altered.
1 row created.
SQL> /
INSERT INTO FRIENDS
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.FRIENDS_PK) violated
Table altered.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
3* ('HANUMAN','PRATHIMA')
SQL> /
1 row created.
1 row created.
1 row created.
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:
Type created.
Table created.
Table altered.
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
1 row created.
1 row created.
1 row created.
NAME
----------
FRIEND_NAME
--------------------------------------------------------------------------------------------------------------------------
--------
PAVAN
FRIENDS_NAME('RAM', 'SRIRAM', 'GAYATRI', 'SRI DEVI')
BALAJI
FRIENDS_NAME('PRATHIMA', 'GAYATRI', 'SRI DEVI')
HANUMAN
FRIENDS_NAME('PRATHIMA', 'GAYATRI', 'SUNDARI')
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> /
RAM
SRIRAM
GAYATRI
SRI DEVI
NAME: BALAJI
PRATHIMA
GAYATRI
SRI DEVI
NAME: HANUMAN
PRATHIMA
GAYATRI
SUNDARI
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
BALAJI GAYATRI
BALAJI SRI DEVI
HANUMAN PRATHIMA
HANUMAN GAYATRI
HANUMAN SUNDARI
10 rows selected.
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
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
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
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
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
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
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;
19 /
1
2
3
4
5
COUNT:5
6
LIMIT:6
COUNT:6
FIRST:1
LAST:6
PRIOR:1
NEXT:3
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
NEXT:3
NESTED TABLES:
Type created.
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.
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.
Table created.
WHEN 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.
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 row created.
1 row created.
1 row created.
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'))
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'))
12 rows selected.
1 row created.
1 row updated.
1 row deleted.
Type created.
Type created.
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 /
V_NESTEDTABLE(1):-7
V_NESTEDTABLE(2):14.3
V_NESTEDTABLE(3):3.1415
V_NESTEDTABLE(4):
V_NESTEDTABLE(5):0
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;
11 /
NESTED TABLE COUNT 3
VARRAY COUNT 4
LIMIT:
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
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));
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
EXTEND:
1 DECLARE
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;
19 V_VARRY.EXTEND(20);
20 V_VARRY(25):=25;
21* END;
SQL> /
-6533ORA-06533: Subscript beyond count
-6532ORA-06532: Subscript outside of limit
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
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* END;
SQL> /
V_NESTEDTABLE(1)10
V_NESTEDTABLE(2)20
V_NESTEDTABLE(3)30
V_NESTEDTABLE(4)40
V_NESTEDTABLE(5)50
TRIM:
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
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 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
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;
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.
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);
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
OUTPUT AFTER DELETE(2,4).
V_NESTEDTABLE(1)10
V_NESTEDTABLE(5)50
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
1 DECLARE
2 V_NESTEDTABLE NUMTAB :=NUMTAB(10,20,30,40,50,60,70,80);
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
Procedure created.
OBJECT_NAME
--------------------------------------------------------------------------------
OBJECT_TYPE STATUS
------------------ -------
SIMPLE
PROCEDURE VALID
TEXT
----------------------------------------------------------------------------------------------------
PROCEDURE SIMPLE
AS
V_COUNTER NUMBER;
BEGIN
V_COUNTER:=7;
END;
6 rows selected.
no rows selected
OBJECT_NAME
----------------------------------------------------------------------------------------------------
OBJECT_TYPE STATUS
------------------ -------
SIMPLE
PROCEDURE INVALID
TEXT
----------------------------------------------------------------------------------------------------
PROCEDURE SIMPLE
AS
V_COUNTER NUMBER;
BEGIN
V_COUNTER:=7;
END
6 rows selected.
LINE POSITION
---------- ----------
TEXT
----------------------------------------------------------------------------------------------------
6 3
PLS-00103: Encountered the symbol "end-of-file" when expecting one of
the following:
SQL> BEGIN
2 SIMPLE;
3 END;
4 /
SIMPLE;
*
ERROR at line 2:
ORA-06550: line 2, column 1:
PLS-00905: object SCOTT.SIMPLE is invalid
LOCAL SUBPROGRAMS:
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
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
SQL> 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;
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
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);
15 END LOOP;
16* END;
17 /
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;
3 -- TO SLOVE THE PROBLEM THAT WE ENCOUNTERED ABOVE.
4 -- FORWARD DECLARATION OF PROCEDURE B.
1 DECLARE
11 BEGIN
12 LOCALPROC(12345);
13 LOCALPROC('PAVAN');
14* END;
SQL> /
12345
PAVAN
SUBPROGRAMS DEPENDENCIES:
2 AS
Table created.
2 (V_EMPNO NUMBER);
Table created.
2 (P_EMPNO IN NUMBER)
3 AS
4 BEGIN
5 UPDATE EMP1
6 SET SAL=SAL+100
7 WHERE EMPNO=P_EMPNO;
8* END;
9 /
Procedure created.
2 AS
4 BEGIN
5 FOR C1 IN C LOOP
6 RAISE_SAL(C1.EMPNO);
8 END LOOP;
9 END;
10 /
Procedure created.
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
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.
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 /
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.
Table created.
4 rows deleted.
3 P_DNAME IN DEPT1.DNAME%TYPE,
4 P_LOC IN DEPT1.LOC%TYPE);
5 END DEPTPACKAGE;
6 /
Package created.
3 P_DNAME IN DEPT1.DNAME%TYPE,
4 P_LOC IN DEPT1.LOC%TYPE)
5 IS
6 BEGIN
8 VALUES
9 (P_DEPTNO,P_DNAME,P_LOC);
10 END ADDDEPT;
12 /
SQL> /
OBJECT_NAME
----------------------------------------------------------------------------------------------------
OBJECT_TYPE STATUS
------------------ -------
DEPTPACKAGE
PACKAGE VALID
DEPTPACKAGE
PACKAGE BODY VALID
Table dropped.
WHENEVER WE DROP TABLE DEPT1 BOTH PACKAGE HEADER AND PACKAGE BODY
STATUS WAS CHANGED TO INVALID.BCOZ BOTH HEADER AND BODY WERE USING
THE DEPT1 TABLE.
OBJECT_NAME
----------------------------------------------------------------------------------------------------
OBJECT_TYPE STATUS
------------------ -------
DEPTPACKAGE
PACKAGE INVALID
DEPTPACKAGE
PACKAGE BODY INVALID
Table created.
3 P_DNAME IN VARCHAR2,
4 P_LOC IN VARCHAR2);
5* END DEPTPACKAGE;
SQL> /
Package created.
3 P_DNAME IN VARCHAR2,
4 P_LOC IN VARCHAR2)
5 IS
6 BEGIN
8 VALUES
9 (P_DEPTNO,P_DNAME,P_LOC);
10 END ADDDEPT;
SQL> /
OBJECT_NAME
----------------------------------------------------------------------------------------------------
OBJECT_TYPE STATUS
------------------ -------
DEPTPACKAGE
PACKAGE VALID
DEPTPACKAGE
PACKAGE BODY VALID
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.
OBJECT_NAME
----------------------------------------------------------------------------------------------------
OBJECT_TYPE STATUS
------------------ -------
DEPTPACKAGE
PACKAGE VALID
DEPTPACKAGE
PACKAGE BODY INVALID
2 (F1 NUMBER);
Table created.
3 END DEPENDEE;
4 /
Package created.
3 BEGIN
5 END EXAMPLE;
6* END DEPENDEE;
SQL> /
2 BEGIN
3 DEPENDEE.EXAMPLE(P_VAL+1);
4 END DEPENDER;
5 /
Procedure created.
OBJECT_NAME
----------------------------------------------------------------------------------------------------
OBJECT_TYPE STATUS
------------------ -------
SIMPLE_TABLE
TABLE VALID
DEPENDER
PROCEDURE VALID
DEPENDEE
PACKAGE VALID
DEPENDEE
PACKAGE BODY VALID
OBJECT_NAME
----------------------------------------------------------------------------------------------------
OBJECT_TYPE STATUS
------------------ -------
SIMPLE_TABLE
TABLE VALID
DEPENDER
PROCEDURE VALID
DEPENDEE
PACKAGE VALID
DEPENDEE
PACKAGE BODY VALID
Table dropped.
OBJECT_NAME
----------------------------------------------------------------------------------------------------
OBJECT_TYPE STATUS
------------------ -------
DEPENDER
PROCEDURE VALID
DEPENDEE
PACKAGE VALID
DEPENDEE
PACKAGE BODY INVALID
EXCEPTION PROPAGATION:
DECLARE
…..
BEGIN
….
….
DECLARE
….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
DECLARE
A EXCEPTION;
BEGIN
BEGIN
RAISE A;
RAISED EXCEPTION
HERE. WHEN A THEN
HANDLED …
HERE END;
ONLY.
END;
PROPAGATION EXAMPLE:2
DECLARE
A EXCEPTION;
B EXCEPTION;
BEGIN
BEGIN
RAISE B;
RAISED HERE
EXCEPTION
NO HANDLER.
THROWNTO
WHEN A OTHERS
OUTER
….. BLOCK.
END;
EXCEPTION
WHEN B THEN
…
END;
PROPAGATION EXAMPLE:3
DECLARE
A EXCEPTION;
B EXCEPTION;
C EXCEPTION;
BEGIN
EXCEPTION
WHEN A OTHERS
…..
END;FOR C .
HERE ALSO NO EXCEPTION HANDLER
EXCEPTION
WHEN B THEN
…
END;
PROPAGATION EXAMPLE:4
DECLARE
BEGIN
…….
……
EXCEPTION
……
END;
PROPAGATION EXAMPLE:5
DECLARE
BEGIN
DECLARE
BEGIN
….
EXCEPTION
EXCEPTION
END;
PROPAGATION EXAMPLE:6
DECLARE
A EXCEPTION;
B EXCEPTION;
BEGIN
EXCEPTION
WHEN A THEN
WHEN B THEN
….—EVEN THOUGH FOR B EXCEPTION HANDLER IS
THERE IT WON’T EXECUTE. THE EXCEPTION IS
PROPAGATED TO THE OUTER BLOCK.
END;
PROPAGATION EXAMPLE:7
DECLARE
BEGIN
DECLARE
A EXCEPTION;
B EXCEPTION;
BEGIN
RAISE 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;
EXCEPTION
WHEN B THEN
….
END;
ENABLING A CONSTRAINT:
Table created.
Table created.
1 row created.
1 row created.
SQL> /
INSERT INTO ENABLE_EXEC
*
ERROR at line 1:
ORA-00001: unique constraint (D.SYS_C002783) violated
Table altered.
1 row created.
1 row created.
1 row created.
AAAH6PAABAAAPCAAAC D ENABLE_EXEC
SYS_C002783
AAAH6PAABAAAPCAAAD D ENABLE_EXEC
SYS_C002783
3 rows deleted.
EMPNO ENAME
---------- ----------
1 PAVAN
3 GAYATRI
Table altered.
MERGE STATEMENT:
Table created.
Table created.
3 ('ANIL','ACC',1500);
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
SQL> COMMIT;
Commit complete.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
SQL> COMMIT;
Commit complete.
7 rows selected.
ENAME SAL
---------- ----------
SHANKER 2000
JAYA 1800
SUNIL 1700
VIJAY 5000
PRAKASH 3000
7 rows merged.
7 rows selected.
ENAME SAL
---------- ----------
SHANKER 2100
JAYA 1900
SUNIL 1800
VIJAY 5100
PRAKASH 3100
AJAY 8000
ANIL 1500
7 rows selected.
Table created.
SQL> BEGIN
2 FOR I IN 1..50 LOOP
3 INSERT INTO CHILD VALUES(1,I);
4 END LOOP;
5 END;
6 /
SQL> COMMIT;
Commit complete.
COUNT(*)
----------
50
50 rows deleted.
SQL> COMMIT;
Commit complete.
COUNT(*)
----------
0
*
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> CONN
Enter user-name: SYS AS SYSDBA
Connected.
Grant succeeded.
SQL> CONN
Enter user-name: D
Connected.
COUNT(*)
----------
50
COUNT(*)
----------
0
1 row created.
Table created.
4 rows deleted.
SQL> COMMIT;
Commit complete.
Sequence created.
2 BEFORE INSERT
3 ON DEPT_DUP
5 DECLARE
6 PRIMARY_KEY_VALUE VARCHAR2(10);
7 BEGIN
10 END;
11 /
Trigger created.
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'
Table altered.
1 row created.
1 row created.
1 row created.
3 rows deleted.
BLOB.
CLOB.
NCLOB.
BFILE.
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:
2 (AIRBUSNO CHAR(10),
3 AIRBUS_DET BFILE,
4 AIRBUS_PROFILE CLOB);
Table created.
Directory created.
1 row created.
1 row created.
1 row created.
SQL> COMMIT;
Commit complete.
AIRBUSNO 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.
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.
READ.
SUBSTR.
INSTR.
GETLENGTH.
COMPARE.
WRITE.
APPEND.
ERASE.
TRIM.
COPY.
FILEOPEN.
FILECLOSE.
FILECLOSEALL.
FILEXISTS.
FILEGETNAME.
FILEOPEN.
DBMS_LOB.READ:
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;
10 FROM AIRBUS_DESC
11 WHERE AIRBUSNO='AB01';
12 DBMS_LOB.READ(LOC_VAR,NUM,OFFSET,OUTPUT_VAR);
14* END;
SQL> /
SQL> /
AIRBUS_PROFILE
--------------------------------------------------------------------------------
THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:LUXURY SEATS IN
ECONOMY CLASS
DBMS_LOB.SUBSTR:
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;
10 FROM AIRBUS_DESC
11 WHERE AIRBUSNO='AB01';
12 OUTPUT_VAR:=DBMS_LOB.SUBSTR(LOC_VAR,NUM,OFFSET);
14* END;
SQL> /
DBMS_LOB.INSTR:
OCCURRENCE NUMBER,START AT 1.
1 DECLARE
2 LOC_VAR CLOB;
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;
12 FROM AIRBUS_DESC
13 WHERE AIRBUSNO='AB01';
14 POSITION:=DBMS_LOB.INSTR(LOC_VAR,PATTERN,OFFSET,OCCUR_VAR);
16* END;
SQL> /
STRING FOUND AT POSITION: 33
AIRBUS_PROFILE
--------------------------------------------------------------------------------
THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:LUXURY SEATS IN
ECONOMY CLASS
DBMS_LOB.GETLENGTH:
SQL> DECLARE
2 LOC_VAR CLOB;
3 LEN INTEGER;
4 BEGIN
6 FROM AIRBUS_DESC
7 WHERE AIRBUSNO='AB01';
8 LEN:=DBMS_LOB.GETLENGTH(LOC_VAR);
10 END;
11 /
LENGTH OF THE LOB IS :72
AIRBUS_PROFILE
--------------------------------------------------------------------------------
THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:LUXURY SEATS IN
ECONOMY CLASS
DBMS_LOB.COMPARE:
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;
13 FROM AIRBUS_DESC
14 WHERE AIRBUSNO='AB01';
16 FROM AIRBUS_DESC
17 WHERE AIRBUSNO='AB02';
18
OUTPUT_VAR:=DBMS_LOB.COMPARE(LOC1_VAR,LOC2_VAR,NUM,OFFSET1,OFFSET2);
20* END;
21 /
AIRBUS_PROFILE
--------------------------------------------------------------------------------
THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:LUXURY SEATS IN
ECONOMY CLASS
DBMS_LOB.WRITE:
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';
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 /
AIRBUS_PROFILE
--------------------------------------------------------------------------------
THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:LUXURY SEATS
DBMS_LOB.APPEND:
LOCATOR FOR THE INTERNAL LOB FROM WHICH THE DATA IS TO BE READ.
SQL> DECLARE
2 DEST_LOC_VAR CLOB;
3 SRC_LOC_VAR CLOB;
4 BEGIN
6 FROM AIRBUS_DESC
7 WHERE AIRBUSNO='AB02'
8 FOR UPDATE;
10 FROM AIRBUS_DESC
11 WHERE AIRBUSNO='AB01';
12 DBMS_LOB.APPEND(DEST_LOC_VAR,SRC_LOC_VAR);
13 COMMIT;
14 END;
15 /
AIRBUS_PROFILE
--------------------------------------------------------------------------------
THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:LUXURY SEATS IN
ECONOMY CLASS
AIRBUS_PROFILE
--------------------------------------------------------------------------------
THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:LUXURY SEATSTHE DESCRIPTION
OF THE PL
DBMS_LOB.ERASE:
ERASED.
OR CHARACTERS(CLOBS).
SQL> DECLARE
2 LOC_VAR CLOB;
3 NUM INTEGER;
4 OFFSET INTEGER;
5 BEGIN
6 NUM:=20;
7 OFFSET :=10;
9 FROM AIRBUS_DESC
10 WHERE AIRBUSNO='AB02'
11 FOR UPDATE;
12 DBMS_LOB.ERASE(LOC_VAR,NUM,OFFSET);
13 COMMIT;
14 END;
15 /
AIRBUS_PROFILE
--------------------------------------------------------------------------------
THE DESCR IS AS FOLLOWS:LUXURY SEATSTHE DESCRIPTION OF THE PL
DBMS_LOB.TRIM:
THE FOLLOWING CODE TRIMS THE VALUE IN THE AIRBUS_PROFILE COLUMN IN THE
AIRBUS_DESC
TABLE FOR AIRBUSNO ABO2 TO 40 CHRACTERS.
SQL> DECLARE
2 LOC_VAR CLOB;
3 NEWLEN INTEGER;
4 BEGIN
5 NEWLEN :=40;
7 FROM AIRBUS_DESC
8 WHERE AIRBUSNO='AB02'
9 FOR UPDATE;
10 DBMS_LOB.TRIM(LOC_VAR,NEWLEN);
11 COMMIT;
12 END;
13 /
AIRBUS_PROFILE
--------------------------------------------------------------------------------
THE DESCR IS AS FOLLO
DBMS_LOB.COPY:
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;
12 FROM AIRBUS_DESC
13 WHERE AIRBUSNO='AB02'
14 FOR UPDATE;
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> /
AIRBUS_PROFILE
--------------------------------------------------------------------------------
THE DESCRIPTION OF THE PLANE IS AS FOLLOWS:LUXURY SEATS IN
ECONOMY CLASS
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;
11 BEGIN
13 FROM AIRBUS_DESC
14 WHERE AIRBUSNO='AB01';
15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);
16 IF FEXISTS_VAR=1 THEN
18 ELSE
20 END IF;
21* END;
22 /
SQL> /
THE FILE EXISTS
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
13 FROM AIRBUS_DESC
14 WHERE AIRBUSNO='AB01';
15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);
16 IF FEXISTS_VAR=1 THEN
18 ELSE
20 END IF;
21 DBMS_LOB.FILEGETNAME(LOC_VAR,DIR_ALIAS_VAR,FNAME);
23* END;
SQL> /
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
13 FROM AIRBUS_DESC
14 WHERE AIRBUSNO='AB01';
15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);
16 IF FEXISTS_VAR=1 THEN
18 ELSE
20 END IF;
21 DBMS_LOB.FILEGETNAME(LOC_VAR,DIR_ALIAS_VAR,FNAME);
23* END;
SQL>
SQL> /
THE FILE EXISTS
FILE NAME IS:GOD AIRBUS_DESC1.DOC
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
13 FROM AIRBUS_DESC
14 WHERE AIRBUSNO='AB01';
15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);
16 IF FEXISTS_VAR=1 THEN
18 ELSE
20 END IF;
21 DBMS_LOB.FILEGETNAME(LOC_VAR,DIR_ALIAS_VAR,FNAME);
23* END;
24 /
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
13 FROM AIRBUS_DESC
14 WHERE AIRBUSNO='AB01';
15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);
16 IF FEXISTS_VAR=1 THEN
18 ELSE
20 END IF;
21 DBMS_LOB.FILEGETNAME(LOC_VAR,DIR_ALIAS_VAR,FNAME);
23 FOPEN_VAR := DBMS_LOB.FILEISOPEN(LOC_VAR);
24 IF FOPEN_VAR = 1 THEN
26 ELSE
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);
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: ÐÏࡱá
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
13 FROM AIRBUS_DESC
14 WHERE AIRBUSNO='AB01';
15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);
16 IF FEXISTS_VAR=1 THEN
18 ELSE
20 END IF;
21 DBMS_LOB.FILEGETNAME(LOC_VAR,DIR_ALIAS_VAR,FNAME);
23 FOPEN_VAR := DBMS_LOB.FILEISOPEN(LOC_VAR);
24 IF FOPEN_VAR = 1 THEN
26 ELSE
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);
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
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
13 FROM AIRBUS_DESC
14 WHERE AIRBUSNO='AB01';
15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);
16 IF FEXISTS_VAR=1 THEN
18 ELSE
20 END IF;
21 DBMS_LOB.FILEGETNAME(LOC_VAR,DIR_ALIAS_VAR,FNAME);
23 FOPEN_VAR := DBMS_LOB.FILEISOPEN(LOC_VAR);
24 IF FOPEN_VAR = 1 THEN
26 ELSE
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);
34 DBMS_LOB.FILECLOSE(LOC_VAR);
35* END;
SQL> /
THE FILE EXISTS
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
13 FROM AIRBUS_DESC
14 WHERE AIRBUSNO='AB01';
15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);
16 IF FEXISTS_VAR=1 THEN
18 ELSE
20 END IF;
21 DBMS_LOB.FILEGETNAME(LOC_VAR,DIR_ALIAS_VAR,FNAME);
23 FOPEN_VAR := DBMS_LOB.FILEISOPEN(LOC_VAR);
24 IF FOPEN_VAR = 1 THEN
26 ELSE
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);
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
SQL> /
THE FILE EXISTS
FILE NAME IS:GOD AIRBUS_DESC1.DOC
THE FILE IS BEING OPENED
THE FIRST 20 CHARACTERS ARE: D0CF11E0A1B11AE1000000000000000000000000
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
13 FROM AIRBUS_DESC
14 WHERE AIRBUSNO='AB01';
15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);
16 IF FEXISTS_VAR=1 THEN
18 ELSE
20 END IF;
21 DBMS_LOB.FILEGETNAME(LOC_VAR,DIR_ALIAS_VAR,FNAME);
23 FOPEN_VAR := DBMS_LOB.FILEISOPEN(LOC_VAR);
24 IF FOPEN_VAR = 1 THEN
26 ELSE
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);
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: D0CF11E0A1B11AE1000000000000000000000000
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
13 FROM AIRBUS_DESC
14 WHERE AIRBUSNO='AB01';
15 FEXISTS_VAR := DBMS_LOB.FILEEXISTS(LOC_VAR);
16 IF FEXISTS_VAR=1 THEN
18 ELSE
20 END IF;
21 DBMS_LOB.FILEGETNAME(LOC_VAR,DIR_ALIAS_VAR,FNAME);
23 FOPEN_VAR := DBMS_LOB.FILEISOPEN(LOC_VAR);
24 IF FOPEN_VAR = 1 THEN
26 ELSE
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);
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
USER SERVICES.
BUSSINESS SERVICES.
DATA SERVICES.
FOR EXAMPLE, AN ORAGANIZATION MAY HAVE DECIDED THAT THE CREDIT LIMIT
OF CLIENTS CANNOT EXCEED $200000.
THE DATA SERVICES LAYER COMPRISES THE DATA AND THE FUNCTIONS FOR
MANIPULATING THIS DATA.
SINGLE_TIER ARCHITECTURE:
MONOLITHIC APPLICATIONS
USER SERVICES
BUSSINESS SERVICES
DATA SERVICES
TWO-TIER ARCHITECTURE:
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.
BY DIVIDING THE BUSSINESS SERVICES BETWEEN THE USER SERVICES AND THE
DATA SERVICES.
FAT CLIENT :
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.
SERVER
DATA TIER.
FAT CLIENT
CLIENT BUSSINESS
USER TIER LOGIC.
FAT SERVER:
THREE-TIER ARCHITECTURE:
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.
N-TIER ARCHITECTURE.
SUBPROGRAMS:
Table dropped.
Table created.
4 rows deleted.
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
8 (P_DEPTNO,P_DNAME,P_LOC);
9 END;
10 /
Procedure created.
SQL> DECLARE
2 V_DEPTNO DEPT1.DEPTNO%TYPE:=10;
3 V_DNAME DEPT1.DNAME%TYPE:='ACCOUNTING';
5 BEGIN
6 ADDDEPT(V_DEPTNO,V_DNAME,V_LOC);
7 END;
8 /
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.
2 (P_INPARAMETER IN NUMBER,
6 BEGIN
9 DBMS_OUTPUT.PUT_LINE('P_INPARAMETER IS NULL');
10 ELSE
12 END IF;
14 DBMS_OUTPUT.PUT_LINE('P_OUTPARAMETER IS NULL');
15 ELSE
17 END IF;
19 DBMS_OUTPUT.PUT_LINE('P_INOUTPARAMETER IS NULL');
20 ELSE
22 END IF;
26 --P_INPARAMETER:=9;--ILLEGAL
28 P_OUTPARAMETER:=7;--LEGAL
30 V_LOCALVARIABLE :=P_OUTPARAMETER;--LEGAL
32 V_LOCALVARIABLE :=P_INOUTPARAMETER;--LEGAL
34 P_INOUTPARAMETER:=9;--LEGAL
37 DBMS_OUTPUT.PUT_LINE('P_INPARAMETER IS NULL');
38 ELSE
40 END IF;
42 DBMS_OUTPUT.PUT_LINE('P_OUTPARAMETER IS NULL');
43 ELSE
45 END IF;
47 DBMS_OUTPUT.PUT_LINE('P_INOUTPARAMETER IS NULL');
48 ELSE
50 END IF;
52 /
Procedure created.
SQL> DECLARE
2 V_IN NUMBER:=1;
3 V_OUT NUMBER:=2;
4 V_INOUT NUMBER:=3;
5 BEGIN
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);
11 DBMS_OUTPUT.PUT_LINE(' V_IN = ' || V_IN || ' V_OUT = ' || V_OUT || ' V_INOUT = ' ||
V_INOUT)
12 ;
13 END;
14 /
P_INPARAMETER = 1
P_OUTPARAMETER IS NULL
P_INOUTPARAMETER = 3
AT END OF MODETEST
P_INPARAMETER = 1
P_OUTPARAMETER = 7
P_INOUTPARAMETER = 9
THE 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.
1 DECLARE
4 BEGIN
5 MODETEST(1,V_OUT,V_INOUT);
6* END;
SQL> /
P_INPARAMETER = 1
P_OUTPARAMETER IS NULL
P_INOUTPARAMETER = 3
AT END OF MODETEST
P_INPARAMETER = 1
P_OUTPARAMETER = 7
P_INOUTPARAMETER = 9
1 DECLARE
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.
PLS-363:
EXPRESSION ‘P_INPARAMETER’ CANNOT BE USED AS AN ASSIGNMENT TARGET.
PLS-00365:
PRIOR TO 7.3.4 NO
7.3.4 YES
8.0.3 NO
4 BEGIN
5 P_PARAMETER1:='ABCDEFGHIJKLM';
6 P_PARAMETER2 :=12.3;
7* END;
4 BEGIN
5 P_PARAMETER1:='ABCDEFGHIJKLM';
6 P_PARAMETER2 :=12.3;
7* END;
SQL> /
Procedure created.
1 DECLARE
2 V_VARIABLE1 VARCHAR2(40);
3 V_VARIABLE2 NUMBER(7,3);
4 BEGIN
5 PARAMETERLENGTH(V_VARIABLE1,V_VARIABLE2);
6* END;
SQL> /
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
THE 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.
4 AS
5 BEGIN
6 P_PARAMETER2 :=12345;
7* END;
8 /
Procedure created.
1 DECLARE
2 V_VARIABLE1 VARCHAR2(1);
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
{ IS|AS}
PROCEDURE BODY.
EXCEPTION IS OPTIONAL.
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.
IS
BEGIN
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.
Table dropped.
Table created.
7 END;
8 /
Procedure created.
STATUS
-------
VALID
Table dropped.
STATUS
-------
INVALID
Table created.
STATUS
-------
INVALID
Procedure altered.
STATUS
-------
VALID
Procedure dropped.
INVOKING PROCEDURES:
ONCE A PROCEDURE HAS BEEN CREATED AND STORED IN THE DATABASE, IT CAN
BE INVOKED FROM
1ST WAY:
BEGIN
GAYATRI;
END;
BEGIN
END IF;
2ND WAY:
EXECUTE GAYATRI;
EXEC GAYATRI;
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:
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:
Table created.
Table dropped.
SQL> BEGIN
2 CREATE TABLE NATIVE
3 (EMPNO NUMBER(10));
4 END;
5 /
CREATE TABLE NATIVE
*
ERROR at line 2:
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> /
1
2
3
4
5
6
7
8
9
10
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> /
1
2
3
4
5
6
7
8
9
10
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;
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
EMPNO
----------
ROW1
ROW2
ROW3
ROW4
ROW5
ROW6
ROW7
ROW8
ROW9
ROW10
10 rows selected.
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;
28 DBMS_OUTPUT.PUT_LINE('NEW DEPTNO:' ||V_NEW_DEPTNO);
29 END;
30 /
EMPLOYEES: 4
NEW DEPTNO:9
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
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
*
ERROR at line 1:
ORA-00903: invalid table name
ORA-06512: at line 13
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
SQL> DECLARE
2 SQL_STMT VARCHAR2(100);
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
NESTED TABLES:
Type created.
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.
Table created.
1 row created.
SQL> ED
Wrote file afiedt.buf
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 /
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> /
1 row updated.
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
6 SET BOOKS_ISSUED = BOOK_VAR
7 WHERE STUDENT_NO=103;
8 END;
9 /
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> /
STUDENT_NO STUDENT_NA
---------- ----------
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'))
1 row created.
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'))
1 row deleted.
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.
1 row deleted.
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'))
VARRAYS:
CREATING VARRAYS:
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.
Type created.
Table created.
1 row created.
1 row created.
1 row created.
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'))
DECLARE
LIST_OF_BOOKS BOOKS_ARRAY;
BEGIN
LIST_OF_BOOKS.EXTEND;
LIST_OF_BOOKS(LIST_OF_BOOKS.COUNT)
:=BOOK_TYPE(6,’PASCAL IN 9 DAYS’,’KEVIN’);
UPDATE STUDENTS
SET BOOKS_ISSUED = LIST_OF_BOOKS
WHERE STUDENT_NO=100;
COMMIT;
END;
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:
TRIGGERS
Table created.
Table created.
Table created.
Table created.
INSERT TRIGGERS:
8 /
Trigger created.
Trigger created.
Trigger created.
Trigger created.
OBJECT_NAME
----------------------------------------------------------------------------------------------------
OBJECT_TYPE
------------------
AFTER_INSERT_ROW
TRIGGER
AFTER_INSERT_TAB
TRIGGER
BFORE_INSERT_ROW
TRIGGER
BFORE_INSERT_TAB
TRIGGER
TRIGGER_NAME
------------------------------
AFTER_INSERT_ROW
AFTER_INSERT_TAB
BFORE_INSERT_ROW
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
ENABLED
BFORE_INSERT_TAB
BEFORE INSERT ON EMP_D
PL/SQL BEGIN
INSERT INTO TRIG_INSERT
VALUES
('BFORE INSERT TAB LVL',SYSTIMESTAMP);
END;
TRIGGER_BODY
--------------------------------------------------------------------------------
BEGIN
INSERT INTO TRIG_INSERT
VALUES
('BFORE INSERT TAB LVL',SYSTIMESTAMP);
END;
no rows selected
1 row created.
ACTION
----------------------------------------------------------------------------------------------------
TDATE
---------------------------------------------------------------------------
BFORE INSERT TAB LVL
19-SEP-05 12.52.39.000000 AM
Trigger dropped.
Trigger dropped.
Trigger dropped.
Trigger dropped.
UPDATING:
Trigger created.
Trigger created.
Trigger created.
Trigger created.
TRIGGER_NAME
------------------------------
AFTER_UPDATE_ROW
AFTER_UPDATE_TAB
BFORE_UPDATE_ROW
BFORE_UPDATE_TAB
no rows selected
1 row updated.
ACTION
----------------------------------------------------------------------------------------------------
TDATE
---------------------------------------------------------------------------
BFORE UPDATE TAB LVL
19-SEP-05 01.03.20.000000 AM
4 rows deleted.
no rows selected
15 rows updated.
ACTION
----------------------------------------------------------------------------------------------------
TDATE
---------------------------------------------------------------------------
BFORE UPDATE TAB LVL
19-SEP-05 01.04.06.000001 AM
19-SEP-05 01.04.06.000001 AM
ACTION
----------------------------------------------------------------------------------------------------
TDATE
---------------------------------------------------------------------------
ACTION
----------------------------------------------------------------------------------------------------
TDATE
---------------------------------------------------------------------------
19-SEP-05 01.04.06.000001 AM
32 rows selected.
Trigger dropped.
Trigger dropped.
Trigger dropped.
SQL> /
Trigger dropped.
no rows selected
DELETION:
no rows selected
Trigger created.
Trigger created.
Trigger created.
Trigger created.
TRIGGER_NAME
------------------------------
AFTER_DELETE_ROW
AFTER_DELETE_TAB
BFORE_DELETE_ROW
BFORE_DELETE_TAB
0 rows deleted.
ACTION
----------------------------------------------------------------------------------------------------
TDATE
---------------------------------------------------------------------------
BFORE DELETE TAB LVL
19-SEP-05 01.22.59.000001 AM
2 rows deleted.
1 row deleted.
ACTION
----------------------------------------------------------------------------------------------------
TDATE
---------------------------------------------------------------------------
BFORE DELETE TAB LVL
19-SEP-05 01.23.57.000000 AM
19-SEP-05 01.23.57.000000 AM
4 rows deleted.
12 rows deleted.
ACTION
----------------------------------------------------------------------------------------------------
TDATE
---------------------------------------------------------------------------
BFORE DELETE TAB LVL
19-SEP-05 01.24.57.000000 AM
ACTION
----------------------------------------------------------------------------------------------------
TDATE
---------------------------------------------------------------------------
ACTION
----------------------------------------------------------------------------------------------------
TDATE
---------------------------------------------------------------------------
19-SEP-05 01.24.57.000000 AM
26 rows selected.
REF CURSORS:
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.
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.
SINCE THERE IS NO RETURN VALUE FOR THE CURSOR , THE CURSOR VARIABLE IS
SHAPE INDEPENDENT.
FOR EXAMPLE:
Package created.
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.
Package created.
5 END OPEN_EMP_CV;
6 /
Procedure created.
SQL> PRINT P
14 rows selected.
Package created.
FOR MORE FLEXIBILITY , YOU CAN PASS A CURSOR VARIABLE AND SELECTOR TO A
STORED PROCEDURE THAT EXECUTES QUERIES WITH DIFFERENT RETURN TYPES.
Package created.
14 rows selected.
ORACLE 9I FEATURES:
CHARACTER VALUES ARE CASE SENSITIVE AND DATE VALUES ARE FORMAT
SENSITIVE.
DD-MON-YY,DD-MM-YY,DD-MM-RR.
ISQL*PLUS:
SQL*PLUS:
ISQL*PLUS:
AN ENVIRONMENT.
ORACLE PROPRIETARY.
RUNS ON BROWSER.
ARITHEMITIC EXPRESSIONS:
OPERATOR. DESCRIPTION.
+ ADD.
- SUBTRACT.
* MULTIPLY.
/ DIVIDE.
OPERATOR PRECEDENCE:
* / + -
COMPARISION OPERATORS:
= EQUAL TO.
LOGICAL CONDITIONS:
RULES OF PRECENDENCE:
1 ARITHEMITIC OPERATORS.
2 CONCATENATION OPERATOR.
3 COMPARISION OPERATORS.
5 [NOT] BETWEEN.
8 OR LOGICAL CONDITION.
SQL FUNCTIONS:
SINGLE-ROW-FUNCTIONS.
MULTIPLE-ROW-FUNCTIONS.
SINGLE-ROW-FUNCTIONS.
CHARACTER.
NUMBER.
DATE.
CONVERSION.
GENERAL.
CHRACTER FUNCTIONS:
LOWER.
UPPER.
INITCAP.
CONCAT.
SUBSTR.
LEGTH.
INSTR.
LPAD/RPAD.
TRIM.
REPLACE.
NUMBER FUNCTIONS:
ROUND.
TRUNC.
MOD.
DATE FUNCTIONS:
MONTHS_BETWEEN.
ADD_MONTHS.
NEXT_DAY.
LAST_DAY.
ROUND.
TRUNC.
CONVERSION FUNCTIONS:
FROM TO
NUMBER VARCHAR2.
DATE. VARCHAR2.
FROM TO
GENERAL FUNCTIONS:
NVL.
NVL2.
NULLIF.
COALESCE.
NVL(COMM,0);
NVL(HIREDATE,’01-JAN-97’);
GROUP FUNCTIONS:
AVG.
COUNT.
MAX.
MIN.
STDDEV.
VARIANCE.
[WHERE CONDITION]
[ORDER BY COLUMN];
TYPES OF SUBQUERIES:
QUERIES THAT RETURNS ONLY ONE ROW FROM THE INNER SELECT STATEMENT.
QUERIES THAT RETURN MORE THAN ONE-ROW FROM THE INNER SELECT
STATEMENTS.
TABLES.
VIEWS.
SEQUENCES.
INDEXES.
SYNONYM.
MUST NOT DUPLICATE THE NAME OF ANOTHER OBJECT OWNED BY SAME USER.
AUTOMATIC COMMIT:
AUTOMATIC ROLLBACK:
USER TABLES:
DATA DICTIONARY:
USER TABLES ARE TABLES CREATED BY THE USER, SUCH AS EMP. THERE ARE
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.
THERE ARE FOUR CATEGORIES OF DATA DICTIONARY VIEWS; EACH CATEGORY HAS
A DISTINCT PREFIX THAT REFLECTS ITS INTENDED USE.
PREFIX DESCRIPTION
DBA_ THESE VIEWS ARE RESTRICTED VIEWS, WHICH CAN BE ACCESSED ONLY BY
PEOPLE WHO HAVE BEEN ASSIGNED THE DBA ROLE.
DATATYPES:
CHAR FIXED –LENGTH CHARACTER DATA OF LENGTH SIZE BYTES (DEFAULT AND
MINIMUM SIZE IS 1; MAXIMUM SIZE IS 2000).
DATE DATE AND TIME VALUES TO THE NEAREST SECOND BETWEEN JANUARY 1,
4712 B.C., AND A.D. DECEMBER 31, 9999.
YOU MAY WANT TO USE A CLOB COLUMN RATHER THAN A LONG COLUMN.
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.
TIMESTAMP[(FRACTIONAL_SECONDS_PRECISION)]
CASCADE:
Table created.
Table created.
Table altered.
Table altered.
Table altered.
Table altered.
Table altered.
Table altered.
CASCADING CONSTRAINTS:
THE CASCADE CONSTRAINTS CLAUSE IS USED ALONG WITH THE DROP COLUMN
CLAUSE.
Table created.
DROP COLUMN PK
*
ERROR at line 2:
ORA-12992: cannot drop parent key column
Table altered.
Table created.
Table altered.
IN THE ABOVE STATEMENT WE ARE DROPING ALL THE COLUMNS THAT ARE
REFERENCED BY CONSTRAINTS,HERE THERE IS NO USE OF THE CASCADE
CONSTRAINTS.
USER_CONSTRAINTS:
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:
NOT NULL
CHECK
UNIQUE CONSTRAINT.
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:
{ BEFORE | AFTER|
[WHEN (…..)]
[DECLARE…..]
BEGIN
……EXECUTABLE STATEMENETS
[EXCEPTION…..]
END[TRIGGER_NAME];
Table created.
Trigger created.
Trigger created.
Trigger created.
5 VALUES
6 ('AFTERINSERTROW',SYSTIMESTAMP);
7* END;
8 /
Trigger created.
Trigger created.
Trigger created.
Trigger created.
3 BEGIN
4 INSERT INTO DML_EX
5 VALUES
6 ('AFTERUPDATEROW',SYSTIMESTAMP);
7* END;
8 /
Trigger created.
Trigger created.
Trigger created.
Trigger created.
8 /
Trigger created.
no rows selected
Table altered.
1 row created.
ACTION
--------------------------------------------------
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
4 rows deleted.
1 row deleted.
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
4 rows deleted.
1 row updated.
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
4 rows deleted.
no rows selected
14 rows updated.
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
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
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
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
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.
COUNT(*)
----------
14
DDL TRIGGERS:
DECLARE
VARIABLE DECLARATIONS.
BEGIN
….SOME CODE….
END;
WHERE DDL_EVENT:
CREATE
ALTER
DROP
COMMENT.
GRANT.
REVOKE.
RENAME.
TRUNCATE.
Table created.
Trigger created.
Trigger created.
SQL> CONN
Enter user-name: SYS AS SYSDBA
Connected.
SQL> GRANT DBA TO SCOTT;
Grant succeeded.
SQL> CONN
Enter user-name: SCOTT
Connected.
Trigger created.
Trigger created.
Table created.
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
STARTUP.
SHUTDOWN
SERVERERROR
LOGON
LOGOFF
DECLARE
VARIABLE DECLARATIONS.
BEGIN
…SOME CODE…
END.
NOAFTERLOGOFF TRIGGERS.
NOBEFORESERVERERROR.
INLINEVIEW:
10 rows selected.
1 SELECT ENAME,SAL,DEPTNO
2 FROM EMP A
3 WHERE SAL < (SELECT MAX(SAL) FROM EMP B
4* WHERE A.DEPTNO=B.DEPTNO)
5 ORDER BY ENAME;
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:
FOR EXAMPLE:
SELECT [COLUMN_LIST],ROWNUM
AN OUTER QUERY TO LIMIT THE NUMBER OF ROWS IN THE FINAL RESULT SET.
THE OUTER QUERY INCLUDES THE FOLLOWING COMPONENTS:
USING A SEQUENCE:
A ROLLBACK OCCURS.
IF THE SEQUENCE WAS CREATED WITH NOCACHE, VIEW THE NEXT AVAILABLE
VALUE, BY QUERYING THE USER_SEQUENCES TABLE.
DATABASE LINKS:
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.
USING ‘SALES’;
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.
CORRELATED SUBQUERIES:
2. EXECUTE THE INNER QUERY USING THE VALUE OF THE CANDIDATE ROW.
THE OUTER QUERY EXECUTES ONCE,USING THE VALUE FROM THE INNER QUERY.
FIND ALL EMPLOYEES WHO EARN MORE THAN THE AVERAGE SALARY IN THEIR IN
THEIR DEPARTMENETS.
CORRELATED UPDATE:
Table created.
Table altered.
14 rows updated.
14 rows selected.
CORRELATED DELETE:
Table created.
Table created.
5 rows deleted.
9 rows selected.
14 rows selected.
9 rows deleted.
SYSTEM SECURITY.
DATA SECURITY.
DATABASE SECURITY COVERS ACCESS AND USE OF THE DATBASE OBJECTS AND
THE ACTIONS THAT THOSE USERS CAN HAVE ON THE OBJECTS.
SCHEMA:
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.
CREATING USERS:
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.
Grant succeeded.
THE DBA CREATES USER ACCOUNT YOU CAN CHANGE THE PASSWORD.
SQL> ALTER USER PAVAN
2 IDENTIFIED BY GAYATRI;
User altered.
ROLES:
OBJECT PRIVILEGES:
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.
3 TO GAYATRI
4 WITH GRANT OPTION;
Grant succeeded.
REVOKEING PERMISSIONS:
3* FROM GAYATRI;
Revoke succeeded.
YOU CANNOT REVOKE PRIVILEGES THAT YOU HAD NOT GRANT BEFORE.
USER TABLES:
DATA DICTIONARY:
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.
PL/SQL SECURITY:
THE ORACLE ENGINE AUTO MATICALLY LOCKS TABLE DATA WHILE EXECUTING
SQL STATEMENTS.
IMPLICIT LOCKING:
SINCE THE ORACLE ENGINE HAS FULLY AUTOMATIC LOCKING STRATEGY, IT HAS TO
DECIDE ON TWO ISSUES:
TYPES OF LOCKS:
HENCE,THE ORACLE ENGINE PLACES A SHARED LOCK ON A TABLE WHEN ITS DATA
IS BEING VIEWED.
ON 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.
WRITERS WAIT FOR OTHER WRITERS, IF THEY ATTEMPT TO UPDATE THE SAME
ROWS AT THE SAME TIME.
SHARED LOCKS:
EXCLUSIVE LOCKS:
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.
ROW LEVEL.
PAGE LEVEL.
TABLE LEVEL.
IF THE WHERE CLAUSE EVALUATES TO ONLY ONE ROW IN THE TABLE, A ROW LEVEL
LOCK IS USED.
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.
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.
EXPLICIT LOCKING:
USER CAN LOCK TABLES THEY OWN OR ANY TABLES ON WHICH THEY HAVE BEEN
GRANTED TABLE PRIVILEGES(SUCH AS SELECT,INSERT,UPDATE,DELETE).
TABLES OR ROWS CAN BE EXPLICITLY LOCKED BY USING EITHER THE SELECT… FOR
UPDATE STATEMENT, OR LOCK TABLE STATEMENT.
CLIENT A > SELECT * FROM ACCT_MSTR WHERE ACC_NO = ‘SB9’ FOR UPDATE.
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.
IF THIS HAPPENS THE ORCLE ENGINE TERIMINATES THE RUNNING DML AND COMES
UP WITH A MESSAGE INDICATING THAT THE RESOURCE IS BUSY.
CLIENT B> SELECT * FROM ACCT_MSTR WHERE ACC_NO = ‘SB9’ FOR UPDATE
NOWAIT;
OUTPUT:
SINCE 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.
[NO WAIT]
TABLE PARTITIONS:
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.
WE CAN ACCESS AND MANIPULATE DATA IN ONE PARTITION EVEN IF SOME OR ALL
OF THE OTHER PARTITION ARE UNAVAILABLE.
ADVANTAGES:
PARTITIONED TABLES CANNOT CONTAIN ANY COLUMNS WITH LONG OR LONG RAW
DATATYPES, LOB DATATYPES (BLOB,CLOB,NCLOB, OR BFILE) OR OBJECT TYPES.
DISK SPACE.
PROCESSING TIME.
(COL1 DATATYPE,
COL 2 DATATYPE,
…….
) PARTITION BY RANGE (COL_NAME)
3 ENAME VARCHAR2(10),
4 JOB VARCHAR2(10))
SQL> /
Table created.
2 VALUES
3 (1,'PAVAN','MANAGER');
1 row created.
2 VALUES
3* (2,'KUMAR','MANAGER')
SQL> /
1 row created.
2 VALUES
3* (11,'SMITH','MANAGER')
SQL> /
1 row created.
2 VALUES
3* (12,'ALLEN','CLERK')
SQL> /
1 row created.
2 VALUES
3* (10,'ARYA','CLERK')
SQL> /
1 row created.
SQL> COMMIT;
Commit complete.
3 ODATE DATE,
4 VENCODE VARCHAR2(10))
SQL> /
Table created.
2 VALUES
3 ('O001','23-FEB-99','V001');
1 row created.
2 VALUES
3* ('O002','23-FEB-99','V002')
SQL> /
1 row created.
2 VALUES
3* ('O015','23-FEB-99','V002')
SQL> /
1 row created.
2 VALUES
3* ('O025','23-FEB-99','V002')
SQL> /
1 row created.
2 VALUES
3* ('O026','23-FEB-99','V002')
SQL> /
1 row created.
2 VALUES
3* ('O027','23-FEB-99','V002')
SQL> /
1 row created.
SQL> COMMIT;
Commit complete.
SQL> /
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.
ADDING PARTITIONS.
DROPPING PARTITIONS.
SPLITTING PARTITIONS.
MOVING PARTITIONS:
Table altered.
ADDING PARTITIONS:
Table altered.
SPLITTING PARTITIONS:
Table altered.
1 row created.
1 row created.
1 row created.
1 row created.
SQL> COMMIT;
Commit complete.
Table altered.
Table created.
Table created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
SQL> COMMIT;
Commit complete.
Table created.
1 row created.
1 row created.
1 row created.
SQL> COMMIT;
Commit complete.
Table altered.