PL/SQL:语法错误
Posted
技术标签:
【中文标题】PL/SQL:语法错误【英文标题】:PL/SQL: Wrong syntax 【发布时间】:2015-09-18 07:52:36 【问题描述】:我需要创建一个 PL/SQL 匿名块,它必须将数据从 t_src
复制到 t_dest
,并将复制的值存储在表 t_err
中。
t_src
有两列填充了数据并且没有主键。 t_dest
为空,第 1 列为主键。当出现重复异常时,我必须传递它并将重复记录存储在t_err
中。我必须使用游标、forall 和BULK COLLECT
。到目前为止,我已经创建了以下块:
DECLARE
CURSOR c_copy IS
select column1, column2
from t_src;
TYPE curtype IS TABLE of c_copy%ROWTYPE;
cursor1 curtype;
BEGIN
OPEN c_copy;
LOOP
FETCH c_copy BULK COLLECT INTO cursor1;
FORALL c_count IN 1..cursor1.COUNT SAVE EXCEPTIONS
INSERT INTO t_dest
VALUES curtype(c_count)
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
INSERT INTO t_err VALUES curtype(c_count);
EXIT WHEN c_copy%NOTFOUND
END LOOP;
CLOSE c_copy;
END
【问题讨论】:
我无法完成脚本,FORALL 行出现错误 【参考方案1】:TYPE curtype IS TABLE of c_copy%ROWTYPE; 上面的行导致了这个问题。
您需要为每个字段(即 column1、column2)创建表类型变量。
TYPE tab_column1 是 t_src.COLUMN1%TYPE 的表; TYPE tab_column2 是 t_src.column2%type 的表;
L_column1 tab_column1; L_column2 tab_column2;
然后使用
FeTCH c_copy BULK COLLECT INTO L_column1, L_column2;
我之前遇到过类似的问题,这是我用来修复的解决方法。
【讨论】:
以上是关于PL/SQL:语法错误的主要内容,如果未能解决你的问题,请参考以下文章
Oracle PL/SQL:在 SAMPLE 子句中使用变量时出现语法错误