【问题标题】:Bash For loop logic in oracle sqloracle sql中的Bash For循环逻辑
【发布时间】:2016-09-15 15:53:44
【问题描述】:

我正在寻找类似于 oracle 中的 bash for 循环的东西

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 中得到类似的逻辑

【问题讨论】:

  • 您在寻找 SQL 还是 PL/SQL? SQL 没有循环。您可能只想要where column1 in (1,5,3,8)。但这实际上取决于您要完成的工作——一个 SQL 语句不能运行 4 个单独的查询。它可以运行一个包含所有四组结果的查询。

标签: sql oracle bash for-loop


【解决方案1】:

希望我正确理解了您的要求:

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

基本上,我们会创建一个包含从 1 到 8 的所有数字的列,然后选择您要求的数字。如果您要处理字符串或大量数字(但行数很少),此解决方案的效率不会很高,那么您应该将值存储在表格中。

【讨论】:

    【解决方案2】:

    你可以在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 ...
                     )
    

    【讨论】:

      猜你喜欢
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      • 2022-11-04
      • 2019-01-08
      • 2014-01-05
      • 1970-01-01
      相关资源
      最近更新 更多