【问题标题】:How to create a PL/SQL stored procedure with input parameter to return a dataset如何使用输入参数创建 PL/SQL 存储过程以返回数据集
【发布时间】:2019-01-19 23:39:48
【问题描述】:

我是 PL/SQL 的新手,我正在尝试使用一些输入参数创建一个存储过程,我们将使用这些参数来生成我们的报告。

目标是能够根据用户将输入的输入参数生成 100 或多行数据。

我可以在 SQL Server 中执行此操作,但我不确定如何在 Oracle 中执行此操作。

例如:

Create Procedure usp_employees  
     (@Deptid int not null, 
      @MaritalStatus varchar(10) null)
As
Begin
    Select Firstname, LastName, HireDate, DepartmentName, Marital_Status
    From EmployeeTable
    Where DeparatmentID = @Deptid
      and Marital_Status = @MaritalStatus
End;

然后我像这样执行它:

Execute usp_employees 1,'F';

有人可以告诉我如何使用 PL/SQL 重新创建和执行它吗?

谢谢。

【问题讨论】:

  • 您使用的是哪个 Oracle 版本?
  • 我相信是11g。
  • 使用最新版本,您可以使用隐式结果集:stackoverflow.com/a/40360471

标签: sql oracle plsql


【解决方案1】:

你可以这样做:

CREATE OR REPLACE PROCEDURE usp_employees 
  (p_dept_id           IN int,
   p_MaritalStatus     IN VARCHAR2(10), 
   p_cursor            OUT SYS_REFCURSOR)
IS
BEGIN
   Open p_cursor for
    select Firstname, LastName, HireDate,    
           DepartmentName, Marital_Status
    from EmployeeTable
    where DeparatmentID=p_dept_id
    and Marital_Status=p_maritalstatus;

EXCEPTION
WHEN no_data_found THEN 
NULL;
 END;
/

要通过 GUI 运行,请右键单击存储过程,然后单击测试。提供输入参数并单击执行。您可以 Step into the code 或 Over。完成后,选择参考光标旁边的“...”以查看结果集。

通过查询,

SQL> var rc refcursor
SQL> execute myproc(10, “Single”, :test)
SQL> print rc

【讨论】:

  • 感谢 Gauravsa。执行它以查看结果的最佳方法是什么?
  • 通常我右键单击存储过程并单击测试。然后在测试窗口中提供输入并点击“...”查看结果集
  • 如果您有一个带有一个输出参数的过程,那么我宁愿创建一个函数CREATE OR REPLACE FUNCTION usp_employees (p_dept_id IN integer, p_MaritalStatus IN VARCHAR2) RETURN SYS_REFCURSOR IS ...
  • Wernfried Domscheit,在这种情况下创建函数而不是存储过程有哪些优点?
猜你喜欢
  • 1970-01-01
  • 2011-05-03
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 2010-12-13
  • 2018-12-17
  • 1970-01-01
  • 2018-06-14
相关资源
最近更新 更多