2016-09-15 51 views
-1

我在oracle中尋找類似的bash的for循環的東西猛砸在Oracle SQL循環邏輯

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

所以這將導致作爲

print 1 
print 5 
print 3 
print 8 

我想用Oracle SQL一些類似的邏輯像

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

所以這將導致作爲

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

那麼,如何得到的東西相似的邏輯中的Oracle SQL

+0

你在尋找SQL還是PL/SQL? SQL沒有循環。有可能,你只需要'where(1,5,3,8)'中的column1'。但是這取決於你想要完成什麼 - 一個SQL語句不能運行4個單獨的查詢。它可以運行一個包含全部四組結果的查詢。 –

回答

0

我希望我的理解正確你的要求:通過

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

基本上從1,我們創建了所有號碼的列8然後選擇你要求的。如果你打算使用字符串或大量數字(但少量的行),這個解決方案效率不高,那麼你應該把你的值存儲在一個表中。

0

你可以建立在PLSQL一個循環,例如:

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; 
/ 

如果你需要它來運行一個查詢,也許你可以簡單地使用IN

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

,或者建一個更復雜的列表:

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