2016-08-03 12 views
0

Beispiel: Es gibt einen Tisch "ID_NAME" mit einer Spalte "ID", die wie 1,2,3 2000 Einträge haben .. 2000. Ich habe habe eine AbfrageWie speichert man eine Ergebnismenge einer ORACLE-SQL-Abfrage?

select id aus ID_NAME where id < 1001;

> Result : 1 2 3 4 . .1000 

Mein PL SQL-Block wie folgt aussieht,

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; 

aber ich bin immer

PL/SQL: ORA-00942: Tabelle oder Sicht sind nicht vorhanden

in meinem SQL-Entwickler.

Ich möchte die SET1 von meinem unten Abfrage verwenden, so dass ich es nicht laufen immer wieder in der count (*) Unterabfragen

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

Antwort

0

Sie bauen einen CTE so geht es so: Für jede Select-Anweisung müssen Sie sich mit CTE verbinden.

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

In SQL ist eine with-Klausel oder ein allgemeiner Tabellenausdruck Teil einer Abfrage. Es legt keine Programmvariable fest.

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

können Sie nicht auf xyz in anderen Abfragen beziehen sich - es ist nur eine Klausel in einer einzigen Abfrage.

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; 
Verwandte Themen