我正在尝试在Oracle SQL Developer中执行存储过程。我已经成功编译了以下内容,并将其链接到包含数据的两个单独的表,这些表通过外键连接。
create or replace procedure practice_run
(
name out varchar2,
emp_id out varchar2
)
AS
BEGIN
SELECT emp_name, employeeID INTO name, emp_id FROM employee JOIN department ON employee.employeeID = department.employeeID WHERE department_name='research';
END practice_run;
所以我想要这个存储的生产者输出的是在“研究”部门工作的所有雇员的名字和姓氏
我已经在网上搜索了此信息,但发现了类似下面的内容,但没有为我输出任何数据。
DBMS_SQL.RETURN_RESULT(practice_run);
答案 0 :(得分:1)
该过程以以下方式执行
VAR ename VARCHAR2(100);
VAR emp_id VARCHAR2(100);
BEGIN
practice_run (ename, emp_id);
END;
PRINT ename;
PRINT emp_id;
您可以利用DBMS_SQL.RETURN_RESULT
的使用,将过程修改为具有SYS_REFCURSOR
CREATE TABLE emp
(
emp_id VARCHAR2 (12),
ename VARCHAR2 (12)
);
INSERT INTO emp (emp_id, ename)
VALUES ('1234', 'James');
COMMIT;
CREATE OR REPLACE PROCEDURE practice_run (p_emp_id IN VARCHAR2)
AS
c1 SYS_REFCURSOR;
BEGIN
OPEN c1 FOR
SELECT emp_id, ename
FROM emp
WHERE emp_id = p_emp_id;
DBMS_SQL.return_result (c1);
END practice_run;
执行步骤
BEGIN
practice_run ('1234');
END;
答案 1 :(得分:0)
看看DBMS_SQL.RETURN_RESULT(Docs)
在T-SQL中,仅运行查询非常普遍。
但是在PL / SQL中,更多的是与查询结果进行交互。如果您只想运行查询并仅打印结果,则从历史上看,您的OUT绑定参数类型为SYS_REFCURSOR,您的程序会选择这些参数。
现在,在数据库12c中,您可以在代码内说要返回结果,而无需更改过程调用本身-不需要OUT参数。
这是一个例子。
create or replace procedure sql_return_results as
v_cursor SYS_REFCURSOR;
begin
open v_cursor for
select *
from employees
fetch first 15 rows only;
dbms_sql.return_result(v_cursor); --this is the KEY line
end sql_return_results;
/
现在我要执行此操作,然后看看会回来什么。