2017-10-10 46 views
-3

아래 코드에 대한 대체 쿼리를 제공 할 수 있습니까?WITH 절은 ORACLE 11G의 UNION ALL을 사용합니다.

PLSQL 코드 내가 절 변수 TEMP와 함께 사용했을

가 모든 쿼리는 UNION의 모든 쿼리를 TEMP 변수를 사용하는 하나의 시간을 단축하는 데 도움이 UNION 두 자리를 사용

,

DECLARE 

    CURSOR CUR Is 
    WITH TEMP AS  
    (SELECT 1 ONE FROM DUAL UNION ALL SELECT 2 ONE FROM DUAL) 
    SELECT RNO, NAME FROM STUDENT, TEMP T WHERE RNO = T.ONE 
    UNION ALL 
    SELECT RNO, NAME FROM STUDENT1, TEMP T WHERE RNO = T.ONE; 
BEGIN 

    FOR I IN CUR LOOP 
    DBMS_OUTPUT.PUT_LINE(I.RNO||':'||i.name); 
    END LOOP; 

END; 

테이블 작성 스크립트

그냥 곱셈 같은
create table student1(rno number,name varchar2(30))  

insert into student1 values(1,'chidam1')  
insert into student1 values(2,'ram1')  
insert into student1 values(3,'divi1') 

create table student(rno number,name varchar2(30)) 

insert into student values(1,'chidam') 
insert into student values(2,'ram') 
insert into student values(3,'divi') 
+1

코드가 무엇인지 알 수 있습니다. 코드의 목적을 설명해야합니다. 우리는 당신이 달성하고자하는 것을 우리에게 말할 때까지 대체 구현을 제공 할 수 없습니다. – APC

답변

0

대수의 추가를 통해 분배하고, 데카르트 제품은 그래서, 집합 이론의 조합을 통해분배입니다은 SQL에서 UNION ALL 이상의 배포판입니다.

당신은 너무처럼 SELECT 문을 다시 작성 수 :

with 
    temp   as (... - your definition here ) 
    , student_union as (select rno, name from student 
         UNION ALL 
         select rno, name from student1) 
select s.rno, s.name from student_union s inner join temp t on s.rno = t.one 
........................ 

몇 가지 참고 사항을 ... 사용 ANSI 조인 구문 (SQL 표준) 가능하면, 기존의 사용하지 않는, 오라클 구문을 추천하지 않습니다. 또한 꼭 필요한 것은 아니지만 조인의 모든 열에 대해 한정자 (테이블 별칭)를 사용하십시오. 코드는 그렇게 쉽게 읽을 수 있습니다.