如何在Oracle中使用LOOP引用动态变量

问题描述

clear screen;
set serveroutput on;
DECLARE
ID_1 number;
ID_2 number;
filter1 varchar2(100);
filter2 varchar2(100);

BEGIN
ID_1 := 100;
ID_2 := 101;

FOR i in 1..2
LOOP
        IF ID_(i) is not null THEN
        SELECT STATE INTO filter(i)
        FROM dashboard
        WHERE id=ID_(i);
        END IF;
    
        dbms_output.put_line(filter(i));

END LOOP;

END;

我想动态创建值,然后在循环中使用“ i”打印变量。在此示例中,我仅采用2个值,但我总共最多可以获取10个值。 显然,此代码不起作用。我该怎么办?

解决方法

DECLARE
type t_ids is table of dashboard.id%type index by pls_integer;
type t_filters is table of dashboard.state%type index by pls_integer;
v_IDs t_ids;
v_filters t_filters;

BEGIN
V_IDs(1):= 100;
V_IDs(2):= 101;

FOR i in 1..2
LOOP
        IF v_ids(i) is not null THEN
        SELECT d.STATE INTO v_filters(i)
        FROM dashboard d
        WHERE d.id=v_ids(i);
        END IF;
    
        dbms_output.put_line(v_filters(i));

END LOOP;

END;

PS。打扰一下,打扰一下。在我的手机上输入。

,

动态事物需要动态SQL。 一切在这里都应该是“动态的”(如果我正确理解了您的要求)。

这是一个基于Scott的DEPT表的示例;我将获取部门10(id_1)和部门20(id_2)的部门名称。

SQL> select * from dept order by deptno;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK             --> this
        20 RESEARCH       DALLAS               --> and this
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL> set serveroutput on
SQL> begin
  2    for i in 1 .. 2 loop
  3      execute immediate
  4        'declare ' ||
  5        '  id_1    number := 10; ' ||
  6        '  id_2    number := 20; ' ||
  7        '  filter1 varchar2(10); ' ||
  8        '  filter2 varchar2(10); ' ||
  9        'begin' ||
 10        '  select dname into filter' || i ||
 11        '  from dept '               ||
 12        '  where deptno = id_'  || i ||';' ||
 13        '  dbms_output.put_line(filter' || i ||');' ||
 14        'end;';
 15    end loop;
 16  end;
 17  /
ACCOUNTING                                      --> here they
RESEARCH                                        --> are

PL/SQL procedure successfully completed.

SQL>

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...