【发布时间】:2015-09-28 04:17:04
【问题描述】:
我有一个这样的包:
CREATE OR REPLACE PACKAGE someschema.somepackage
AS
TYPE t_str_array IS TABLE OF VARCHAR2 (500)
INDEX BY BINARY_INTEGER;
PROCEDURE some_procedure_p (in_first IN NUMBER,
in_second IN VARCHAR2,
in_third IN t_str_array,
in_fourth IN date,
in_fifth IN date,
out_sixth_cur OUT t_some_ref);
END;
/
CREATE OR REPLACE PACKAGE BODY someschema.somepackage
AS
PROCEDURE some_procedure_p (in_first IN NUMBER,
in_second IN VARCHAR2,
in_third IN t_str_array,
in_fourth IN date,
in_fifth IN date,
out_sixth_cur OUT t_some_ref);
IS
BEGIN
FOR i IN in_third.FIRST .. in_third.LAST
LOOP
... do something
END LOOP COMMIT;
OPEN out_sixth_cur FOR
SELECT ... something;
END;
END somepackage;
如何在 toad 中执行此过程?到目前为止,我已经尝试过:
程序右键,点击执行包,自动生成调用代码:
DECLARE
IN_FIRST NUMBER;
IN_SECOND VARCHAR2(32767);
IN_THIRD someschema.somepackage.t_str_array;
IN_FOURTH DATE;
IN_FIFTH DATE;
OUT_SIXTH_CUR someschema.somepackage.t_some_ref;
BEGIN
IN_FIRST := NULL;
IN_SECOND:= NULL;
IN_FOURTH := NULL;
IN_FIFTH := NULL;
OUT_SIXTH_CUR := NULL;
someschema.somepackage.some_procedure_p ( IN_FIRST, IN_SECOND, IN_THIRD, IN_FOURTH, IN_FIFTH, OUT_SIXTH_CUR );
:rc0_OUT_SIXTH_CUR := OUT_SIXTH_CUR;
COMMIT;
END;
我补充说:
IN_THIRD := t_str_array('something');
但是当我这样运行它时,我得到了以下错误:
PLS-00201: identifier 'T_STR_ARRAY' must be declared
如果我已经在包规范中定义了这个类型,为什么会出现这个错误??我也尝试了许多其他方法,但总是抱怨类型。
【问题讨论】:
-
为什么您认为您不需要 需要将它称为 someschema.somepackage.t_str_array 来进行该分配,就像您在前几行的声明中所做的那样?
-
如果你想初始化
in_third局部变量,你至少需要包含包名。如果您以其他用户身份运行,则还需要包含架构名称。IN_THIRD := someschema.somepackage.t_str_array('something');应该初始化in_third局部变量。 -
我做了,我得到了错误:
PLS-00222: no function with name 'T_STR_ARRAY' exists in this scope