是否可以将一个rowtype表从java传递给oracle存储过程?

时间:2013-12-02 10:19:02

标签: java oracle11g table-valued-parameters

我在oracle中得到了这个类型:

TYPE "RequestTable" IS TABLE OF "Requests"%ROWTYPE;

我已将此类型用作某些存储过程的IN(或out)参数,如下所示: 创建或替换 程序

"RegisterRequestsBulk" 
(
  Par_RequestsBulk IN "TableTypes"."RequestTable"  
, ErrorCodeTable OUT "TableTypes"."ErrorCodeTable"
) AS 
BEGIN
...

现在,我需要从Java调用此SP。我应该如何传递这种参数?

1 个答案:

答案 0 :(得分:0)

评论中的链接是执行此操作的“正确”方式。 但是你可以在声明开始结束块中动态创建一个表,并将其传递给你的proc调用。 在java中,创建一个像这样的字符串

  declare 
    lvTable RequestTable; 
    lvError ErrorCodeTable;
  begin 
      select col1, col2 
      BULK COLLECT INTO lvTable          
      from ( 
     ****
     java loop to create lvTable in java string 
      SELECT col1, col2 -- row 1
       FROM dual
      union all          
      SELECT col1, col2 -- row n
       FROM dual
     ****
     );
     RegisterRequestsBulk(lvTable, lvError); 
     open :? for select * from table(lvError); 
  end;

然后你可以使用这个构造的字符串调用你的proc并期望游标中的错误。 http://docs.oracle.com/cd/A84870_01/doc/java.816/a81354/samapp2.htm

希望这是有道理的。