Sunteți pe pagina 1din 31

EXTRA INFO :-

***********

--TO PRINT A TO Z
SELECT chr(Ascii('@')+LEVEL) FROM DUAL CONNECT BY LEVEL <=26;
--TO PRINT 1 TO 10
SELECT LEVEL FROM DUAL CONNECT BY LEVEL <=10;
--TO GET DAY/MONTH/YEAR FROM A DATE FIELD - USING EXTRACT COMMAND
SELECT
EXTRACT(MONTH FROM SYSDATE),
EXTRACT(YEAR FROM SYSDATE),
EXTRACT(DAY FROM SYSDATE)
FROM DUAL;

-- RETERVIAL OF DROPPED TABLE & PERMANENTLY ERASING A TABLE & RETRIVEING RECORDS
AFTER DELETING IT WITH COMMIT
***********************************************************************************
****************************
SELECT * FROM RECYCLEBIN ORDER BY DROPTIME DESC - DROPPED OBJECTS CAN BE
VIEWED IN THIS TABLE(RECYCLEBIN)

PURGE TABLE <TABLE_NAME> - ONCE PURGED A TABLE -IT CANNOT BE RETRIVED.

FLASHBACK TABLE <TABLE_NAME> TO BEFORE DROP

SELECT * FROM <TABLE_NAME> AS OF TIMESTAMP ( SYSDATE-INTERVAL '30' MINUTE)

ANALYTICAL FUNCTIONS
*************************
1.RANK
2.DENSE_RANK
3.COUNT
4.LEAD
5.LAG
6.FIRST_VALUE
7.LAST_VALUE
8.FIRST
9.LAST
10.LISTAGG
11.WMCONCAT - NOT DOCUMENT , ONLY ',' I USED FOR CONCAT
12.ROLLUP
13.CUBE

OTHER CLAUSES:
1.WITH CLAUSE
2.PIVOT CLAUSE
3.MERGE CLAUSE
4.CONNECT BY PRIOR CLAUSE
5.DUPLICATE DELETION ROW CLAUSE

SYNTAX:
*******

WITH CLAUES :-
===========
WITH Q1 AS(SELECT DEPTNO,Sum(SAL) DEPT_SAL FROM EMP GROUP BY DEPTNO ),
Q2 AS (SELECT Avg(DEPT_SAL)AVG_DEPT_SAL FROM Q1)
SELECT Q1.DEPTNO,Q1.DEPT_SAL,Q2.AVG_DEPT_SAL
FROM Q1,Q2
WHERE Q1.DEPT_SAL > Q2.AVG_DEPT_SAL

PIVOT CLAUSE:- WORKS FROM ORACLE 11G VERSION NOT BELOW THAT
===============

SELECT * FROM
(
SELECT EMPNO,SAL
FROM EMP
)
Pivot
(
Count(SAL)
FOR SAL IN ('3000','5000')
)

MERGE CLAUSE :-
==============
GENERIC:-
--------
MERGE<TARGET_TABLE>
USING <SOURCE_TABLE>
ON <JOINING CONDITION>
WHEN MATCHED
<SQL STATMENT> - UPDATE
WHEN NOT MATCHED
<SQL STATMENT> - INSERT / CANT USE UPDATE IN 2ND STATMENT WHEN I TRIED

MERGE INTO EMP_BA A


USING EMP B
ON (A.EMPNO=B.EMPNO)
WHEN MATCHED THEN
UPDATE SET STATUS='MATCHED'
WHEN NOT MATCHED THEN
INSERT (A.EMPNO,A.ENAME,A.STATUS)
VALUES (B.EMPNO,B.ENAME,'NOT MATCH')

CONNECT BY PRIOR CLAUSE:-


========================
TREE STRCTURE QUERY :
SELECT LPAD(' ',LEVEL*2,' ')||ENAME ENAME, EMPNO, MGR
FROM EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO = MGR

NORMAL EMP -MGR RELATION QUERY :


SELECT EMPNO,ENAME, MGR
FROM EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO = MGR

DUPLICATE DELETION ROW CLAUSE


=============================
DELETE OT_SO_ITEM_200818 WHERE ROWID NOT IN (
SELECT MIN (ROWID) FROM OT_SO_ITEM_200818
GROUP BY SOI_SOH_SYS_ID )

--TO FIND NTH HIGHEST SALARY:-


*******************************

(I) USING ROWNUM -


SELECT * FROM (SELECT E.*, ROW_NUMBER() OVER (ORDER BY SAL DESC) ROWNUMB FROM
EMP E)WHERE ROWNUMB = 2;
(II)USING SUB QUERY :-
SELECT Max(SAL) FROM EMP WHERE SAL < (SELECT Max(SAL) FROM EMP) -- ONLY USED
FOR 1ST AND 2ND HIGHTEST SALARY
(III)DENSE RANK
SELECT * FROM ( SELECT empno,ename, sal,DENSE_Rank() OVER (ORDER BY SAL DESC)
RANKING FROM EMP e)WHERE RANKING = 3;
(IV) RANK
SELECT * FROM ( SELECT empno,ename, sal,Rank() OVER (ORDER BY SAL DESC) RANKING
FROM EMP e)WHERE RANKING = 3;
(V) USING LIMIT
SELECT DISTINCT SAL FROM EMP ORDER BY SAL DESC LIMIT 2,1;

SIMPLE SYNTAX:
**************

SELECT * FROM (
SELECT EMPNO,ENAME,SAL,
RANK() OVER ( ORDER BY SAL DESC) Rank,
DENSE_RANK() OVER ( ORDER BY SAL DESC) DENSERANK,
ROW_NUMBER() OVER ( ORDER BY SAL DESC) ROW_NUM
FROM EMP
)
WHERE Rank=2

-TO FIND NTH HIGHEST SALARY FOR THE NTH HIGHEST SALARY OF DEPTARMENT :-
*******************************************************************
typical query :-
----------------
SELECT * FROM
(
SELECT EMPNO,ENAME,SAL,DEPTNO, RANK () OVER(ORDER BY SAL DESC) RANK2
from emp
WHERE DEPTNO IN (SELECT DEPTNO FROM (
SELECT DEPTNO,SUM(SAL)total,
ROW_NUMBER() OVER (ORDER BY SUM(SAL)DESC ) RANKING
FROM EMP
GROUP BY DEPTNO
)
WHERE RANKING=2)
)
WHERE RANK2=2

*/
/* --LESSON 1
EXCEPTION HANDLING :-
USER DEFINED EXCEPTION
PRE DEFINED EXCEPTION

DECLARE
M_GH_FLEX_01 VARCHAR2(30);
CURSOR C1 IS
SELECT ROWNUM,ENAME,COMM FROM EMP WHERE COMM IS NOT null ORDER BY ENAME;
BEGIN
FOR I IN C1
LOOP
BEGIN
INSERT INTO EMP_TST (EMPNO,ENAME,COMM)
VALUES
(I.ROWNUM,I.ENAME,I.COMM);

EXCEPTION
--WHEN no_data_found THEN
WHEN OTHERS THEN
dbms_output.put_line('EXCEPTION RAISE-'||SQLCODE||'--'||SQLERRM);
DUMMY('BA-M_GH_FLEX_01-no_COMM_found-FOR ENAME-'||I.ENAME);
NULL;
END;
END LOOP;
END;

SELECT GH_FLEX_01 FROM OT_GR_HEAD WHERE GH_SYS_ID= 32841;

TRUNCATE TABLE TEMP5

SELECT * FROM TEMP5

SELECT * FROM EMP_TST

SELECT * FROM EMP

SELECT ENAME,COMM FROM EMP

--CREATE TABLE EMP_TST AS


SELECT * FROM EMP WHERE 1 =2

*/ --LESSION 2

