2017-10-10 1 views
-3

Pouvez-vous s'il vous plaît me donner une autre requête pour le code ci-dessous.AVEC clause utiliser UNION ALL dans ORACLE 11G

PLSQL code

Je l'ai utilisé avec capteur de température variable article est utilisé deux dans requête UNION ALL, aider à réduire un seul temps d'utiliser la variable TEMP dans requête UNION ALL,

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; 

Tableau Création scripts

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

Nous pouvons voir ce que votre code fait: vous devez expliquer son but. Nous ne pouvons pas proposer une implémentation alternative jusqu'à ce que vous nous disiez ce que vous essayez d'accomplir. – APC

Répondre

0

Tout comme la multiplication est distributive sur l'addition en algèbre, et produit cartésien est distributive sur l'union dans la théorie des ensembles, donc INNER JOIN est distributif sur UNION ALL dans SQL.

Vous pouvez réécrire votre déclaration SELECT comme ceci:

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 
........................ 

Quelques notes ... utiliser la syntaxe ANSI joindre (standard SQL) chaque fois que possible, ne pas utiliser l'ancienne, la syntaxe dépréciée Oracle. En outre, utilisez des qualificateurs (alias de table) pour toutes les colonnes d'une jointure, même si elles ne sont pas toujours strictement nécessaires; le code est beaucoup plus facile à lire de cette façon.