如何将拆分结果推入数组PL SQL并使用ref游标返回数组数据

伊曼纽尔·安蒂科(Emanuele Antico)

我正在尝试将拆分结果推送到数组中,但是我不知道该怎么做。这是我的存储过程:

   CODE_KZ_i NVARCHAR2 (4000):='';
   FTKZ NVARCHAR2 (4000):='';

   TYPE namesarray IS TABLE OF NVARCHAR2(4000);
   FTarray namesarray:=namesarray();
   i NUMBER;

开始

    FOR FTKZ IN ( SELECT REGEXP_SUBSTR (KZ,'[^;]+', 1,LEVEL)  TXT  FROM DUAL 
                  CONNECT BY REGEXP_SUBSTR (KZ,'[^;]+', 1, LEVEL) IS NOT NULL)

    LOOP

    FTarray.extend;

    IF CONTA = 0 THEN CODE_KZ:=FTKZ.TXT;
    ELSE 
    CODE_KZ:= FTKZ.TXT;

    END IF;

    FTarray(i):= CODE_KZ;
    DBMS_OUTPUT.put_line('FT:'|| FTarray(i));
    i:=i+1;
    CONTA:=CONTA+1;

我的目标是将FTKZ.TXT的结果推入FTarray。有人可以帮我吗?

下一步是在sys_refcursor中返回数组的数据。我在名为KZ的输入中得到了一些代码,我必须返回链接到此表中的kz的另一个代码:SG_AN_FT

    open p_cur_result for
    SELECT DISTINCT FT.CODE as FT INTO P_RESULT FROM SG_AN_FT FT 
          INNER JOIN SG_BOM_PIVOT_PN_KZ BOM
          ON FT.ID = BOM.ID_FT
          INNER JOIN SG_AN_KZ K
          ON K.ID = BOM.ID_KZ
          WHERE K.CODE in (SELECT * FROM TABLE(cast(FTarray as FT));

    Errore(317,60): PL/SQL: ORA-00902: tipo di dati non valido

先感谢您

亚历克斯·普尔

您的循环代码看起来非常接近。为KZ添加定义和虚拟值并清除其他变量,您可以执行以下操作:

declare
  -- made up as not shown in the question
  KZ NVARCHAR2 (4000) := 'A;B;C;D';

  CODE_KZ NVARCHAR2 (4000);

  TYPE namesarray IS TABLE OF NVARCHAR2(4000);
  FTarray namesarray:=namesarray();
  CONTA NUMBER := 1;
begin
  FOR FTKZ IN ( SELECT REGEXP_SUBSTR (KZ,'[^;]+', 1,LEVEL)  TXT  FROM DUAL 
                CONNECT BY REGEXP_SUBSTR (KZ,'[^;]+', 1, LEVEL) IS NOT NULL)
  LOOP
    FTarray.extend;

    -- redundant as both branches do the same thing; also can't be zero
    IF CONTA = 0 THEN
      CODE_KZ:=FTKZ.TXT;
    ELSE 
      CODE_KZ:= FTKZ.TXT;
    END IF;

    FTarray(CONTA):= CODE_KZ;
    DBMS_OUTPUT.put_line('FT:'|| FTarray(CONTA));
    CONTA:=CONTA+1;
  END LOOP;
end;
/

PL/SQL procedure successfully completed.

FT:A
FT:B
FT:C
FT:D

您的IF CONTA = 0检查建议您从索引零开始循环,这将ORA-06532: Subscript outside of limit随着集合从一个非零索引而得到无论如何,该检查似乎都是多余的,因为您在两个分支中都向变量分配了相同的值,因此您可以FTKZ.TXT直接将其分配给新扩展的数组元素。您根本不需要CONTA根本不需要CODE_KZ

declare
  -- made up as not shown in the question
  KZ NVARCHAR2 (4000) := 'A;B;C;D';

  TYPE namesarray IS TABLE OF NVARCHAR2(4000);
  FTarray namesarray:=namesarray();
begin
  FOR FTKZ IN ( SELECT REGEXP_SUBSTR (KZ,'[^;]+', 1,LEVEL)  TXT  FROM DUAL 
                CONNECT BY REGEXP_SUBSTR (KZ,'[^;]+', 1, LEVEL) IS NOT NULL)
  LOOP
    FTarray.extend;
    FTarray(FTArray.count) := FTKZ.TXT;
    DBMS_OUTPUT.put_line('FT:'|| FTarray(FTArray.count));
  END LOOP;
end;
/

PL/SQL procedure successfully completed.

FT:A
FT:B
FT:C
FT:D

但是您也不需要使用循环,可以使用它bulk collect来一次性填充您的集合

declare
  -- made up as not shown in the question
  KZ NVARCHAR2 (4000) := 'A;B;C;D';

  TYPE namesarray IS TABLE OF NVARCHAR2(4000);
  FTarray namesarray:=namesarray();
begin
  SELECT REGEXP_SUBSTR (KZ,'[^;]+', 1,LEVEL) TXT
  BULK COLLECT INTO FTarray
  FROM DUAL 
  CONNECT BY REGEXP_SUBSTR (KZ,'[^;]+', 1, LEVEL) IS NOT NULL;

  FOR i IN 1..FTarray.count LOOP
    DBMS_OUTPUT.put_line('FT:' || FTarray(i));
  END LOOP;
end;
/

PL/SQL procedure successfully completed.

FT:A
FT:B
FT:C
FT:D

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将这些变量推入数组并将其整个结果作为单个数组返回

来自分类Dev

如何将数据推入数组mongodb

来自分类Dev

如何将数组推入对象

来自分类Dev

如何将json项目推入数组?

来自分类Dev

如何将数字的倍数推入数组?

来自分类Dev

如何将值推入数组

来自分类Dev

如何将返回的值推入数组mongodb中?

来自分类Dev

如何将项目推入useState数组中的对象数组?

来自分类Dev

如何将项目推入数组中对象的数组中

来自分类Dev

如何将数组推入Javascript数组中?

来自分类Dev

如何将值和键的数组推入JavaScript对象?

来自分类Dev

如何将多个键和值推入php数组?

来自分类Dev

如何将文本从html输入推入AngularJS数组?

来自分类Dev

如何将单个(可选)参数推入数组

来自分类Dev

如何将值推入多维数组(RUBY)

来自分类Dev

Javascript:如何将多个图像文件推入数组

来自分类Dev

如何将值推入对象内部的数组

来自分类Dev

如何将值正确推入对象数组

来自分类Dev

如何将字符串推入新数组?

来自分类Dev

如何将多个键和值推入php数组?

来自分类Dev

如何将字符串推入多维数组

来自分类Dev

如何将dom html推入php中的数组?

来自分类Dev

如何将文本从html输入推入AngularJS数组中?

来自分类Dev

在ImmutableJS中,如何将新数组推入Map?

来自分类Dev

如何将元素属性值推入javascript数组?

来自分类Dev

如何将值推入全局声明的数组中

来自分类Dev

如何将选择选项推入对象数组

来自分类Dev

angular 2 如何将多个对象推入数组?

来自分类Dev

如何将数组拆分为符号?