/* LESSON- 3
CREATE TABLE SYNTAX:-
************************

CREATE TABLE OM_EMPLOYEE


( EMP_ID NUMBER NOT NULL,
EMP_NAME VARCHAR2(240) NOT NULL,
EMP_DEPT VARCHAR2(240) NOT NULL,
EMP_DOB DATE,
EMP_PER_ADDRESS VARCHAR2(240) NOT NULL,
EMP_TMP_ADDRESS VARCHAR2(240) NULL,
EMP_FRZ_FLAG_YN VARCHAR2(240) NOT NULL CHECK (EMP_FRZ_FLAG_YN IN ('Y','N'))

);

CREATE TABLE OM_DEPT


( DEP_ID VARCHAR2(240) NOT NULL CHECK (DEP_ID IN
('AC','FIN','HR','ADMIN','OPR','OTH')),
DEP_NAME VARCHAR2(240) NOT NULL ,
DEP_BLOCK_NAME VARCHAR2(240) NOT NULL,
EMP_FRZ_FLAG_YN VARCHAR2(240) NOT NULL

);

SELECT * FROM OM_EMPLOYEE

SELECT * FROM OM_DEPT

CONSTRAINT SYNTAX:
********************

ALTER TABLE OM_EMPLOYEE


ADD CONSTRAINT OM_EMP_ID_PK
PRIMARY KEY (EMP_ID);

ALTER TABLE OM_EMPLOYEE


ADD CONSTRAINT OM_EMP_ID_UNQ
UNIQUE (EMP_ID);

ALTER TABLE OM_EMPLOYEE


ADD CONSTRAINT OM_EMP_DEPT_FK
FOREIGN KEY (EMP_DEPT) REFERENCES OM_DEPT (DEP_ID);

ALTER TABLE OM_EMPLOYEE


ADD CONSTRAINT OM_EMP_DT_CHK
CHECK (To_Char(EMP_DOB,'YYYY' )<=2000);

DIFFERENCE BETWEEN PK VS UNIQUE/NOT NULL BOTH ARE SAME.

ALTER TABLE OM_DEPT


ADD CONSTRAINT OM_DEP_ID_PK
PRIMARY KEY (DEP_ID);

ENABLE/DISABLE CONSTRAINT SYNTAX:-


*********************************

ALTER TABLE OM_EMPLOYEE


DISABLE CONSTRAINT OM_EMP_ID_PK

ALTER TABLE OM_EMPLOYEE


ENABLE CONSTRAINT OM_EMP_ID_PK

ALTER TABLE OM_EMPLOYEE


DROP CONSTRAINT OM_EMP_ID_UNQ

SELECT * FROM USER_CONSTRAINTS


--WHERE CONSTRAINT_NAME ='OM_EMP_ID_PK'
WHERE TABLE_NAME='OM_DEPT'

ERROR FACED:
1.ORA-02261: such unique or primary key already exists in the TABLE
2.PRIMARY KEY OF OTHER TABLES IS NOT CREATED
3.INVALID REFERECEN DATATYPES WHERE FOREGIN KEY VARCHAR REFERE TO PRIMARY KEY
NUMBER

ADD/REMOVE/RENAME/MODIFY COLUMNS OF TABLE NAMEE


************************************************

ALTER TABLE OM_EMPLOYEE


ADD EMP_CR_UID VARCHAR2(240);

ALTER TABLE OM_EMPLOYEE


MODIFY EMP_CR_UID VARCHAR2(240) NOT NULL;

ALTER TABLE OM_EMPLOYEE


DROP COLUMN EMP_CR_UID ;

ALTER TABLE OM_EMPLOYEE


RENAME COLUMN EMP_CR_USR_ID TO EMP_CR_UID ;

JOINS:-
*******

TOTALLY 46 CUSTOMERS ARE THERE


TOTALLY 1468 INVOICES ARE MADE

BUT ONLY 26 CUSTOMERS MADE THOSE 1468 INVOICE , FEW CUSTOMERS WERE NOT BEEN
INVOCIED
JOINS CAN BE USED TO FIND WHICH CUSTOMER MADE OR NOT MADE THOSE INVOICES AND VICE
VERSA

SELECT * FROM OM_CUSTOMER


WHERE NOT EXISTS(SELECT 1 FROM OT_INVOICE_HEAD WHERE INVH_CUST_CODE=CUST_CODE)

SELECT * FROM OT_INVOICE_HEAD

SIMPLE/EQUI JOINS :-
********************

SELECT CUST_CODE,CUST_NAME,INVH_TXN_CODE,INVH_NO,INVH_DT
FROM OM_CUSTOMER,OT_INVOICE_HEAD
ON CUST_CODE =INVH_CUST_CODE

-------------------------------------------------------
SELECT CUST_CODE,CUST_NAME,INVH_TXN_CODE,INVH_NO,INVH_DT
FROM OM_CUSTOMER INNER JOIN OT_INVOICE_HEAD
ON CUST_CODE =INVH_CUST_CODE

LEFT OUTER JOINS :-


*********************

SELECT CUST_CODE,CUST_NAME,INVH_TXN_CODE,INVH_NO,INVH_DT
FROM OM_CUSTOMER,OT_INVOICE_HEAD
WHERE CUST_CODE =INVH_CUST_CODE(+)

-------------------------------------------------------
SELECT CUST_CODE,CUST_NAME,INVH_TXN_CODE,INVH_NO,INVH_DT
FROM OM_CUSTOMER LEFT JOIN OT_INVOICE_HEAD
ON CUST_CODE =INVH_CUST_CODE

RIGTH OUTER JOINS :-


*********************

SELECT CUST_CODE,CUST_NAME,INVH_TXN_CODE,INVH_NO,INVH_DT
FROM OM_CUSTOMER,OT_INVOICE_HEAD
WHERE CUST_CODE(+) =INVH_CUST_CODE

-------------------------------------------------------
SELECT CUST_CODE,CUST_NAME,INVH_TXN_CODE,INVH_NO,INVH_DT
FROM OM_CUSTOMER RIGHT JOIN OT_INVOICE_HEAD
ON CUST_CODE =INVH_CUST_CODE

FULL OUTER JOINS :-


*********************

SELECT CUST_CODE,CUST_NAME,INVH_TXN_CODE,INVH_NO,INVH_DT
FROM OM_CUSTOMER FULL JOIN OT_INVOICE_HEAD
ON CUST_CODE = INVH_CUST_CODE

Decode AND CASE DIFFERENCE:-


****************************

--GENERIC OR EXCAT VALUES CAN BE DECODED


--PERFORMANCE IS LESS

SELECT INVH_CUST_CODE,
DECODE(SUM(INVI_FC_VAL),2500,'BIG_CUSTOMER','SMALL_CUSTOMER')
FROM OT_INVOICE_HEAD,OT_INVOICE_ITEM
WHERE INVI_INVH_SYS_ID=INVH_SYS_ID
GROUP BY INVH_CUST_CODE

-RANGE OF VALUES CAN BE HANDLED


-FAST FOR PERFORMANCE
-HANDLING NULL IS SEPERATE EXCEPTION

SELECT INVH_CUST_CODE,
CASE WHEN Sum(INVI_FC_VAL) < 1000 THEN 'SMALL CUSTOMER'
WHEN Sum(INVI_FC_VAL) > 1000 THEN 'MEDIUM CUSTOMER'
WHEN Sum(INVI_FC_VAL) > 2500 THEN 'BIG CUSTOMER'
ELSE 'NOT IN RANGE'
END
FROM OT_INVOICE_HEAD,OT_INVOICE_ITEM
WHERE INVI_INVH_SYS_ID=INVH_SYS_ID
GROUP BY INVH_CUST_CODE

TRANSLATE VS REPLACE DIFFERENCE


********************************

The Replace Function replaces single character with multiple characters.


But in Translate Function replaces sinlge character with sinlge character ONLY

SELECT REPLACE('APPLEA','A','SSSS') FROM DUAL;

SELECT TRANSLATE('APPLEA','A','QQQQ') FROM DUAL;

LESSON- 4
------------------------
**********************************---------------------------------------
AGGREGATE FUNCTIONS:-
*********************

Min
Max
Avg
Sum
count

TYPES OF SUBQUERIES :-
***********************

SINGLE ROW SUBQUERY - RETURNS ONLY ONE Value IN AS SUBQUERY SO =>< MATHEMATICAL
OPERATORS CAN BE USED
MULTIPLE ROW SUBQUERY - RETURNS MORE THAN ONE ROWS SO ONLY IN CONDITION CAN BE
USED
CORRELATED SUBQUERY - OUTER QUERY EXECUTES FIRST AND THEN THE INNER QUERY
EXECUTES FOR EACH OUTER QUERY RESULTS
SIMILIAR TO EXISTS CONDTION
SELECT * FROM OM_CUSTOME RWHERE CUST_CODE NOT IN(SELECT
INVH_CUST_CODE FROM OT_INVOICE_HEAD WHERE CUST_CODE=INVH_CUST_CODE )
INLINE SUB QUERY - SELECT INVH_TXN_CODE,INVH_NO,INVH_CUST_CODE,(SELECT
CUST_NAME FROM OM_CUSTOMER=INVH_CUST_CODE) CUST_NAME
FROM OT_INVOICE_HEAD.

(I) USING ROW_NUMBER () OVER


------------------------------
SELECT * FROM (SELECT E.*, ROW_NUMBER() OVER (ORDER BY SAL DESC) ROWNUMB FROM EMP
E)WHERE ROWNUMB = 2;
(II)USING SUB QUERY :-
--------------------------
SELECT Max(SAL) FROM EMP WHERE SAL < (SELECT Max(SAL) FROM EMP) -- ONLY USED FOR
1ST AND 2ND HIGHTEST SALARY
(III)DENSE Rank
----------------------
SELECT * FROM ( SELECT empno,ename, sal,DENSE_Rank() OVER (ORDER BY SAL DESC)
RANKING FROM EMP e)WHERE RANKING = 3;
(IV) Rank
--------------
SELECT * FROM ( SELECT empno,ename, sal,Rank() OVER (ORDER BY SAL DESC) RANKING
FROM EMP e)WHERE RANKING = 3;
(V) USING LIMIT
------------------------
SELECT DISTINCT SAL FROM EMP ORDER BY SAL DESC LIMIT 2,1;

SQL FUNCTIONS :-
*******************

-STRING FUNCTIONS :
------------------

SELECT SubStr('ABCDEFGHIJKLMNO',2,6) FROM DUAL; -- CUTTING THE STRING

SELECT INSTR('ABCDEFGHIJKLMNO','E') FROM DUAL; -- FIND THE POSITNG OF THE GIVEN


STRING

SELECT REVERSE('MALAYALAM') FROM DUAL; -- USE TO FIND THE REVERESE STRING

-DATE FUNCTIONS :
-----------------

SELECT MONTHS_BETWEEN ('01-JUL-2018', '30-DEC-2017') FROM DUAL;

SELECT Add_Months ('01-JAN-2018' , 4) FROM DUAL;

ADDING TIME TO THE CURRENT TIMESTAMP :-


*****************************************
MUTIPLE TIMEZONES - SELECT SESSIONTIMEZONE,CURRENT_TIMESTAMP,SYSDATE FROM DUAL;

USING INTERVAL -
*******************

SELECT SYSDATE,SYSDATE + INTERVAL '8' HOUR HOUR,SYSDATE + 8 FROM DUAL;

SELECT INTERVAL '5-3' YEAR TO MONTH FROM DUAL;

SELECT INTERVAL '24' MONTH FROM DUAL;

SELECT INTERVAL '5' SECOND FROM DUAL;

SELECT INTERVAL '5' MINUTE FROM DUAL;

SELECT INTERVAL '5' HOUR FROM DUAL;

SELECT INTERVAL '5' DAY FROM DUAL;


SELECT INTERVAL '5' MONTH FROM DUAL;

SELECT INTERVAL '5' YEAR FROM DUAL;

SELECT INTERVAL '5-5' YEAR TO MONTH FROM DUAL;

DUPLICATION RECORDS FOUND USING GROUP BY CLAUSE :-


---------------------------------------------------

SELECT INVH_CUST_CODE, Count (*) COUNT_OF_INVOICE


FROM OT_INVOICE_HEAD
GROUP BY INVH_CUST_CODE
HAVING Count (*) BETWEEN 10 AND 50

MATHEMATICAL FUNCTIONS :-
************************

Round Floor Ceil

SELECT Round (100.090412,2) FROM DUAL;

SELECT Floor (100.090412) FROM DUAL;

SELECT Ceil (100.090412) FROM DUAL;

FORMATTING DATES :-
********************

SELECT SYSDATE FROM DUAL -- RETURN DATE N TIME

SELECT Trunc (SYSDATE) FROM DUAL -- RETURN DATE ALONE

SELECT To_Char(SYSDATE,'DD-MON-RRRR HH24:MI:SS') FROM DUAL -- RETURN DATE N TIME AS


PER REQUIRED FORMAT RAILWAY FORMAT

SELECT To_Char(SYSDATE,'DD-MON-RRRR HH12:MI:SS') FROM DUAL -- RETURN DATE AS PER


REQUIRED FORMAT AM/PM

VIEWS AND MATERIALIZED VIEW SYNTAX :-


**************************************

CREATE OR REPLACE VIEW OV_GRN_INV_VIEW AS


SELECT TYPE,COMP_CODE,TXN_CODE,DOC_NO FROM (
SELECT 'GRN' TYPE,GH_COMP_CODE COMP_CODE,GH_TXN_CODE TXN_CODE,GH_NO DOC_NO FROM
OT_GR_HEAD
UNION ALL
SELECT 'INV',INVH_COMP_CODE,INVH_TXN_CODE,INVH_NO FROM OT_INVOICE_HEAD)

CREATE MATERIALIZED VIEW OVMT_GRN_INV_VIEW AS


SELECT TYPE,COMP_CODE,TXN_CODE,DOC_NO FROM (
SELECT 'GRN' TYPE,GH_COMP_CODE COMP_CODE,GH_TXN_CODE TXN_CODE,GH_NO DOC_NO FROM
OT_GR_HEAD
UNION ALL
SELECT 'INV',INVH_COMP_CODE,INVH_TXN_CODE,INVH_NO FROM OT_INVOICE_HEAD)

SELECT * FROM USER_OBJECTS ORDER BY CREATED DESC

DIFFENCE BETWEEN NORMAL/MATERIALIZED VIEWS :-


**********************************************

WAYS TO REFRESH THE MATERIALIZED VIEWS:-


****************************************

SCHEMA OBJECTS TABLES:-


**************************

DATA DICTIONARY TABLES - USER/ALL/DBA

SELECT * FROM USER_TABLES --TO GET THE TABLE STATICS

SELECT * FROM ALL_TABLES --TO GET THE TABLE STATICS

SELECT * FROM DBA_TABLES --TO GET THE TABLE STATICS

SELECT * FROM USER_INDEXES

SELECT * FROM USER_TABLES --TO GET THE TABLE STATICS

SELECT * FROM USER_CONS_COLUMNS

SELECT * FROM USER_CONSTRAINTS

SELECT * FROM USER_PROCEDURES

SELECT * FROM USER_PROCEDURES

SELECT * FROM USER_OBJECTS

SELECT * FROM USER_SYNONYMS WHERE SYNONYM_NAME ='EMP_SYS_ID'

SELECT * FROM USER_DB_LINKS

SELECT * FROM USER_VIEWS

SELECT * FROM ALL_INDEXES

CREATE SEQUENCE EMP_IS_SYS_ID


MINVALUE 0
MAXVALUE 99 --- LENGTH OF SEQUENCED CAN BE MAXIMUM UPTO LINE OF
27
INCREMENT BY 1
NOCYCLE --- RECYCLE CAN BE DONE WHEN MAXIMUM LIMITS EXCEEDS
NOORDER
CACHE 20 --- PERFORMANCE WILL BE ENHACED/ MAXIMUM MEMORY IS 27

CREATE SYNONYM EMP_SYS_ID FOR IS_ITEM_SYS_ID;

CREATE SYNONYM SYM_EMP FOR EMP;

CREATE OR REPLACE VIEW EMP_SMP_VIEW AS

SELECT * FROM EMP

DELETE FROM EMP WHERE EMPNO=7755

DELETE FROM EMP_SMP_VIEW WHERE EMPNO=7369

ROLLBACK

COMMIT

CREATE MATERIALIZED VIEW EMP_MAT_VIEW_IM


BUILD IMMEDIATE --|DEFERRED
REFRESH FAST || COMPLETE ||FORCE
ON DEMAND
ENABLE QUERY REWRITE
AS
SELECT * FROM EMP

LOG CREATIONS :
CREATE OR REPLACE MATERIALIZED VIEW LOG ON EMP(EMPNO)
ON ROWID|| PRIMARY KEY

METHOD OF REFRESHING :
--------------------------

i EXECUTE COMMAND
ii CAN BE ATTACHED AS ORACLE JOBS

EXEC SYS.DBMS_MVIEW.REFRESH(EMP_MAT_VIEW);

DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'PNS_TEST_INV_PUSH'
,next_date => TO_DATE('21/03/2018 00:01:00','dd/mm/yyyy hh24:mi:ss')
,INTERVAL => 'TRUNC(SYSDATE)+1'
,no_parse => TRUE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || TO_CHAR(x));
END;
/

CURSOR:-

IMPLCIT CURSOR
EXPLICIT CURSOR

CURSOR ATTRIBUTES

%NOTFOUND
%FOUND
%ISOPEN
%ROWCOUNT
%BULK_ROWCOUNT
%BULK_EXCEPTIONS

ARRAYs:-
********
-IT IS A DATA STRCTURE, IT CAN STORE COLLECTION OF DATA IN A SINGLE VARIABLE OF
SAME "DATA TYPE"
-VARIABLE SIZE ARRAY IS CALLED VARRAY - SIZE OF ARRAY CAN BE DYNMAICALLY CHANGED
-SINCE INDEX IS ASSOCAIATED WITH IT , IT ENHANCES THE PERFORMANCE

QUESTIONS:-
*************
1.Why there we should intiliaze ARRAY
2.CURSOR IS required TO get AND assing RECORD VALUES TO ARRAY instead we can USE
the CURSOR directly what IS the USE OF it.
3.what IS the USE OF extend command
4.

EXAMPLE:- BASIC SYNTAX EXAMPLE


--------

DECLARE
TYPE namesarray IS VARRAY(5) OF VARCHAR2(10);
TYPE grades IS VARRAY(5) OF INTEGER;
NAMES namesarray;
MARKS grades;
TOTAL integer;
BEGIN
names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz');
names := namesarray('SURYA', 'DEVA', 'KARTHIK', 'SHAKTHI', 'MAYA');
--names := namesarray(SELECT GH_FLEX_01,GH_FLEX_02,GH_FLEX_03 FROM OT_GR_HEAD);
marks:= grades(98, 97, 78, 87, 92);
-- total := names.count;

dbms_output.put_line('Total '|| total || ' Students');


FOR i in 1 .. total
LOOP
dbms_output.put_line('Student: ' || names(i) || ' Marks: ' || marks(i));
END LOOP;

dbms_output.put_line('Total '|| names.count);

FOR I IN 1..NAMES.Count
LOOP

dbms_output.put_line((I)|| 'NAME OF A CHILDREN-->'||names(I)||'-MARKS IS


-'||marks(I));

IF NAMES(I)='Kavita' THEN
dbms_output.put_line('IT IS A GIRL');
END IF;

IF (I)=5 THEN
dbms_output.put_line('LAST RANK OF THE CLASS IS '||NAMES(4));
END IF;

END LOOP;
END;

EXAMPLE 2:- RELATED WITH ORION EXAMPLE


-------------

DECLARE
TYPE namesarray IS VARRAY(5) OF VARCHAR2(10);
TYPE grades IS VARRAY(5) OF INTEGER;
NAMES namesarray;
MARKS grades;
TOTAL integer;
BEGIN
names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz');
--names := namesarray('SURYA', 'DEVA', 'KARTHIK', 'SHAKTHI', 'MAYA');
--names := namesarray(SELECT GH_FLEX_01,GH_FLEX_02,GH_FLEX_03 FROM OT_GR_HEAD);
marks:= grades(98, 97, 78, 87, 92);
-- total := names.count;

dbms_output.put_line('Total '|| total || ' Students');


FOR i in 1 .. total
LOOP
dbms_output.put_line('Student: ' || names(i) || ' Marks: ' || marks(i));
END LOOP;

dbms_output.put_line('Total '|| names.count);

FOR I IN 1..NAMES.Count
LOOP

dbms_output.put_line((I)|| 'NAME OF A CHILDREN-->'||names(I)||'-MARKS IS


-'||marks(I));

IF NAMES(I)='Kavita' THEN
dbms_output.put_line('IT IS A GIRL');
END IF;

IF (I)=5 THEN
dbms_output.put_line('LAST RANK OF THE CLASS IS '||NAMES(4));
END IF;

END LOOP;

END;

DECLARE
CURSOR c_customers is
SELECT Ename FROM EMP;
type c_list is varray (11) of EMP.Ename%type;
name_list c_list := c_list();
counter integer :=0;
BEGIN
FOR n IN c_customers
LOOP
counter := counter + 1;
name_list.extend;
name_list(counter) := n.Ename;
dbms_output.put_line('Customer('||counter ||'):'||name_list(counter));
END LOOP;

dbms_output.put_line('Total Employees -'||NAME_LIST.Count);

FOR I IN 1..NAME_LIST.Count
LOOP

IF I=1 THEN
dbms_output.put_line(NAME_LIST(i)||' is emp is MR');
ELSIF i=5 THEN
dbms_output.put_line(NAME_LIST(i)||' isemp is tl');
ELSIF i=7 THEN
dbms_output.put_line(NAME_LIST(i)||' isemp is vp');
ELSIF i=9 THEN
dbms_output.put_line(NAME_LIST(i)||' isemp is svp');
else
dbms_output.put_line(NAME_LIST(i)||' isemp is g2');
END IF;

END LOOP;
END;

BASIC STRCUTRE IN DATA TYPES OF PLSQL


***************************************

DATA TYPE IS IN PLSQL TWO TYPE


(I) SCALAR DATA TYPES - NUMBER/DATE/VARCHAR2/CHAR/INTEGER

(II) COMPOSITE DATA DATYPES -


1.PLSQL RECORDS
(i) TABLE BASED RECORD
(ii) CURSOR BASED RECORD
(iii)USER DEFINED RECORD

2.PLSQL COLLECTIONS
(i) INDEX BY TABLE OR ASSOCIATE ARRAY - UNBOUND|I-
NUM/CHAR|OBJ|NO INITILIAZATION OR EXTENSION REQUIRED
(ii) NESTED TABLE - UNBOUND|I-
NUMBER|OBJ|INITILIAZATION OR EXTENSION IS MUST
(iii) VARRY OR VARIABLE ARRAY - BOUNDED|I-
NUMBER|NO OBJ

DETAILED EXPLANATION :-
**************************

1.PLSQL RECORDS
(i) TABLE BASED RECORD - %ROWTYPE(ENTRIE TABLE) & %TYPE(FOR COLUMN)
(ii) CURSOR BASED RECORD - AFTER DEFINING CURSOR C1.... V_REC C1%ROWTYPE
(iii)USER DEFINED RECORD - TYPE V_TAB
IS RECORD
(
SO_ITEM_CODE VARHCAR2(100),
SO_ITEM_DESC VARHCAR2(100),
SO_ITEM_LOCN VARHCAR2(100),
SO_ITEM_RATE NUMBER
);

V_SO_REC V_TAB ;---:= V_TAB();

V_SO_REC := V_TAB('1001','PAINT','LOC_001','250')

DBMS_OUTPUT.PUT_LINE (V_SO_REC.)

EXAMPLE FOR USER DEFINED RECORD STRCTURE :-

DECLARE

TYPE V_TAB
IS RECORD
(
SO_ITEM_CODE VARCHAR2(100),
SO_ITEM_DESC VARCHAR2(100),
SO_ITEM_LOCN VARCHAR2(100),
SO_ITEM_RATE NUMBER
);

V_SO_REC V_TAB;

BEGIN

V_SO_REC.SO_ITEM_CODE := '1001';
V_SO_REC.SO_ITEM_DESC := 'PAINT';
V_SO_REC.SO_ITEM_LOCN := 'LOC_001';
V_SO_REC.SO_ITEM_RATE := 250; - 1
V_SO_REC.SO_ITEM_RATE := 500; - 2

DBMS_OUTPUT.PUT_LINE ('ITEM_CODE-'||V_SO_REC.SO_ITEM_CODE);
DBMS_OUTPUT.PUT_LINE ('ITEM_DESC-'||V_SO_REC.SO_ITEM_DESC);
DBMS_OUTPUT.PUT_LINE ('ITEM_LOCN-'||V_SO_REC.SO_ITEM_LOCN);
DBMS_OUTPUT.PUT_LINE ('ITEM_RATE-'||V_SO_REC.SO_ITEM_RATE);
END ;

2.PLSQL COLLECTIONS
*****************

DEFINITION :-
===========
WHAT - It is group of elements having the same or different data type.
Each element is identified by a unique subscript or physical index ,
INITLIAZATION & EXTENSION IS MUST FOR COLLECTION (NESTED & VARRY TYPE) NOT
FOR INDEX BY TABLE TYPE.
that represents its position & value stored in the collection.
WHY - It reduce the transaction or communication between sql & plsql engine
which resuls less cost has more performance
WHEN - When data volumne is huge / corresponding sga/pga memory allocation is
avlaiable using LIMIT

TYPES :-
=====

-(i) INDEX BY TABLE OR ASSOCIATE ARRAY

EX:1-- SIMPLE ASSINGING VALUE AND PRINTING THE OUTPUT


NOTE:- 1.NO INITLIZATION IS REQUIRED NOR CONSTRUCTOR/EXTENSION IS REQUIRED SINCE
IT IS INDEX BY TABLES/ASSOICATIVE ARRAY
2.PRINTING OUTPUT WITH INDEX IS EASY / PRINTIN O/P WITH THE INDEX
CHARACTER IS BIT TRICKY (REFER BELOW EXAMPLE)

DECLARE
TYPE V_TAB_1 IS TABLE OF NUMBER
INDEX BY PLS_INTEGER;

TYPE V_TAB_2 IS TABLE OF NUMBER


INDEX BY VARCHAR2(10);

V_LIST_1 V_TAB_1 ;
V_LIST_2 V_TAB_2 ;

STRING VARCHAR2(100);

BEGIN
FOR I IN 1 .. 100
LOOP

V_LIST_1(I) :=I;
DBMS_OUTPUT.put_line('V_LIST_1(1)-'||V_LIST_1(I));---||'-V_LIST_2(B)-'||
V_LIST_2('B'));
NULL;
END LOOP;

V_LIST_2('A') :=500;
V_LIST_2('B') :=600;
V_LIST_2('C') :=700;

STRING := V_LIST_2.FIRST ;

WHILE STRING IS NOT NULL


LOOP
DBMS_OUTPUT.put_line('V_LIST_2(1)-'||V_LIST_2(STRING));
STRING := V_LIST_2.NEXT(STRING);
END LOOP;

END;

***************---------------------*******************

-(ii) NESTED TABLE

EX:1-- SIMPLE ASSINGING VALUE AND PRINTING THE OUTPUT


NOTE: 1.INITILIAZATION /CONSTRUCTOR /EXTENSION IS MUST-- TO AVOID UNINTILIAZIED
COLLECTION & SUBSCRIPT BEYOND COUNT ERROR

DECLARE
TYPE V_TAB_1 IS TABLE OF NUMBER;
TYPE V_TAB_2 IS TABLE OF NUMBER;

V_LIST_1 V_TAB_1 := V_TAB_1 (); -- INITILIAZATION


V_LIST_2 V_TAB_2 := V_TAB_2 (); -- INITILIAZATION

BEGIN

FOR I IN 1 .. 100
LOOP
V_LIST_1.EXTEND;
V_LIST_1(I) :=I; -- CONSTRUCTOR/EXTENSION
DBMS_OUTPUT.put_line('V_LIST_1(1)-'||V_LIST_1(I));---||'-V_LIST_2(B)-'||
V_LIST_2('B'));
NULL;
END LOOP;

V_LIST_2.EXTEND; -- CONSTRUCTOR/EXTENSION
V_LIST_2(1) :=500;
V_LIST_2.EXTEND; -- CONSTRUCTOR/EXTENSION
V_LIST_2(2) :=600;
V_LIST_2.EXTEND; -- CONSTRUCTOR/EXTENSION
V_LIST_2(3) :=700;

FOR I IN V_LIST_2.FIRST .. V_LIST_2.LAST


LOOP
DBMS_OUTPUT.put_line('V_LIST_2(1)-'||V_LIST_2(I));
END LOOP;

END;

***************---------------------*******************

-(iii) VARRY OR VARIABLE ARRAY

EX:1-- SIMPLE ASSINGING VALUE AND PRINTING THE OUTPUT


NOTE: 1.INITILIAZATION /CONSTRUCTOR /EXTENSION IS MUST-- TO AVOID UNINTILIAZIED
COLLECTION & SUBSCRIPT BEYOND COUNT ERROR

DECLARE
TYPE V_TAB_1 IS VARRAY(10) OF NUMBER;
TYPE V_TAB_2 IS VARRAY(5) OF VARCHAR2(10);

V_LIST_1 V_TAB_1 := V_TAB_1 (); -- INITILIAZATION


V_LIST_2 V_TAB_2 := V_TAB_2 (); -- INITILIAZATION

BEGIN

FOR I IN 1 .. 10
LOOP
V_LIST_1.EXTEND;
V_LIST_1(I) :=I; -- CONSTRUCTOR/EXTENSION
DBMS_OUTPUT.put_line('V_LIST_1(1)-'||V_LIST_1(I));---||'-V_LIST_2(B)-'||
V_LIST_2('B'));
NULL;
END LOOP;

V_LIST_2.EXTEND; -- CONSTRUCTOR/EXTENSION
V_LIST_2(1) :='ARJUN';
V_LIST_2.EXTEND; -- CONSTRUCTOR/EXTENSION
V_LIST_2(2) :='BENTLY';
V_LIST_2.EXTEND; -- CONSTRUCTOR/EXTENSION
V_LIST_2(3) :='CATHY';

FOR I IN V_LIST_2.FIRST .. V_LIST_2.LAST


LOOP
DBMS_OUTPUT.put_line('V_LIST_2(1)-'||V_LIST_2(I));
END LOOP;

END;
--PERFORMING DML USING NORMAL FOR LOOP AND BULK BIND
*****************************************************

EX :1 INSERT STAMENT
======================

DECLARE

CURSOR C1 IS
SELECT * FROM USER_OBJECTS;

TYPE V_TAB IS TABLE OF USER_OBJECTS%ROWTYPE;


V_REC V_TAB;

BEGIN
OPEN C1;
LOOP

FETCH C1 BULK COLLECT INTO V_REC ;--LIMIT 9000;

FORALL I IN 1..V_REC.COUNT
INSERT INTO TEST_OBJ_TAB VALUES V_REC(i);

EXIT WHEN C1%NOTFOUND;


END LOOP;
CLOSE C1;
END ;

EX:2 UPDATE STATMENT


========================

DECLARE
TYPE R_TAB IS TABLE OF NUMBER;
R_LIST R_TAB :=R_TAB();

START_TIME NUMBER;

BEGIN

FOR I IN 1..9

LOOP
R_LIST.EXTEND;
R_LIST(I) := I;

END LOOP;

START_TIME :=Dbms_Utility.GET_TIME;

----DML USING NORMAL FOR LOOP IN COLLECION

FOR I IN R_LIST.FIRST .. R_LIST.LAST


LOOP
Dbms_Output.PUT_LINE('FOR TOTAL COUNT---'||R_LIST(I));
UPDATE IM_PROG_FIELD_DEFN SET PFD_LOWERCASE_YN_NUM =R_LIST(I);
END LOOP;

DBMS_OUTPUT.put_line ('EXECUTION TIME FOR LOOP--'||(Dbms_Utility.GET_TIME-


START_TIME));

----DML USING BULK BIND

START_TIME :=Dbms_Utility.GET_TIME;
FORALL I IN R_LIST.FIRST .. R_LIST.LAST --SAVE EXCEPTIONS
UPDATE IM_PROG_FIELD_DEFN SET PFD_LOWERCASE_YN_NUM =R_LIST(I);

DBMS_OUTPUT.put_line ('EXECUTION TIME FOR ALL LOOP--'||


(Dbms_Utility.GET_TIME-START_TIME));

END;

EX:3 COLLECTIONS HANDLING EXCEPTION USING SAVE EXCEPTION TO CAPTURE UNPROCESSED


RECORDS

===================================================================================
===========================

DECLARE

CURSOR C1 IS
SELECT * FROM USER_OBJECTS;

TYPE V_TAB IS TABLE OF USER_OBJECTS%ROWTYPE;


V_REC V_TAB;

BEGIN

OPEN C1;
LOOP
FETCH C1 BULK COLLECT INTO V_REC ;--LIMIT 9000;
EXIT WHEN C1%NOTFOUND;
END LOOP;

Dbms_Output.PUT_LINE('TOT-RECORDS-IN-COLLECTION-FETCHED-'||V_REC.COUNT);

FORALL I IN 1..V_REC.COUNT SAVE EXCEPTIONS


INSERT INTO TEST_OBJ_TAB VALUES V_REC(i);

EXCEPTION
WHEN OTHERS THEN
--V_ERR := SQL%BULK_EXCEPTIONS.Count ;
Dbms_Output.PUT_LINE ('TOT NO OF RECORDS IN EXCEPTIONS-'||SQL
%BULK_EXCEPTIONS.Count);
Dbms_Output.PUT_LINE ('--EXCEPTIONS-ENCOUNTER-'||SQLCODE||'-ERROR-MESSAGE-'||
SQLERRM);

FOR I IN 1..100
LOOP
DBMS_OUTPUT.PUT_LINE ('EXCEPTION INDEX POISITION--'||SQL
%BULK_EXCEPTIONS(I).ERROR_INDEX
||'--EXCEPTION ERROR AT INDEX--'||SQLERRM(-SQL
%BULK_EXCEPTIONS(i).ERROR_CODE)
);
END LOOP;
CLOSE C1;

END ;

COLLECTIONS METHODS:-
=====================

1.EXISTS
2.LIMIT
3.COUNT
4.PRIOR/NEXT
5.FIRST/LAST
6.TRIM/TRIM(N)
7.DELETE/DELTE(N)/DELETE(M,N)

COLLECTION EXCEPTIONS
=====================
1.COLLECTION_IS_NULL You try to operate on an atomically null collection.
2.NO_DATA_FOUND A subscript designates an element that was deleted, or a
nonexistent element of an associative array.
3.SUBSCRIPT_BEYOND_COUNT A subscript exceeds the number of elements in a
collection.
4.SUBSCRIPT_OUTSIDE_LIMIT A subscript is outside the allowed range.

PIPELINE FUNCTION
*****************
WHAT - 1.It produce a collection of rows (either a nested table or a varray)
that can be queried like a physical database table

WHY - 1.Streaming, pipelining, and parallel execution of table functions can


improve performance
2.By enabling multithreaded, concurrent execution of table functions
3.By improving query response time
4.collection returned by a table function as the rows are produced
instead of waiting until
the entire collection is staged in tables
5.Usage of SGA(system global area) memory is very less so performance
increased.

WHEN - when the data volumne is huge


(i)During data transfering from one staging to another staging tables
(ii)To generate reports from huge records.
(iii)during ETL processing (Extraction Transaformation Load)
datawarehousing-the intermediate stages can be eliminated if we using
table pipeline functions

EXAMPLE:-
========

CREATE TYPE t_tf_row AS OBJECT (


id NUMBER,
description VARCHAR2(50)
);
/

CREATE TYPE t_tf_tab IS TABLE OF t_tf_row;

-- Build the table function itself.


CREATE OR REPLACE FUNCTION get_tab_tf (p_rows IN NUMBER) RETURN t_tf_tab AS
l_tab t_tf_tab := t_tf_tab();
BEGIN
FOR i IN 1 .. p_rows LOOP
l_tab.extend;
l_tab(l_tab.last) := t_tf_row(i, 'Description for ' || i);
END LOOP;

RETURN l_tab;
END;

-- Build a pipelined table function.


CREATE OR REPLACE FUNCTION get_tab_ptf (p_rows IN NUMBER) RETURN t_tf_tab PIPELINED
AS
BEGIN
FOR i IN 1 .. p_rows LOOP
PIPE ROW(t_tf_row(i, 'Description for ' || i));
END LOOP;

RETURN;
END;
/

SQL LOADER:
************

What -1.It is tool/exe file avaiable in the oracle DB which will allow you to
transfer data from flat file into db tables
When - Reason sql loader is used to to read data from flat windows files, for
instance report should be generated based the excel/notepad file which we
receive on daily basis, in such cases once report is generated there is
no use of holding that excel data..so the excel data is no longer required to
store in the db details
Why - It is much faster and easier way to load data from other flats files to DB
How it works :
(i) Based on the control file , data from the flat file is transfered into the db
tables
(ii)Commands used to call or evoke sql loader
In Cmd promt - cd..<enter> then Sqlldr userid = <schema_name>/<password>
<enter>
Control= <Define the path of control
file>
(iii) They are two type of Flat files
* Variable record flat file
* Fixed record flat file
(iv)During data transfer , they were 4 different set of files were generated
Various files during data transfer
1.(.bad) - Bad file
2.(.ctl) -Control file
3.(.log) - Log file
4.(.dsc) - Discared file

(v) what IS

Log FILE - Total no OF records proceed/skipped.discared records


Count/rejected records Count
TIME Log such informations are stored IN the Log FILE

Control FILE - It IS a FILE WHERE you will be defining the path OF the flat
FILE which TO be READ
Clauses LIKE - INSERT/Append/TRUNCATE/REPLACE
COLUMNS names are mentioned IN it - Filers/CONSTANT
WHEN clause can be used

Bad FILE - Rejected records are present IN the bad FILE such AS
Datatype mismatch
business voliations
CONSTRAINT EXCEPTIONS records

Discarded FILE- Discared recors USING WHERE clauses are present/printed IN the
discared files

(vi)Syntax :-

LOADDATA
INFILE <PATH OF CONTROL FILE> --|| INFILE *(IF data present inside control
file)
--Badfile '<badfile_name>.bad'--optinal to defauld bad file name
INSERT ||APPEND||TRUNCATE INTO <TABLE_NAME>
FIELDS TERMINATED BY ','
(<column_name1>,<column_name2>,<column_name3>..)

Data transfer can be done WITH the control FILE WHERE text can present inside
the control FILE
You can also give a DEFAULT name FOR the bad FILE which USING the syntax FILE
Badfile '<badfile_name>.bad'

(vii) Other points:


Fillers can be used TO skip a COLUMN (col1,col2 filler,col3)
CONSTANT can be used TO ADD a CONSTANT Value FOR a COLUMN (col1,col2
filler,col3 CONSTANT 'HYD')
Decode FUNCTION can be used
(col1,col2,col3"Decode(:col3,'M','Male','F','Female')")
Optionally enclosed BY '"'
Different delimiters can be addresesed - (col1,col2.terminated BY '$',col3,..)
SEQUENCE can be used (col1 "seq.nextval",col2,col3..)
SQL loader datatypes intger external/CHAR/DECIMAL external
Append - adding more data INTO TABLE
Trailling NULL cols - TO load nulls VALUES INTO TABLE
Optionally enclosed BY '' - ?
REPLACE - existing data will be replaced

OPTIMIZATION / PERFORMANCE TUNNING:-


**********************************
OPTIMIZER HINT - ?
PROFILIER - ?
DIRECTIVES -?
AWRL HINT -?

HELPING THE ORACLE OPTIMIZER TO MAKE DATA RETREIVAL FAST WITH FOLLOWING
SOME BASIC RULE OF QUERY WRITTING
IS CALLED OPTIMIZATION OR PREFORMANCE TUNNING

RULE BASED OPTIMIZATION


COST BASED OPTIMIZATION

RULE BASED OPTIMIZATION:-


=========================
1.USE EXIST/NOT EXISTS INSTEAD OF IN/NOT CONDITION
2.USE UNION INSTEAD OF UNION ALL IF WE KNOW THERE IS NO DUPLICATION IN RECORDS FOR
SURE
3.USE WITH CLAUSE IF THERE ARE MORE THAN 1 SUBQUERY OR INLINE QUERY IS INVOLVED
4.TRY TO AVOID Nvl(COL1,'X') INSTEAD USE COL1 LIKE '%'
5.TRY TO AVOID ARITHEMATIC OPERATOR ON LEFT SIDE OF YOUR WHERE CLAUSE
FROM <TBNAME>
WHERE N+100 < 500 -- CHANGE LOGIC TO WHERE N < 400
6.USE FUNCTION ON WHERE CLAUSE COLUMN ONLY IF THOSE COLUMNS HAVE FUNCTION BASED
INDEX

COST BASED OPTIMIZATION:-


==========================
7.REVIEW THE OPTIMIZING STATICS IN EXPLAIN PLAN AND DO OPTIMIZATION ACCORDING BASED
ON TABLE SCAN METHODS

SO WHAT IS IS EXPLAIN PLAN AND DIFFERENT TYPES OF TABLE SCAN METHODS

EXPLAIN PLAN IS A STASTICAL WINDOW WHICH WILL SHOW THE-

OPERATIONS || SCANNING METHOD || CARDINALITY || COST || TIME EXCUTION ||


JOINING METHODS || JOINING TYPES ||

IN SQL TOOLS PRESS - F9 AND TOAD(I GUESS) CTRL + K

SYNTAX FOR EXPLAIN PLAN TO CHECK AT SQL PLUS FOLLOWS :


EXPAIN PLAN FOR
<SELECT * FROM EMP;> ---YOUR QUERY
SELECT * FROM TABLE (DBMS_XPLAN.DISPLAY()); --- U WILL GET THE ABOVE
INFORATIONS - OPERATIONS/SCANNING METHODS/COST FROM THAT TABLE

INDEXES :-
***********

BEFORE INDEXING:-
*****************
SELECT * FROM EMP WHERE EMPNO BETWEEN 7500 AND 7844
--TABLE ACCESS METHOD /SCANNING METHOD IS---TABLE SCAN(FULL)
AFTER INDEXING:-
****************
CREATE UNIQUE INDEX EMP_NO_IND ON EMP(EMPNO)
--TABLE ACCESS METHOD /SCANNING METHOD IS --- --INDEX (RANGE_SCAN)
SELECT * FROM EMP WHERE EMPNO BETWEEN 7500 AND 7844

FUNCTIONAL BASED INDEX:-


**********************
CREATE INDEX IDX ON EMP(Upper(ENAME));
SELECT * FROM EMP WHERE Upper(ENAME )='KING'

INDEX UNUSABLE;
---------------

-THE OPTIMIZER WILL SCAN BASED ON TABLE ACCESS FULL AND IT WILL NOT USE INDEX
-ALSO SEGMENTS WILL BE DROPPED IN USER_SEGMENTS

SYNTAX:-
ALTER INDEX EMP_NO_IND UNUSABLE;

TO GO BACK RANGE SCAN WE NEED TO REBUILT INDEX

REBILDING INEXING :-
- THE USE OF THIS REBUILD IS IT WILL ALLOCATE MEMORY BASED ON PRESENT DATA IN
THE TABLE
- ALSO ROWID WILL BE GENERATE NEWLY...

SYNTAX :-
ALTER INDEX EMP_NO_IND REBUILD;

BITMAP INDEXES :-
================
CREATE TABLE EMPLOYE
(
ID NUMBER,
GENDER VARCHAR2(10)
)

BEGIN
INSERT INTO EMPLOYE (ID,GENDER) VALUES(1,'MALE');
INSERT INTO EMPLOYE (ID,GENDER) VALUES(2,'FEMALE');
INSERT INTO EMPLOYE (ID,GENDER) VALUES(3,'MALE');
INSERT INTO EMPLOYE (ID,GENDER) VALUES(4,'FEMALE');
INSERT INTO EMPLOYE (ID,GENDER) VALUES(5,'MALE');
INSERT INTO EMPLOYE (ID,GENDER) VALUES(6,'FEMALE');
END;

COMMIT;

CREATE BITMAP INDEX BITM_INX_GEN ON EMPLOYE(GENDER);

SELECT * FROM EMPLOYE WHERE GENDER='MALE'

BITMAP INDEX

BEFORE CREATING BITMAP INDEX

SELECT * FROM EMPLOYE WHERE GENDER='MALE'

SCANNING METHODS::::
TABLE ACCESS FULL

AFTER CREATING BITMAP INDEX

SYNTAX:::

CREATE BITMAP INDEX BITM_INX_GEN ON EMPLOYE(GENDER);

SELECT * FROM EMPLOYE WHERE GENDER='MALE'

SCANNING :::
TABLE ACCESS BY INDEX ROWID
BITMAP INDEX(SINGLE Value) --- IMPORTANT POINT ----

-----------INDEX INVISIBLE & VISIBLE -------------------

IT IS A 11G FEATURE

BEFOR INVISIBLE ::::::

SELECT * FROM BCM_QUESTIONNAIRE WHERE BQ_SYS_ID BETWEEN 9107 AND 9150

THE SCANNING WILL BE BASED ON TABLE_ACCESS FULL

SYNTAX:::

ALTER INDEX BQ_SYS_ID_PK INVISIBLE ;


ONCE WE INVISIBLE THE MEMORY IN USER_SEGMENTS WILL REMAINS SAME.

AFTER INVISIBLE ::::::

SELECT * FROM BCM_QUESTIONNAIRE WHERE BQ_SYS_ID BETWEEN 9107 AND 9150

THE SCANNING WILL BE BASED ON INDEX RANGE SCAN

SYNTAX:::

ALTER INDEX BQ_SYS_ID_PK VISIBLE ;

THIS COMMAND IS USED TO MAKE INDEX VISIBLE FOR INVISIBLE INDEX

------------------------

INDEX ORGANIZED TABLE OR IOT:-


****************************

WHAT - IT IS A TABLE WHERE DATA IS SORTED IN ASC ORDER BY DEFAULT WHEN COMPARED
WITH NORMAL TABLE CALLED HEAP ORGANIZED TABLE
- INDEX-ORGANIZED TABLES STORE ROWS IN A B-TREE INDEX STRUCTURE THAT IS
LOGICALLY SORTED IN PRIMARY KEY ORDE
WHEN - IT IS USED WHEN TRANSACTION DATA ARE HUGE IN NUMBER SUCH AS BANKING/TELECOM
DOMAIN WHERE DATABASE IS USED 24HOURS
WHY - SINCE DATA IS ALREADY ORGANIZED BASED ON THE PRIMARY KEY INDEXING - DATA
RETRIVAL WILL BE VERY FAST

OTHER POINTS :-
=============
(I) WITHOUT PRIMARY KEY CONSTRAINT WE CANNOT CREATED IOT TABLES
- SYSTEM WILL THROW ORA-25175: no PRIMARY KEY constraint found
(II) PRIMARY KEY CONSTRAINT CANNOT BE DOPPED AT IOT TABLES

ADVANTAGES :-
============
(IV) PERFORMANCE INCREASES
- DUE TO THERE IS NO NEED TO READ AN INDEX THEN READ THE TABLE DATA IN A
SEPARATE STRUCTURE
- ROWS ARE ACCESSED VIA A LOGICAL ROWID AND NOT A PHYSICAL ROWID LIKE IN
HEAP-ORGANIZED TABLES
(V) LESS SPACE
- AS THE INDEX AND THE TABLE ARE IN THE SAME SEGMENT, LESS STORAGE SPACE IS
NEEDED

SYNTAX:-
======

CREATE TABLE EMP_IOT


( empno NUMBER(4) PRIMARY KEY,
ename VARCHAR2(100) NULL,
SAL NUMBER NULL
) ORGANIZATION INDEX;
SELECT DISTINCT BUFFER_POOL ,SEGMENT_TYPE FROM USER_SEGMENTS --WHERE
SEGMENT_NAME='EMP_IOT'

SELECT SEGMENT_TYPE,SUM(BYTES)/1024 KB,(SUM(BYTES)/1024)/1024 MB,


((SUM(BYTES)/1024)/1024)/1024 GB
FROM USER_SEGMENTS
WHERE 1=1--SEGMENT_TYPE='TABLE'
GROUP BY SEGMENT_TYPE
ORDER BY SUM(BYTES)/1024

/* ---SUGGESTION OF QUESTIONS
QUESTIONS TO PRINT

1
12
123
1234
12345

BEGIN
FOR I IN 1..5
LOOP
Dbms_Output.PUT_LINE(I);
FOR J IN 1..I
LOOP
Dbms_Output.PUT(J);
END LOOP;
END LOOP;
END;

QUESTIONS TO PRINT

1
22
333
4444
55555

BEGIN
FOR I IN 1..5
LOOP
Dbms_Output.PUT_LINE(I);
FOR J IN 1..I
LOOP
Dbms_Output.PUT(I+1);
END LOOP;
END LOOP;
END;
*/

