среда, 14 декабря 2011 г.

Работа с REF CURSOR в OA Framework

Допустим, есть функция, возвращающая REF CURSOR
CREATE OR REPLACE PACKAGE XX_TST AS
TYPE crResultSet is REF CURSOR;

function getCursor () return crResultSet;
END XX_TST;

CREATE OR REPLACE PACKAGE BODY XX_TST AS
  function getCursor () return crResultSet IS
  retCursor crResultSet;
  begin
    open retCursor for
    SELECT dummy from dual;
    return retCursor;
  
  end getCursor;

END XX_TST;
Для того, чтобы получить записи из курсора, нужно использовать метод getObject в классе OracleCallableStatement

В Application Module добавляем в раздел import и в нужный метод следующий код
imports:

  import oracle.jdbc.OracleCallableStatement;
  import oracle.jdbc.OracleResultSet;
  import java.sql.Connection;
  import java.sql.SQLException;


В метод:
    try {
    Connection conn = getOADBTransaction().getJdbcConnection();
    OracleCallableStatement mainSt = (OracleCallableStatement)conn.prepareCall("begin :1 := XX_TST.getCursor(); end;");
    mainSt.registerOutParameter(1, oracle.jdbc.driver.OracleTypes.CURSOR);
    mainSt.executeQuery();

    // Получаем результирующий набор из ref курсора
    OracleResultSet mainRs = (OracleResultSet)mainSt.getObject(1);

    // Получаем записи из курсора
    while (mainRs.next())
    {
       ...
    }
    
    } catch (java.sql.SQLException sql_e)
    {
      
    }

Комментариев нет:

Отправить комментарий