我不能在Explicit Cursors中使用序列。
错误:PL / SQL:ORA-02287:此处不允许序列号
代码:
CURSOR c_service_consumer IS
select ops$KLI.SVC_SEQ.Nextval,
adr_cli_id_s,
null,
svc_srv_id_s
...
我试着这样使用:
CURSOR c_service_consumer IS
select SELECT ops$KLI.SVC_SEQ.Nextval FROM DUAL,
adr_cli_id_s,
null,
svc_srv_id_s
也是同样的错误。
这是Cursor:
TYPE l_service_consumer_row IS TABLE OF TA_MAIN.SERVICE_CONSUMER%ROWTYPE;
l_service_consumer l_service_consumer_row;
CURSOR c_service_consumer IS
select ops$KLI.SVC_SEQ.Nextval,
a.adr_cli_id_s,
svc_prp_id_s,
svc_srv_id_s
from ops$luan.be_1304_grain_adr a
left outer join ta_main.clients c on (a.adr_cli_id_s = c.cli_id_s);
BEGIN
OPEN c_service_consumer;
FETCH c_service_consumer BULK COLLECT INTO l_service_consumer;
CLOSE c_service_consumer;
/*Insert the collection of values*/
FORALL i IN INDICES OF l_service_consumer SAVE EXCEPTIONS
INSERT INTO TA_MAIN.SERVICE_CONSUMER
VALUES l_service_consumer(i);
答案 0 :(得分:1)
希望这有助于(未经测试)
TYPE l_service_consumer_row IS TABLE OF TA_MAIN.SERVICE_CONSUMER%ROWTYPE
INDEX BY BINARY_INTEGER;
l_service_consumer l_service_consumer_row;
fetch_size NUMBER := 5000; -- scale the value
CURSOR c_service_consumer IS
select -1 id,
a.adr_cli_id_s,
svc_prp_id_s,
svc_srv_id_s
from ops$luan.be_1304_grain_adr a
left outer join ta_main.clients c on (a.adr_cli_id_s = c.cli_id_s);
BEGIN
OPEN c_service_consumer;
loop
FETCH c_service_consumer BULK COLLECT INTO l_service_consumer LIMIT fetch_size;
FOR i IN 1 .. l_service_consumer.COUNT LOOP
l_service_consumer(i).id = ops$KLI.SVC_SEQ.Nextval;
END LOOP;
/*Insert the collection of values*/
FORALL i IN INDICES OF l_service_consumer SAVE EXCEPTIONS
INSERT INTO TA_MAIN.SERVICE_CONSUMER
VALUES l_service_consumer(i);
EXIT WHEN c_service_consumer%NOTFOUND;
END LOOP;
CLOSE c_service_consumer;
End;