如何使用RECORD作为OUT参数调用oracle存储过程?

时间:2017-03-30 21:19:17

标签: database oracle stored-procedures

我在oracle数据库中有一个程序,看起来像

create or replace PACKAGE MY_PACKAGE AS
  TYPE MY_RECORD IS RECORD
  (
    first_name abc.first_name%TYPE,
    middle_name abc.middle_name%TYPE,
    last_name abc.last_name%TYPE 
  );
  TYPE MY_RECORD_REF IS REF CURSOR RETURN MY_RECORD;
  PROCEDURE getDetails(
    last_name IN OUT VARCHAR2,
    V_MY_RECORD_REF   OUT MY_RECORD_REF);
END MY_PACKAGE;

我想调用存储过程来获取数据并显示它们但不能这样做。

有人可以帮忙吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

该记录可以为您提供结果集的定义。使用打包的类型来定义调用过程时使用的局部变量。

declare
    l_result_Set MY_PACKAGE.MY_RECORD_REF;
    l_record MY_PACKAGE.MY_RECORD;
    l_name abc.last_name%TYPE ;
begin
    -- get the results
    MY_PACKAGE.getDetails(
          l_name 
          , l_result_Set );
    -- now read them
    loop
        fetch l_result_Set into l_record;
        exit when l_result_Set%notfound;
        -- do stuff here
    end loop;
end;
  

“你知道如何在java中做同样的事情吗?”

Ref Cursor是JDBC结果集。 Andrej Koelewijn有一个简短的例子in this blog post。请注意使用Oracle库数据类型OracleTypes.CURSOR。 JDBC Deve指南中介绍了ResultSet的完整扫描。 Find out more.