如何在SQL Developer中执行存储过程

时间:2018-10-10 10:40:02

标签: sql oracle stored-procedures oracle-sqldeveloper

我正在尝试在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);

2 个答案:

答案 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;
/

现在我要执行此操作,然后看看会回来什么。

enter image description here