如何使用输入参数创建 PL/SQL 存储过程以返回数据集

Posted

技术标签:

【中文标题】如何使用输入参数创建 PL/SQL 存储过程以返回数据集【英文标题】:How to create a PL/SQL stored procedure with input parameter to return a dataset 【发布时间】: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。 使用最新版本,您可以使用隐式结果集:***.com/a/40360471 【参考方案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,在这种情况下创建函数而不是存储过程有哪些优点?

以上是关于如何使用输入参数创建 PL/SQL 存储过程以返回数据集的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL程序设计—— 存储函数&存储过程

带有参数的 PL/SQL 过程/函数从选择查询返回表

使用带有布尔输入参数的 PL/SQL 在 oracle 中调用 java 存储过程

在 PL/SQL 存储过程中将表作为参数传递

Oracle PL/SQL:如何使用可变数组作为输出参数执行过程?

Oracle 存储过程