【发布时间】:2016-06-22 15:19:43
【问题描述】:
我正在尝试遍历存储表值的游标。我使用 FOR 循环进行迭代,如果满足其中一个条件,我将输出存储在另一个表中。我不确定我正在遵循的方法并且也收到错误(ORA-00933:SQL 命令未正确结束)。 Stats_Queries 是我在其中迭代光标的参考表。 STATS_RESULT_CARD 是我的输出表,我必须在其中存储结果。请帮忙。
DECLARE
CURSOR c1 IS
select Stats_Queries.OBJECTTYPE, Stats_Queries.CATEGORY, Stats_Queries.QUERY
from Stats_Queries;
r1 c1%ROWTYPE;
BEGIN
FOR r1 IN c1 LOOP
If (r1.OBJECTTYPE = 'CARD') THEN
INSERT INTO STATS_RESULTS_CARD (NODETYPENAME, NODEDEFNAME , CARDTYPENAME, PROVISIONSTATUSNAME, STATDATE, CARDCOUNT)
select nt.name, nd.name, ct.name, ps.name, sysdate, count(c.cardid)
from cardtype ct, card c, node n, nodetype nt, nodedef nd, provisionstatus ps
where ct.name in ('SRA AMP', 'XLA AMP', 'SAM', 'ESAM')
and ct.cardtypeid = c.card2cardtype
and c.card2node = n.nodeid
and n.node2nodetype = nt.nodetypeid
and n.node2nodedef = nd.nodedefid
and c.card2provisionstatus = ps.provisionstatusid
group by nt.name, nd.name, ct.name, ps.name
END If;
END LOOP;
END;
【问题讨论】:
-
游标和循环内的插入语句之间没有任何链接。因此,您要插入 X 个相同数据的副本,具体取决于游标中有多少行的对象类型为“CARD”(顺便说一句,为什么要在循环中而不是在游标本身中进行过滤?!)。这是你想要发生的事情吗?