PL/SQL 循环表列到变量

Posted

技术标签:

【中文标题】PL/SQL 循环表列到变量【英文标题】:PL/SQL loop table columes to variable 【发布时间】:2018-03-20 07:34:32 【问题描述】:

我有一个包含两个列的表:产品 (varchar) 和用法 (varchar)。我需要将表格循环到格式为“product;usage;product;usage...”的一个变量。如何才能做到这一点?以下循环不起作用:

FOR product IN (SELECT product FROM licence_check) LOOP
    product_usage :=  (licence_check.product || ';' ||  licence_check.usage);
  END LOOP;

【问题讨论】:

【参考方案1】:

它必须是一个循环吗?对于不多的值,LISTAGG 可能会完成这项工作:

SQL> select listagg(dname||';'||loc, ';') within group (order by deptno) result
  2  from dept;

RESULT
--------------------------------------------------------------------------------
ACCOUNTING;NEW YORK;RESEARCH;DALLAS;SALES;CHICAGO;OPERATIONS;BOSTON

SQL>

如果它必须是一个循环,我会说你错过了与 PRODUCT_USAGE 本身的连接。看看:

SQL> declare
  2    l_result varchar2(100);
  3  begin
  4    for cur_r in (select dname, loc from dept) loop
  5      l_result := l_result || cur_r.dname ||';'||cur_r.loc ||';';
                     -----------
                     This is what you miss
  6    end loop;
  7    dbms_output.put_line(rtrim(l_result, ';'));
  8  end;
  9  /
ACCOUNTING;NEW YORK;RESEARCH;DALLAS;SALES;CHICAGO;OPERATIONS;BOSTON

PL/SQL procedure successfully completed.

SQL>

【讨论】:

以上是关于PL/SQL 循环表列到变量的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 编程基础,变量,分支,循环,异常

Oracle笔记4-pl/sql-分支/循环/游标/异常/存储/调用/触发器

PL/SQL 将行存储到变量中并在 for 循环中使用它们

Oracle PL/SQL 中的 for 循环后变量丢失值

#Oracle#PL/SQL:多个输入的替换变量

使用 FETCH 的 PL/SQL 游标 FOR 循环