【问题标题】:PLSQL: Reference to Unintialized collection exceptionPL SQL:引用未初始化的集合异常
【发布时间】:2016-06-06 15:09:51
【问题描述】:

当我试图执行一个过程时,我得到一个对未初始化集合的异常引用。

这是我的代码。

DROP TYPE SCHEMA.STRARRAY;

CREATE OR REPLACE TYPE SCHEMA.STRARRAY AS TABLE OF VARCHAR2 (255);

程序:

CREATE OR REPLACE PROCEDURE SCHEMA.PR_VALIDATE
(
FILEARRAY IN STRARRAY,
PASSARRAY OUT STRARRAY,
FAILARRAY OUT STRARRAY,
)
IS 
--DECLARE
fileName VARCHAR2 (50);

BEGIN
    for i in 1 .. FILEARRAY.count
       loop
        fileName := FILEARRAY(i);  --Here is the exception
        DBMS_OUTPUT.put_line (FILEARRAY (i));
        --many further queries
        end loop
END;

请帮忙看看这里出了什么问题。

调用代码:

EXEC PR_VALIDATE (STRARRAY('abc.txt')); 

--> 即使 IN 中只有一个参数,这也会给出错误数量的参数

【问题讨论】:

  • 您没有解释如何调用 pr_validate 过程。请更新您的问题以提供调用代码。
  • 谢谢..添加了它,但它也会抛出错误数量的参数异常。不知道出了什么问题..请帮忙。

标签: sql loops stored-procedures plsql


【解决方案1】:

以下调用过程适用于我的过程(我必须对其进行修改才能正常工作;请确保您的示例代码在发布之前编译!):

declare
  farray strarray := strarray();
  parray strarray := strarray();
  flarray strarray := strarray();
begin
  farray :=  STRARRAY('abc.txt'); 

  pr_validate(farray, parray, flarray);
end;
/

【讨论】:

  • 谢谢..我声明的方式有问题吗?我如何使用 IN 参数进行上述操作
  • 您的程序有 OUT 参数。这意味着您需要有一些东西来保存过程返回的参数的值。因此,您需要在调用过程时提供变量来保存这些变量。要在不指定 out 参数的情况下执行此操作,您的过程需要 overloaded 才能只有 in 参数,或者只是简单地从过程中删除 out 参数..
猜你喜欢
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 2021-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
相关资源
最近更新 更多