2016년 3월 23일 수요일

[Querydsl오라클SQL팁]오라클ROWID,ROWNUM,LEVEL,SYSDATE같은의사칼럼사용하기 

com.mysema.query.sql.oracle.OracleGrammar 클래스를 사용하면 되는데 
static 필드로 선언되어 있고 아래처럼 사용하면 된다. 

아래는 오라클의 계층형 쿼리를 Querydsl을 이용하여 구현 하였다. 

[계층현질의에서 LEVEL 예제] 

List<Tuple> rows =  query 
.select(String__EXPRESSION__s.lpad( 
__EXPRESSION__s.stringTemplate("' '").stringValue(),     
            OracleGrammar.level.subtract(1).multiply(2), ' ')      
    .concat(emp.ename), 
    emp.sal, emp.deptno)  
.startWith(emp.ename.eq("KING"))  
.connectByPrior(emp.empno.eq(emp.mgr))    
.from(emp) 
.fetch(); 


select lpad(' ',(level - 1) * 2,' ') || EMP.ENAME, EMP.SAL, EMP.DEPTNO 
from EMP EMP 
start with EMP.ENAME = 'KING' 
connect by prior EMP.EMPNO = EMP.MGR 


-------------------------------------------------------------------- 
[ROWNUM 예제] 

List<Tuple> rows = queryFactory.select(myemp1.ename, mydept1.dname) 
.from(myemp1).innerJoin(mydept1) 
.on(myemp1.deptno.eq(mydept1.deptno)) 
.where(OracleGrammar.rownum.lt(6)).fetch(); 

select MYEMP1.ENAME, MYDEPT1.DNAME 
from MYEMP1 MYEMP1 
inner join MYDEPT1 MYDEPT1 
on MYEMP1.DEPTNO = MYDEPT1.DEPTNO 
where rownum < 6 

댓글 없음:

댓글 쓰기