首页 > 解决方案 > 如何从plsql中的表列创建一个数组

问题描述

我有一张表,有一列,我用我的代码得到这样的列值:

100
533
523
634
552
.
.
.

有很多这样的行,然后我想让它像一行一样(100,533,634,552,.,.,.,.)将它们全部添加v_products到数组中。我怎样才能做到这一点?

这是我的代码:

v_products  varchar2(4000);

for c in (select distinct ugb.product_code
          into v_products 
          from uat.product_grup ug,uat.product_grup_con ugb
          where ug.product_grup_code like '%PRODUCT' )
loop
  v_products  := c.product_code;
  dbms_output.put_line(v_products);
end loop;

标签: arraysoracleplsql

解决方案


如果您希望它们作为字符串,请使用LISTAGG.

DECLARE
  v_products  varchar2(4000);
BEGIN
  SELECT LISTAGG( product_code, ',' ) WITHIN GROUP ( ORDER BY product_code )
  INTO   v_products
  FROM   (
    select distinct ugb.product_code
    from   uat.product_grup ug
           CROSS JOIN uat.product_grup_con ugb
    where ug.product_grup_code like '%PRODUCT'
  );
END;
/

如果您希望它们作为一个集合(或VARRAY),则使用BULK COLLECT INTO

DECLARE
  TYPE product_code_list IS TABLE OF uat.product_grup_con.product_code%TYPE;
  v_products product_code_list;
BEGIN
  select distinct ugb.product_code
  BULK COLLECT INTO v_products
  from   uat.product_grup ug
         CROSS JOIN uat.product_grup_con ugb
  where ug.product_grup_code like '%PRODUCT';
END;
/

(顺便说一句,您确定要在WHERE子句中没有相关连接条件的旧逗号连接,这相当于 am ANSICROSS JOIN吗?没有连接条件,您所做的就是product_code从表中获取每个值uat.product_grup_con。您可能想要什么是一个INNER JOIN。)


推荐阅读