/*
TOPICS COVERED SO FAR:-
************************
1.CREATE TABLE
2.TYPES OF CONSTRAINTS
3.TABLE ALTERATIONS KEYWORS
4.ALL TYPES OF JOINS
5.PSUEDO COLUMNS
6.DECODE AND CASE
7.TYPES OF SUBQUERIES
8.PUZZLE QUESTION - TO FIND NTH HIGHEST SALARY
9.AGGEREGATE FUNCTIONS
10.SQL FUNCTIONS -TIMESTAMP/STRING/MATHEMATICAL/DATES/
11.VIEW SYNTAXES
12.ORACLE TABLES
13.SEQUENCE
14.MATERIALIZED VIEWS
15.ORACEL_JOB_SYNTAX

--home preparation
1.sql loader
2.external table
3.performance tunning/optimization
4.partioning
5.bulk collect/bulk bind/collection methods/collection exceptions/save exceptions
6.pipeline function
7.record strcture
8.collections
9.basic of unix - ?
10.index organized tables - ?
11.explain plan
12.ref cursor - ?
13.index & types - ?
14.reg_experstions - ?
15.back trace - ?
16.normalization -?
17.sdlc - ?

SRI QUESTION:-
******************
1.Sql Loader-
2.Joining -
3.optimizer -
4.explain plan -
5.peformance tunning -
6.collection -
7.pipeline function -
8.partitions -
9.back trace
10.normalization
11.sdlc
12.external tables -
13.ref cursor
14.index & types
15.reg_experstions
16.save expection indise collections -

MY INT QUESTIONS:-
********************

daily roles n respoblity being a developer

1.WHAT IS ETL ?
2.WRITE A PROCEDURE USING 2 CURSORS - NORMAL N PARAMETER BASED CURSOR N DO A INSERT
3.PACAKGE - USE OF IT - WHY REQUIRED
4.WHAT IS EXTERNAL TABLE
5.WHAT IS TEMPORARY TABLE DIFFERENCE B/W THOSE TWO
6.WHAT IS TRIGGER ? - USE OF IT ?

7. "ABC0053EF321G" - HOW WILL U EXTRACT ALL THE NUMBERS FROM THAT STRING
8. regular express and uses of it
8. how to debug n get line number of a program where the error got raised without
exception n dummy
9. oralce supplied pacakgaes
10. INDEXSE
11. PERFORMANCES-OPTMIZATION-DB LEVEL PERFORMANCE ALSO SAID- PROACTIVE PERFORMANCE
MEASURES & REACTIVE PERFORMANCES

Latest Release Contents:-


1.Partition Table
2.Difference btwn Translate / Replace
3.

S-ar putea să vă placă și