2014-01-20 2 views
0

다음과 같은 쿼리가 있습니다.WITH 절을 Oracle의 VIEW로 바꿉니다.

with test1 as (  
select emp.empno, emp.deptno, emp.name, emp.hiredate, dept.deptname 
from emp, dept 
where 
emp.deptno = dept.deptno 
and emp.deptno = 72 
and emp.salary > 5000 
) 
select inner1.* 
from ( 
select 'abc' as title, 
1 emp_order, 
name, hiredate, deptname 
from test1 
UNION ALL 
select 'xyz' as title, 
2 emp_order, 
name, hiredate, deptname 
from test1 
) inner1 

WITH 절을 완전히 제거하고 대신 VIEW를 만듭니다. 유일한 문제는 WITH 절의 동적 값입니다.

CREATE VIEW testview as 
select emp.empno, emp.deptno, emp.name, emp.hiredate, dept.deptname 
from emp, dept 
where 
emp.deptno = dept.deptno 
and emp.deptno = 72 
and emp.salary > 5000 

업데이트 쿼리 내가 급여와 뷰에서 DEPTNO COLS에 대한 바인드 값을 전달할 수있는 방법이 경우

select inner1.* 
    from ( 
    select 'abc' as title,  
    1 emp_order,  
    name, hiredate, deptname  
    from testview  
    UNION ALL  
    select 'xyz' as title,  
    2 emp_order, 
    name, hiredate, deptname  
    from testview 
    ) inner1 

:

나는이 시도?

+0

희망이 도움 주어진 당신은 또한 응용 프로그램 컨텍스트를 사용하여 시도 할 수 있습니다 당신이 묻고있는 것을 creat하지 않습니까? –

답변

0

보기에서이 쿼리를 사용하기 위해 공통 테이블 식을 제거 할 필요가 없습니다. 술어를 제거하고 뷰에 대한 쿼리에 적용하면 어쨌든 CTE 내부로 푸시 될 수 있습니다.

CREATE VIEW testview as 
select emp.empno, emp.deptno, emp.name, emp.hiredate, dept.deptname, emp.salary 
from emp join dept ON emp.deptno = dept.deptno; 

select inner1.* 
from ( 
    select 'abc' as title,  
     1 emp_order,  
     name, hiredate, deptname  
    from testview 
    where deptno = 72 and salary > 5000  
    UNION ALL  
    select 'xyz' as title,  
     2 emp_order, 
     name, hiredate, deptname  
    from testview 
    where deptno = 72 and salary > 5000  
) inner1 
+0

솔루션에서 뷰의 기본 테이블이 크고 조건부 푸시가 발생하지 않는 경우 뷰의 성능이 떨어지지 않습니까? – vishad

+0

그곳에는 두 개의 "if"가 있으며, 술어를 푸는 데 실패 할 가능성은 거의 없습니다. 반대로 CTE 결과 세트가 충분히 구체화되면 서브 u 리는 한 x 만 실행되며 로직을 반복하는 인라인보기보다 성능이 우수합니다. CTE는 또한 장점이 있습니다. 그렇지 않다면 존재하지 않을 것입니다. –

1

올바르게 이해하면보기에 매개 변수를 사용하고 싶습니다.

이 당신이 아래의 방법 중 하나를 사용할 수 있습니다 수행합니다

을 a)받은 매개 변수가 다소 정적 자주이 매개 변수의 값을 저장하기 위해 표를 사용하여 변경하지 않은 경우.. 이 테이블의 값은 PL/SQL 패키지 또는 프로 시저를 사용하여 업데이트 할 수 있습니다. 그러면이 표가 다시 볼 수 있습니다.

나.) 당신이 다른 세션에 대해 서로 다른 매개 변수 값이 필요한 경우

here가 동적 값은 당신이 언급하는 것을

Vishad

관련 문제