【发布时间】:2014-08-18 19:51:55
【问题描述】:
我有以下代码块:
DECLARE
CURSOR c_cursor IS
SELECT *
FROM table_a;
FOR i IN c_cursor LOOP
IF i.id NOT IN (SELECT id FROM table_b WHERE ind_val='Y')
THEN
BEGIN
INSERT INTO val_table_err
VALUES (''ERROR:id''|| i.id,
1,
1,
NULL,
1,
i.type_cd);
END;
END IF;
END LOOP;
我收到错误PLS-00405: SUBQUERY NOT ALLOWED IN THIS CONTEXT
如有任何帮助解决此问题,我们将不胜感激。
【问题讨论】:
-
问题很容易发现...如果 i.id 不在(子查询)中是无效的。我认为这类似于 if exists select id from table_B where ind_valu = 'y' and i.id = b.id (但我对 12c 并不完全熟悉)。附带问题....为什么将其用作游标?一个没有循环的语句要好得多
-
pl/sql脚本中还有很多其他的使用游标的代码。应该提到这一点。
-
你为什么首先使用 PL/SQL?这可以通过一个简单的插入语句更有效地完成:
insert into val_table_err select ... from table_a where a.id not in (select id from table_b where ind_val = 'Y')
标签: sql oracle for-loop oracle12c