PL / SQL循环变量

问题描述 投票:1回答:2

我有一个工具,其输出是一个SQL查询结果。根据用户选择,查询使用子查询。为了让所有子查询到我的最终查询,我使用字符串,在最后阶段我将它们连接到一个大查询 - vSQL

子查询保存在字符串中,如vSQL1 .. vSQL14因为不是每个子查询都被使用 - 用户选择 - 其中一些被省略。

现在它看起来像这样:

if LENGTH(vSQL1) > 1 then
set_vSQL(vSQL, vSQL1, t);
end if;

..

if LENGTH(vSQL14) > 1 then
set_vSQL(vSQL, vSQL14, t);
end if;

是否可以将其置于循环中以便只变量会发生变化? 我试过这样的事情,但这不起作用。

for x in 1 .. 14
loop 
    if LENGTH(vSQL || x) > 1 then
        set_vSQL(vSQL, vSQL || x, t);
    end if;
end loop
oracle plsql
2个回答
1
投票

与此同时,我找到了一个解决方案。

我添加了一个新类型和一个变量:

TYPE vSQLs_table IS TABLE OF VARCHAR2(32000);
vSQLs vSQLs_table;

有了这个,我可以将所有变量输入到一个:

vSQLs := vSQLS_table(vSQL1, vSQL2, vSQL3, vSQL4, vSQL5, vSQL6, vSQL7, vSQL8, vSQL9, vSQL10, vSQL11, vSQL12);

有了这个,我可以遍历所有这些:

for x in 1 .. 12
    loop
        if LENGTH(vSQLs(x)) > 1 then
            set_vSQL(vSQL, vSQLs(x), t);
        end if;
    end loop;

0
投票

您可以使用动态SQL。类似的东西(代码没有经过测试)

declare
  l number;
begin

  for x in 1 .. 14
  loop 
      execute immediate 'select LENGTH(vSQL'||to_char(x)||')  from dual' into l;
      if l > 1 then
        execute immediate 'set_vSQL(vSQL, vSQL'||to_char(x)||', t)' ;
      end if;
  end loop
end;
© www.soinside.com 2019 - 2024. All rights reserved.