我的环境是Oracle9i Enterprise Edition Release 9.2.0.1.0 。
我原来的代码是:
declare
Type TDetails is table of Ordersdetail%rowtype index by pls_integer;
Type Torderid_tab_t is table of ordersdetail.orderid%type index by Pls_Integer;
Type Tgoodsid_tab_t is table of ordersdetail.goodsid%type index by pls_integer;
ODetails TDetails;
orderid_t Torderid_tab_t;
goodsid_t tgoodsid_tab_t;
L pls_integer;
begin
-- Test statements here
select * bulk collect into ODetails from Ordersdetail
order by Orderid,Goodsid;
for r in ODetails.First..ODetails.Last loop
Dbms_Output.put_line(ODetails(r).Goodsid);
exit when r>10;
end loop;
-----------------------------------------------------------------------------
--不知道为什么,下面这个会产生错误。"bulk in-bind"
-- Oracle9i Enterprise Edition Release 9.2.0.1.0
-----------------------------------------------------------------------------
forall L in ODetails.First..ODetails.Last
update ordersdetail set amount=amount-1,salemoney=(amounT-1)*saleprice
where orderid=ODetails(L).orderid and
goodsid=ODetails(L).goodsid;
Commit;
end;
------------------------------------------------------------------------------------
后来发现必须把错误的部分修改为如下的才可以。
select orderid,goodsid bulk collect into orderid_t,goodsid_t from Ordersdetail
order by Orderid,Goodsid;
forall L in orderid_t.First..orderid_t.Last
update ordersdetail set amount=amount-1,salemoney=(amounT-1)*saleprice
where orderid=orderid_t(L) and
goodsid=goodsid_t(L);
--------------------------------------------------------------------------
按照技术文档,应该在这个版本是可以的(还是说,我看错了?)。
有没有哪位大侠知道是怎么回事的。
我原来的代码是:
declare
Type TDetails is table of Ordersdetail%rowtype index by pls_integer;
Type Torderid_tab_t is table of ordersdetail.orderid%type index by Pls_Integer;
Type Tgoodsid_tab_t is table of ordersdetail.goodsid%type index by pls_integer;
ODetails TDetails;
orderid_t Torderid_tab_t;
goodsid_t tgoodsid_tab_t;
L pls_integer;
begin
-- Test statements here
select * bulk collect into ODetails from Ordersdetail
order by Orderid,Goodsid;
for r in ODetails.First..ODetails.Last loop
Dbms_Output.put_line(ODetails(r).Goodsid);
exit when r>10;
end loop;
-----------------------------------------------------------------------------
--不知道为什么,下面这个会产生错误。"bulk in-bind"
-- Oracle9i Enterprise Edition Release 9.2.0.1.0
-----------------------------------------------------------------------------
forall L in ODetails.First..ODetails.Last
update ordersdetail set amount=amount-1,salemoney=(amounT-1)*saleprice
where orderid=ODetails(L).orderid and
goodsid=ODetails(L).goodsid;
Commit;
end;
------------------------------------------------------------------------------------
后来发现必须把错误的部分修改为如下的才可以。
select orderid,goodsid bulk collect into orderid_t,goodsid_t from Ordersdetail
order by Orderid,Goodsid;
forall L in orderid_t.First..orderid_t.Last
update ordersdetail set amount=amount-1,salemoney=(amounT-1)*saleprice
where orderid=orderid_t(L) and
goodsid=goodsid_t(L);
--------------------------------------------------------------------------
按照技术文档,应该在这个版本是可以的(还是说,我看错了?)。
有没有哪位大侠知道是怎么回事的。
2 type t_test is table of test%rowtype;
3 v_test t_test;
4 BEGIN
5 select * bulk collect into v_test from test;
6 FOR i IN v_test.FIRST .. v_test.last
7 LOOP
8 dbms_output.put_line(v_test(i).ID || ',' || v_test(i).col1 || ',' || v_test(i).col2);
9 END LOOP;
10 end;
11 /PL/SQL procedure successfully completed
order by Orderid,Goodsid;
后来发现必须把错误的部分修改为如下的才可以。
select orderid,goodsid bulk collect into orderid_t,goodsid_t from Ordersdetail
order by Orderid,Goodsid;你比较下上面你修改前后的应该知道为什么。