Получить несколько результатов для PL / SQL декальдированная переменная из scala - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть процедура PL / SQL, как показано ниже.

Create or replace procedure SP 
AS 
a Varchar(18);
B NUMBER;
CURSOR c_one IS
 ( SOME SELECT QUERY);

CURSOR c_two IS
 ( SOME SELECT QUERY);
BEGIN
  OPEN c_one;
    --SOME STUFF;
  CLOSE cursor;

    LOOP
    OPEN c_two;
    --SOME STUFF;
    CLOSE cursor;

   dbms_output.put_line(a)

    END LOOP;

END

Мне нужно вызвать этот SP в моем коде scala и получить все значения a. Поэтому я выполняю SP в своем коде, как показано ниже.

val callableStatement = connection.prepareCall("{CALL SP}")

Что мне делать дальше, чтобы получить все результаты a?

1 Ответ

0 голосов
/ 27 февраля 2020

Я решил мою проблему с редактированием хранимой процедуры.

Create or replace procedure SP ( out_cursor OUT SYS_REFCURSOR) AS 

ID Varchar(18);
Emp_Name Varchar(18);

CURSOR c_one IS
 ( SOME SELECT QUERY);

CURSOR c_two IS
 ( SOME SELECT QUERY);

BEGIN

  EXECUTE IMMEDIATE 'DROP TABLE tempTable';
  EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE tempTable(Emp_ID VARCHAR(50)) ON COMMIT PRESERVE ROWS';

  OPEN c_one;
    --SOME STUFF;
  CLOSE cursor;

    LOOP
    OPEN c_two;
    --SOME STUFF;
    CLOSE cursor;

   EXECUTE IMMEDIATE 'INSERT INTO tempTable(Emp_ID) VALUES('||ID||')';

   END LOOP;

   OPEN out_cursor FOR 'SELECT * FROM tempTable';

END;

Затем я вызвал SP в своем коде scala и создал фрейм данных, используя набор результатов.

var lst:List[String] = List[String]()

try{
  val callableStatement = connection.prepareCall("{CALL SP(?)}")
  callableStatement.registerOutParameter(1, OracleTypes.CURSOR)
  callableStatement.execute()

  val rs = callableStatement.getObject(1).asInstanceOf[ResultSet]

  while (rs.next()){
     val i = rs.getString(1)
     lst ::=i
    }

 val ds = lst.toDS().toDF("EMP_ID")

 //rest of the code

}catch {
      case e: Exception => e.printStackTrace
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...