Вы находитесь на странице: 1из 10

Simple Queries

select * from phtOrder


where OrderDID = 103522;
select OrderDID,OrderID from phtOrder
where OrderDID = 103522;
select * from phtOrder
where OrderID = 'RMA-00000102';

Wild Card Search


select * from phtOrder
where OrderID like 'RMA-000001%';
select * from phtOrder
where OrderID like 'RMA-000001_2';

Checking NULL and NOT NULL

( ) select * from phtOrder where destactordid = NULL ;


( ) select * from phtOrder where destactordid <> NULL ;
( ) select * from phtOrder where destactordid is NULL ;
( ) select * from phtOrder where destactordid is NOT NULL ;

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');

Checking for records which OrderDate = Today


select * from phtOrder
where orderdate >= trunc(sysdate)
and orderdate < trunc(sysdate) +1;
* trunk function removes time part of the date

Checking for records which OrderDate = Yesterday


select * from phtOrder
where orderdate >= trunc(sysdate) -1
and orderdate < trunc(sysdate) ;

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') ;

select o.OrderDID,OrderID,eh.EventDID from phtOrder o left outer join phtEventhistory eh


on o.OrderDID = eh.DID
where 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';

select eh.* from phtEventhistory eh where exists


(
select 1 from phtOrder
where ORDERDID = eh.DID and OrderDate < eh.eventDate
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;

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 desc, 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');

select M.* from


(
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')
)M
where M.rowN between 10 and 20;

2) Use for Partitioning


select DID as OrderDID,EVENTDATE,
ROW_NUMBER() OVER (partition by DID 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');

select M.* from


(
select DID as OrderDID,EVENTDATE,
ROW_NUMBER() OVER (partition by DID 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')
)M
where rowN = 1;

Using Dual function


select 1 from dual;
select sysdate from dual;
SELECT SYSDATE + 1 FROM dual;
SELECT add_months(SYSDATE, 2) FROM dual;

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'

Create Statement / Insert and Update


CREATE TABLE EMPLOYEE
(
EMPLOYEEDID
NUMBER
NOT NULL,
ID
varchar2(20) NOT NULL,
Name
varchar2(40),
CONSTRAINT XPKEMPLOYEE PRIMARY KEY (EMPLOYEEDID)
);
alter table EMPLOYEE
rename column Name To FirstName;
alter table EMPLOYEE add
(
LastName
DepartmentID
eMail

varchar2(40),
varchar2(20),
varchar2(255)

);
alter table EMPLOYEE modify LastName varchar2(50);
CREATE INDEX XIE1EMPLOYEE
ON EMPLOYEE (ID);

insert into EMPLOYEE(EMPLOYEEDID,ID,FirstName,LastName,DepartmentID)


values (1,'ni.ja','Niroshan','Jayatunga','ASA');
commit;
rollback;
CREATE SEQUENCE seq_Employee
START WITH 10 MAXVALUE 4294967295;
insert into EMPLOYEE(EMPLOYEEDID,ID,FirstName,LastName,DepartmentID)
values (seq_Employee.nextval,'ra.eg','Ravin','Egodawatte','ASA');
insert into EMPLOYEE(EMPLOYEEDID,ID,FirstName,LastName,DepartmentID)
values (seq_Employee.nextval,'ma.pr','Manjula','Priyantha','QA');
commit;
select * from EMPLOYEE;
update EMPLOYEE set DepartmentID = 'DEV'
where DepartmentID = 'ASA';
commit;
update EMPLOYEE set eMail = FirstName || '.' || LastName || '@ebuilder.com';
commit;

CREATE TABLE DEPARTMENT


(
DEPARTMENTDID
NUMBER
NOT NULL,
ID
varchar2(20) NOT NULL,
CONSTRAINT XPKDEPARTMENT PRIMARY KEY (DEPARTMENTDID)
);
alter table EMPLOYEE add
(
DEPARTMENTDID
);

NUMBER

ALTER TABLE EMPLOYEE ADD (


CONSTRAINT FKEMPLOYEE_DEPT FOREIGN KEY (DEPARTMENTDID)
REFERENCES DEPARTMENT (DEPARTMENTDID)
);
CREATE SEQUENCE seq_dept

START WITH 1 MAXVALUE 4294967295;


insert into DEPARTMENT(DEPARTMENTDID,ID)
select seq_dept.nextval,M.DepartmentID from
(
select DepartmentID
from EMPLOYEE
group by DepartmentID
) M;
commit;
select * from DEPARTMENT;
select * from EMPLOYEE;
update EMPLOYEE e set DEPARTMENTDID = (select DEPARTMENTDID from DEPARTMENT
where id = e.DepartmentID);
commit;
alter table EMPLOYEE drop column DepartmentID;
delete from DEPARTMENT where ID = 'QA';
delete from EMPLOYEE where DEPARTMENTDID in
(select DEPARTMENTDID from DEPARTMENT where ID = 'QA');
commit;

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;

FOR inrow IN Employees LOOP


insert into EMPLOYEE(EMPLOYEEDID,ID,FirstName,DEPARTMENTDID)
values (seq_Employee.nextval,inrow.Name,inrow.Name,vDepartmentDID);

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;

Вам также может понравиться