Plsql 在PL/SQL中使用表作为数组

Plsql 在PL/SQL中使用表作为数组,plsql,Plsql,我正在使用此匿名函数测试一个编程构造,以便包含在更大的脚本中: DECLARE TYPE array IS TABLE OF VARCHAR2(255); g_to array DEFAULT array (); BEGIN INSERT INTO g_to VALUES ('myaddy@internet.com'); END; 但是,当我运行它时,我得到: *Error starting a

我正在使用此匿名函数测试一个编程构造,以便包含在更大的脚本中:

DECLARE
                TYPE array IS TABLE OF VARCHAR2(255);
                g_to array DEFAULT array ();


BEGIN
                INSERT INTO g_to VALUES ('myaddy@internet.com');
END;
但是,当我运行它时,我得到:

*Error starting at line : 1 in command -
DECLARE
                TYPE array IS TABLE OF VARCHAR2(255);
                g_to array DEFAULT array ();


BEGIN
                INSERT INTO g_to VALUES ('myaddy@internet.com');
END;
Error report -
ORA-06550: line 10, column 17:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 10, column 5:
PL/SQL: SQL Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:*

现在,数组已经明确定义,那么为什么插入失败了?

当您将数组放置到需要SQL解释器解释它的位置(与PL/SQL解释器相反),那么数组必须是数据库对象,而不是本地定义的。例如,当您要从数组中进行选择时,就是这种情况

但是,在本例中,即使数组是数据库对象,您尝试执行的操作也是无效的。您不能简单地将变量指定为
INSERT
语句的目标,无论其声明是什么。要正确执行此操作,您需要使用
选择。。。批量收集到…

DECLARE
   TYPE array IS TABLE OF VARCHAR2(255);
   g_to array DEFAULT array ();
BEGIN
   SELECT 'myaddy@internet.com' BULK COLLECT INTO g_to FROM dual;
END;
但是,如果只是将静态值添加到数组中,最好跳过使用SQL产生的上下文切换,直接插入值:

DECLARE
   TYPE array IS TABLE OF VARCHAR2(255);
   g_to array DEFAULT array ();
BEGIN
   g_to.extend
   g_to(g_to.last) := 'myaddy@internet.com';
END;

我认为应该这样做。