Получить несколько строк с помощью процедуры PL / SQL - PullRequest
0 голосов
/ 18 апреля 2020

Процедура:

create or replace PROCEDURE employee_project1 (
  emp_id   in  EMPLOYEES.EMPLOYEE_ID%TYPE,
  cur      out SYS_REFCURSOR
)
IS
BEGIN
  OPEN cur FOR
    SELECT p.project_id,
           p.project_name
    FROM   employees e
           INNER JOIN departments d
           ON ( e.department_id = d.department_id )
           INNER JOIN projects p
           ON ( p.department_id = e.department_id)
    WHERE  e.employee_id = emp_id;
END;

Эта процедура работает для меня. Я выполняю процедуру с кодом ниже:

Выполнение:

declare
    cur SYS_REFCURSOR;
    pro_id int;
    pro_name projects.project_name%TYPE;
begin
    employee_project1(43, cur);
    loop
        fetch cur into pro_id, pro_name;
        exit when cur%NOTFOUND;
        dbms_output.put_line(pro_id||' '||pro_name);
    end loop;
end;

Я должен вызвать процедуру в java с JDB C. Так как я могу вызвать процедуру в java с помощью приведенного выше кода выполнения?

1 Ответ

0 голосов
/ 18 апреля 2020

Используйте коллекцию (которую вы можете создать с помощью CREATE TYPE ... AS TABLE OF ...) или VARRAY (например, встроенную VARRAY s SYS.ODCI*LIST) и BULK COLLECT INTO:

CREATE PROCEDURE employee_project (
  emp_id    in  EMPLOYEES.EMPLOYEE_ID%TYPE,
  pro_ids   out SYS.ODCINUMBERLIST,
  pro_names out SYS.ODCIVARCHAR2LIST
)
IS
BEGIN
  SELECT p.project_id,
         p.project_name
  BULK COLLECT INTO
         pro_ids,
         pro_names
  FROM   employees e
         INNER JOIN departments d
         ON ( e.department_id= d.department_id )
         INNER JOIN projects p
         ON ( p.department_id = d.department_id)
  WHERE  e.employee_id = emp_id;
END;
/

или просто вернуть курсор (без предложения INTO):

CREATE PROCEDURE employee_project (
  emp_id   in  EMPLOYEES.EMPLOYEE_ID%TYPE,
  cur      out SYS_REFCURSOR
)
IS
BEGIN
  OPEN cur FOR
    SELECT p.project_id,
           p.project_name
    FROM   employees e
           INNER JOIN departments d
           ON ( e.department_id= d.department_id )
           INNER JOIN projects p
           ON ( p.department_id = d.department_id)
    WHERE  e.employee_id = emp_id;
END;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...