2016-08-03 4 views
0

예 : 1,2,3 등 2000 항목이 하나의 열 "ID".. 2000 내가 어디 아이디 ID_NAME에서 쿼리를ORACLE SQL 쿼리의 결과 집합을 저장하는 방법?

선택 ID를가했습니다와 테이블 "ID_NAME는"이 < 1001; 내 PL의 SQL 블록은 다음과 같습니다

> Result : 1 2 3 4 . .1000 

,

SET SERVEROUTPUT ON; 
    declare 
    var1 number; 
    var2 number; 
    var3 number; 
    var4 number; 
    var5 number; 
    var6 number; 
    var7 number; 
    var8 number; 
    var9 number; 
    var10 number; 
    begin 
    with set1 as (select id from ID_NAME where id < 1001) 
    select count(*) into var1 from table1 where id in (select * from set1); 
    select count(*) into var2 from table2 where id in (select * from set1); 
    select count(*) into var3 from table3 where id in (select * from set1); 
    select count(*) into var4 from table4 where id in (select * from set1); 
    select count(*) into var5 from table5 where id in (select * from set1); 
    select count(*) into var6 from table6 where id in (select * from set1); 
    select count(*) into var7 from table7 where id in (select * from set1); 
    select count(*) into var8 from table8 where id in (select * from set1); 
    select count(*) into var9 from table9 where id in (select * from set1); 
    select count(*) into var10 from table10 where id in (select * from set1); 
DBMS_OUTPUT.PUT_LINE('var1,var2,var3,var4,var5,var6,var7,var8,var9,var10'); 
DBMS_OUTPUT.PUT_LINE(var1||','||var2||','||var3||','||var4||','||var5||','||var6||','||var7||','||var8||','||var9||','||var10); 
end; 

하지만 PL은/SQL

받고 있어요 : ORA-00942 : 테이블 또는 뷰가

존재하지 않습니다

내 sql 개발자.

내가 개수에 다시하고 다시 실행하지 않아도 내 아래 쿼리에서 SET1를 사용하려면 (*) 서브

with set1 as (select id from ID_NAME where id < 1001) 

답변

0

가 간다, 그래서 당신은 CTE를 구축를 조회 CTE와 결합해야하는 각 select 문에 대해 다음과 같이하십시오.

declare 
    var1 number; 
    var2 number; 
    var3 number; 
    var4 number; 
    var5 number; 
    var6 number; 
    var7 number; 
    var8 number; 
    var9 number; 
    var10 number; 
    begin 
    with set1 as (select emp_id from employee where emp_id < 1001) 
    select count(*) into var1 from employee 
    where emp_id in (select eno from emp_sal); 

    with set1 as (select emp_id from employee where emp_id < 1001) 
    select count(*) into var2 from employee 
    where emp_id in (select eno from emp_sal); 


    . 
    . 
    . 
    . 
    and so on 
-- select count(*) into var2 from table2 where id in (select * from set1); 
-- select count(*) into var3 from table3 where id in (select * from set1); 
-- select count(*) into var4 from table4 where id in (select * from set1); 
-- select count(*) into var5 from table5 where id in (select * from set1); 
-- select count(*) into var6 from table6 where id in (select * from set1); 
-- select count(*) into var7 from table7 where id in (select * from set1); 
-- select count(*) into var8 from table8 where id in (select * from set1); 
-- select count(*) into var9 from table9 where id in (select * from set1); 
-- select count(*) into var10 from table10 where id in (select * from set1); 
DBMS_OUTPUT.PUT_LINE('var1,var2,var3,var4,var5,var6,var7,var8,var9,var10'); 
DBMS_OUTPUT.PUT_LINE(var1||','||var2||','||var3||','||var4||','||var5||','||var6||','||var7||','||var8||','||var9||','||var10); 
end; 
0

SQL에서 with 절 또는 공통 테이블 식은 쿼리의 일부입니다. 프로그램 변수를 설정하지 않습니다.

with xyz as (select blah from blahblah where something = somethingelse) 
select blah from xyz; 

당신은 다른 쿼리에 xyz을 참조 할 수 없습니다 - 그것은 단일 쿼리 내에서 단지 절입니다.

1
SET SERVEROUTPUT ON; 
    declare 
    var1 number; 
    var2 number; 
    var3 number; 
    var4 number; 
    var5 number; 
    var6 number; 
    var7 number; 
    var8 number; 
    var9 number; 
    var10 number; 
    begin 
    with set1 as (select id from ID_NAME where id < 1001) 
    select 
    (select count(*) from table1 where id in (select * from set1)), 
    (select count(*) from table2 where id in (select * from set1)), 
    .............. 
    (select count(*) from table9 where id in (select * from set1)), 
    (select count(*) from table10 where id in (select * from set1)) 
    into var1,var2,.....,var9,var10 
    from dual; 
DBMS_OUTPUT.PUT_LINE('var1,var2,var3,var4,var5,var6,var7,var8,var9,var10'); 
DBMS_OUTPUT.PUT_LINE(var1||','||var2||','||var3||','||var4||','||var5||','||var6||','||var7||','||var8||','||var9||','||var10); 
end; 
관련 문제