首页 > 解决方案 > PL/SQL:接收一个数组作为参数并循环遍历它

问题描述

我正在尝试处理从 C++ 代码调用的字符串值数组(单列),并在存储过程中使用 PL/SQL 对其进行迭代。为此,我创建了一个新类型:

CREATE OR REPLACE TYPE "DEVICELIST_OBJTYP" AS OBJECT
 (DEVICE VARCHAR2(46 BYTE))
/

CREATE OR REPLACE TYPE devicelist_coltyp AS
    TABLE OF devicelist_objtyp;
/

PL/SQL 过程如下所示(删除了看似不相关的逻辑):

PROCEDURE pr_MyProc
    ( p_UserId              IN     USERSTAB.USRID%TYPE,
    p_DeviceList            IN     DEVICELIST_OBJTYP,
    p_ResCode               OUT    NUMBER,
    p_ResMsg                OUT    VARCHAR2)
IS
BEGIN
...
FOR i IN 1 .. p_DeviceList.COUNT LOOP
    dbms_output.put_line(i);
    --more code to follow..
END LOOP;
...
END;
/

当我尝试编译该过程时,我失败了:

Warning: Package Body created with compilation errors.

Errors for PACKAGE BODY PA_HANDLE_ASSETS:

LINE/COL ERROR
-------- -----------------------------------------------------------------
135/17   PL/SQL: Statement ignored
135/44   PLS-00302: component 'COUNT' must be declared
BEGIN
*
ERROR at line 1:
ORA-20002:
ORA-06512: at line 4

我应该如何在不提供 .COUNT 属性的情况下迭代嵌套表对象?当我尝试不使用 .COUNT 时,我在 ~“p_DeviceList 不是光标”行中出错了。我应该将 p_DeviceList 对象转换为另一种类型的数据吗?

标签: oracleplsql

解决方案


推荐阅读