Oracle Procedure可以生成输出记录吗?

时间:2014-04-18 01:56:46

标签: sql oracle stored-procedures

我是Oracle 10g的新手,并且知道在MS SQL Server中我可以创建一个如下所示的过程来生成输出记录。这是可能的标准Oracle过程还是我需要使用包/函数?

CREATE PROCEDURE SAMPLE_STORED_PROCEDURE 
@USERNAME varchar(10)
AS
BEGIN
SELECT NAME as Output from Employee where Username = @USERNAME
END
GO

谢谢

1 个答案:

答案 0 :(得分:1)

假设username中的employee是唯一的(这对我来说似乎是一个合理的猜测),你可能想要一个函数

CREATE OR REPLACE FUNCTION function_name( p_username IN employee.username%type )
  RETURN employee.name%type
IS
  l_name employee.name%type;
BEGIN
  SELECT name
    INTO l_name
    FROM employee
   WHERE username = p_username;

  RETURN l_name;
END function_name;

您还可以使用带有OUT参数

的程序
CREATE OR REPLACE PROCEDURE procedure_name( p_username IN employee.username%type,
                                            p_name    OUT employee.name%type )
AS
BEGIN
  SELECT name
    INTO p_name
    FROM employee
   WHERE username = p_username;
END procedure_name;

通常,在PL / SQL中,只要你想写一些从数据库中读取数据的“getter”,你就想要使用一个函数,只要你想编写某种写入的“setter”就可以使用一个过程数据到数据库。所以一个函数在这里会更有意义。功能和过程都可以并且应该组织到允许您将相关功能组合在一起的包中。例如,有一个包可以将与添加,修改,删除和阅读员工信息相关的所有功能和程序组合在一起,这可能是有意义的。

如果我原先猜测usernameemployee不唯一,并且您希望select语句返回多行,则有多种不同的选择,具体取决于具体内容你将要处理这些数据。您可以编写一个返回sys_refcursor的函数。您可以编写一个返回集合的函数。您可以编写流水线表函数。然而,在不了解更多的情况下,不可能知道哪些选项在您的情况下更有意义。