PLSQL Notes
PLSQL Notes
***********
--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)
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
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;
*/ --LESSION 2
/* LESSON- 3
CREATE TABLE SYNTAX:-
************************
);
);
CONSTRAINT SYNTAX:
********************
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
JOINS:-
*******
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
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
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
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
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
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
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
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.
SQL FUNCTIONS :-
*******************
-STRING FUNCTIONS :
------------------
-DATE FUNCTIONS :
-----------------
USING INTERVAL -
*******************
MATHEMATICAL FUNCTIONS :-
************************
FORMATTING DATES :-
********************
ROLLBACK
COMMIT
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.
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;
FOR I IN 1..NAMES.Count
LOOP
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
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;
FOR I IN 1..NAMES.Count
LOOP
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;
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;
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('1001','PAINT','LOC_001','250')
DBMS_OUTPUT.PUT_LINE (V_SO_REC.)
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 :-
=====
DECLARE
TYPE V_TAB_1 IS TABLE OF NUMBER
INDEX BY PLS_INTEGER;
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 ;
END;
***************---------------------*******************
DECLARE
TYPE V_TAB_1 IS TABLE OF NUMBER;
TYPE V_TAB_2 IS TABLE OF NUMBER;
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;
END;
***************---------------------*******************
DECLARE
TYPE V_TAB_1 IS VARRAY(10) OF NUMBER;
TYPE V_TAB_2 IS VARRAY(5) OF VARCHAR2(10);
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';
END;
--PERFORMING DML USING NORMAL FOR LOOP AND BULK BIND
*****************************************************
EX :1 INSERT STAMENT
======================
DECLARE
CURSOR C1 IS
SELECT * FROM USER_OBJECTS;
BEGIN
OPEN C1;
LOOP
FORALL I IN 1..V_REC.COUNT
INSERT INTO TEST_OBJ_TAB VALUES V_REC(i);
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;
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);
END;
===================================================================================
===========================
DECLARE
CURSOR C1 IS
SELECT * FROM USER_OBJECTS;
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);
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
EXAMPLE:-
========
RETURN l_tab;
END;
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
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'
HELPING THE ORACLE OPTIMIZER TO MAKE DATA RETREIVAL FAST WITH FOLLOWING
SOME BASIC RULE OF QUERY WRITTING
IS CALLED OPTIMIZATION OR PREFORMANCE TUNNING
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
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;
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;
BITMAP INDEX
SCANNING METHODS::::
TABLE ACCESS FULL
SYNTAX:::
SCANNING :::
TABLE ACCESS BY INDEX ROWID
BITMAP INDEX(SINGLE Value) --- IMPORTANT POINT ----
IT IS A 11G FEATURE
SYNTAX:::
SYNTAX:::
------------------------
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:-
======
/* ---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:-
********************
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