Professional Documents
Culture Documents
Checking DATE
BAD
select * from phtOrder
where TO_CHAR(orderdate,'YYYY/MM/DD') = '2012/05/02';
GOOD
select * from phtOrder
where orderdate >= TO_DATE('2012/05/02','YYYY/MM/DD')
and orderdate < TO_DATE('2012/05/03','YYYY/MM/DD');
Date Range
select * from phtOrder
where orderdate >= TO_DATE('2012/05/01','YYYY/MM/DD')
and orderdate < TO_DATE('2012/06/10','YYYY/MM/DD');
select * from phtOrder
where orderdate >= TO_DATE('2012-05-01','YYYY-MM-DD')
and orderdate < TO_DATE('2012-06-10','YYYY-MM-DD');
select * from phtOrder
where orderdate >= TO_DATE('20120501','YYYYMMDD')
and orderdate < TO_DATE('20120610','YYYYMMDD');
select * from phtOrder
where orderdate >= TO_DATE('2012/05/01 08:00:00','YYYY/MM/DD HH24:MI:SS')
and orderdate < TO_DATE('2012/06/10 17:00:00','YYYY/MM/DD HH24:MI:SS');
select * from phtOrder
where orderdate >= TO_DATE('20120501 080000','YYYYMMDD HH24MISS')
and orderdate < TO_DATE('20120610 170000','YYYYMMDD HH24MISS');
select * from phtOrder
where orderdate >= TO_DATE('20120501080000','YYYYMMDDHH24MISS')
and orderdate < TO_DATE('20120610170000','YYYYMMDDHH24MISS');
JOINS
select o.OrderID, s.StatusCode,c.CODE from phtOrder o, phxStatus s, phxOrderCategory c
where s.StatusDID = o.StatusDID
and c.ORDERCATEGORYDID = o.ORDERCATEGORYDID;
select o.OrderID, s.StatusCode,c.CODE from phtOrder o
inner join phxStatus s on s.StatusDID = o.StatusDID
inner join phxOrderCategory c on c.ORDERCATEGORYDID = o.ORDERCATEGORYDID;
OUTER JOINS
select o.OrderDID,OrderID,eh.EventDID from phtOrder o , phtEventhistory eh
where eh.DID (+) = o.OrderDID
and o.OrderID in ('RMA-00001194' , 'RMA-00000102') ;
Sub Query
select * from phtOrder
where OrderDID in (103522, 103542, 103562);
select * from phtEventhistory where DID in
(
select ORDERDID from phtOrder
where orderdate between TO_DATE('2012/05/01','YYYY/MM/DD') and
TO_DATE('2012/06/10','YYYY/MM/DD')
)
and TOBJECT = 'phtOrder';
select * from phtEventhistory eh where exists
(
select 1 from phtOrder
where ORDERDID = eh.DID
and orderdate between TO_DATE('2012/05/01','YYYY/MM/DD') and
TO_DATE('2012/06/10','YYYY/MM/DD')
)
and TOBJECT = 'phtOrder';
Order by
select DID as OrderDID,eventDID,StatusDID from phtEventhistory
where eventdate between TO_DATE('2012/05/01','YYYY/MM/DD') and
TO_DATE('2012/05/04','YYYY/MM/DD')
order by DID,eventDID;
Group by
select DID as OrderDID, count(*) as EventCount, Max(eventDID) as MaximumEvent
from phtEventhistory
where eventdate between TO_DATE('2012/05/01','YYYY/MM/DD') and
TO_DATE('2012/05/04','YYYY/MM/DD')
group by DID
Order by DID;
Group by - Having
select DID as OrderDID, count(*) as EventCount, Max(eventDID) as MaximumEvent from phtEventhistory
where eventdate between TO_DATE('2012/05/01','YYYY/MM/DD') and
TO_DATE('2012/05/04','YYYY/MM/DD')
group by DID
having count(*) > 3
Order by DID;
ROW_NUMBER function
1) Use for pagination
select DID as OrderDID,EVENTDATE,
ROW_NUMBER() OVER (order by EVENTDATE) as rowN
from phtEventhistory
where eventdate between TO_DATE('2012/05/01','YYYY/MM/DD') and
TO_DATE('2012/06/10','YYYY/MM/DD');
Describing an Object
desc phtOrder;
ROWNUM Function
()
select DID as OrderDID,EVENTDATE,
ROWNUM as rowN
from phtEventhistory
where eventdate between TO_DATE('2012/05/01','YYYY/MM/DD') and
TO_DATE('2012/06/10','YYYY/MM/DD')
and ROWNUM < 10
order by EVENTDATE;
()
select DID as OrderDID,EVENTDATE,
ROWNUM as rowN
from phtEventhistory
where eventdate between TO_DATE('2012/05/01','YYYY/MM/DD') and
TO_DATE('2012/06/10','YYYY/MM/DD')
and ROWNUM > 10
order by EVENTDATE;
()
select M.* from
(
select DID as OrderDID,EVENTDATE,
ROWNUM as rowN
from phtEventhistory
where eventdate between TO_DATE('2012/05/01','YYYY/MM/DD') and
TO_DATE('2012/06/10','YYYY/MM/DD')
order by EVENTDATE
)M
where M.rowN > 10;
()
select M.* from
(
select DID as OrderDID,EVENTDATE,
ROWNUM as rowN
from phtEventhistory
where eventdate between TO_DATE('2012/05/01','YYYY/MM/DD') and
TO_DATE('2012/06/10','YYYY/MM/DD')
order by EVENTDATE
)M
where M.rowN > 10
and ROWNUM < 20;
JOIN ORDER
select o.* from phtOrder o, phtOrderAssignment ass, phtOrderItem oi
where o.ORDERDID = 103522
and ass.ORDERDID = o.ORDERDID
and oi.ORDERITEMDID = ass.ORDERITEMDID;
Explain plan
Explain plan set statement_id = 'name' for
select o.* from phtOrder o, phtOrderAssignment ass, phtOrderItem oi
where o.ORDERDID = 103522
and ass.ORDERDID = o.ORDERDID
and oi.ORDERITEMDID = ass.ORDERITEMDID
select * from TABLE(DBMS_XPLAN.DISPLAY('plan_table','name'));
HINT
select /*+ ORDERED */ o.* from phtOrder o, phtOrderAssignment ass, phtOrderItem oi
where o.ORDERDID = 103522
and ass.ORDERDID = o.ORDERDID
and oi.ORDERITEMDID = ass.ORDERITEMDID
Explain plan set statement_id = 'name' for
select /*+ ORDERED */ o.* from phtOrderItem oi, phtOrderAssignment ass ,phtOrder o
where ass.ORDERITEMDID = oi.ORDERITEMDID
and o.ORDERDID = ass.ORDERDID
and o.ORDERDID = 103522
some other hints
/*+ push_subq */
SELECT /*+ index (exh XIE1phtexceptionhistory) index (o XPKPHTORDER) index (ass
XIF89PHTORDERASSIGNMENT) index (oi XPKPHTORDERITEM) index (obj XPKPHTOBJECT) index
(ordorigactor XPKPHTACTOR) index (model XPKPHTMODEL) index (ordOrigWho XPKMPTWHO) */
Index
Explain plan set statement_id = 'name' for
select * from phtEventHistory where TOBJECT = 'phtOrder'
varchar2(40),
varchar2(20),
varchar2(255)
);
alter table EMPLOYEE modify LastName varchar2(50);
CREATE INDEX XIE1EMPLOYEE
ON EMPLOYEE (ID);
NUMBER
Writing Scripts
DECLARE
vDepartmentDID NUMBER;
CURSOR Employees is
select Name from mptWho where whoCategoryDID = 5;
BEGIN
select seq_dept.nextval into vDepartmentDID from dual;
insert into DEPARTMENT(DEPARTMENTDID,ID)
values (vDepartmentDID,'TRADE PARTY');
commit;
commit;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001,'Error Occured'||'-TRACE-'
||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
END;
/
DROP Objects
drop table EMPLOYEE;
drop table DEPARTMENT;
drop sequence seq_dept;
drop sequence seq_Employee;