如何在Oracle中修改Collection类型的变量。

如何在JAVA程序中使用Struct一次传入多条数据给Oracle的存储过程中我介绍了如何通过定义Struct和Array在JAVA程序中一次传入多条数据给Oracle的存储过程。

步骤一:定义对象类型。 

CREATE TYPE department_type AS  OBJECT (
DNO 
NUMBER (10
),
NAME 
VARCHAR2 (50
),
LOCATION 
VARCHAR2 (50
)
);

步骤二:定义一个对象类型的数组对象。

CREATE TYPE dept_array AS TABLE OF department_type;

步骤三:定义存储过程来插入数据。

CREATE OR REPLACE PACKAGE objecttype AS
  
PROCEDURE  insert_object (d dept_array);
END
 objecttype;

CREATE OR REPLACE
 PACKAGE BODY objecttype
AS

PROCEDURE  insert_object (d dept_array)
AS

BEGIN
FOR i IN  d.FIRST..d.LAST
LOOP
INSERT INTO
 department_teststruct
VALUES
 (d(i).dno,d(i).name,d(i).location);
END
 LOOP;
END
 insert_object; 
END
 objecttype;

 如果我们需要对dept_array类型的d进行的更新的话,那么直接使用下面的语句系统会提示错误。

CREATE   OR   REPLACE  PACKAGE objecttype  AS
  
PROCEDURE  insert_object (d dept_array);
END  objecttype;

CREATE   OR   REPLACE  PACKAGE BODY objecttype
AS
PROCEDURE  insert_object (d dept_array)
AS
   
BEGIN
      
FOR  i  IN  d.FIRST..d.LAST
          LOOP
             d(i).location :
=   ' New Loc ' || i;
             
INSERT   INTO  department_teststruct
                
VALUES  (d(i).dno,d(i).name,d(i).location);
          
END  LOOP;
END  insert_object; 
END  objecttype;

错误提示: PLS-00363: expression 'D.LOCATION' cannot be used as an assignment target

正确的方法是:

CREATE   OR   REPLACE  PACKAGE BODY objecttype
AS
procedure  insert_object(d  in  out dept_array)
is
  
begin
   
for  i  in   1 ..d. count  loop --与FOR i IN d.FIRST..d.LAST 功能相同
    d(i).location : =   ' New Loc ' || i;
    
INSERT   INTO  department_teststruct
        
VALUES  (d (i).dno,d (i).name,d (i).location);
   
end  loop;
  
end  insert_object;
END  objecttype;

关键问题是:d 必须是output类型(代码中红色粗体标记部分)。

参考内容:http://forums.oracle.com/forums/thread.jspa?messageID=2208830&#2208830

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值