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;
我认为应该这样做。