[英]Fetch multiple rows with PL/SQL procedure
程序:
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;
我必須用 JDBC 調用 java 中的過程。 那么如何通過上面的執行代碼調用java中的程序呢?
使用集合(您可以使用CREATE TYPE... AS TABLE OF...
創建)或VARRAY
(如內置VARRAY
的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;
/
或者只返回 cursor(沒有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;
/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.