2016-09-15 3 views
-1

Ich suche etwas ähnliches auf den bash for-Schleife in oracleBash For-Schleife Logik in Oracle SQL

for i in 1 5 3 8; do echo "print $i"; done 

so ergäbe dies als

print 1 
print 5 
print 3 
print 8 

ich etwas ähnliche Logik in Oracle SQL will wie

for i in 1 5 3 8; do echo " select * from TABLE where column1='$i';"; done 

so würde dies als

führen
select * from TABLE where column1='1'; 
select * from TABLE where column1='5'; 
select * from TABLE where column1='3'; 
select * from TABLE where column1='8'; 

Also wie bekomme ich etwas ähnliche Logik in Oracle SQL

+0

Suchen Sie nach SQL oder PL/SQL? SQL hat keine Schleifen. Möglicherweise möchten Sie nur 'where column1 in (1,5,3,8)'. Aber es hängt wirklich davon ab, was Sie erreichen möchten - eine SQL-Anweisung kann nicht 4 separate Abfragen ausführen. Es könnte eine Abfrage ausführen, die alle vier Ergebnismengen enthält. –

Antwort

0

Ich hoffe, dass ich Ihre Anfrage richtig verstanden:

SELECT r FROM (
     SELECT ROWNUM r 
      FROM DUAL 
    CONNECT BY ROWNUM <= 8) 
WHERE r IN (1, 5, 3, 8) 

Grundsätzlich sind wir eine Spalte aller Zahlen von 1 bis zu schaffen 8 und dann die gewünschten auswählen. Wenn Sie mit Zeichenfolgen oder mit einer großen Anzahl von Zahlen (aber einer kleinen Anzahl von Zeilen) arbeiten, ist diese Lösung nicht sehr effizient, und dann sollten Sie Ihre Werte in einer Tabelle speichern.

0

Sie eine Schleife in plsql aufbauen können, zum Beispiel:

select * 
from table 
where column1 in (1, 5, 3, 8) 

oder zu bauen:

begin 
    for i in (
       select 1 as num from dual union all 
       select 5 from dual union all 
       select 3 from dual union all 
       select 8 from dual 
      ) 
    loop 
     dbms_output.put_line('number: ' || i.num); 
     /* do whatever you need */ 
    end loop; 
end; 
/ 

Wenn Sie diese benötigen, eine Abfrage auszuführen, vielleicht können Sie einfach die IN verwenden eine komplexere Liste:

select * 
from table 
where column1 in (
        select something 
        from ... 
       )