pl / sql中out参数和返回值之间的差异

时间:2016-07-08 07:02:55

标签: plsql

我的理解是有两种方法可以从程序或函数返回retult,

  1. OUT类型参数:用于从过程和函数中获取值

  2. 从函数

  3. 返回值

    我的问题是,

    1. 函数中OUT参数和返回值之间有什么不同?

    2. 如果我在函数中有一个OUT参数,这是否意味着我可以有2"返回"导致

3 个答案:

答案 0 :(得分:1)

可以从SQL查询(在select或dml语句中)使用没有out参数的函数的返回值。如果你有一个返回简单基本类型的代码,我推荐函数。

SELECT * FROM PAYMENTS WHERE DATE = LAST_DAY_OF_MONTH(SYSDATE)

如果需要返回两个或多个相关值,可以创建一个pl / sql对象并将其返回到函数中,也可以从普通的sql中使用它!

SELECT RESP.CODE, RESP.BODY FROM (SELECT GET_HTTP_RESP(URL) FROM DUAL) RESP;

函数也可以是out参数,但是这些函数(如过程)无法从SQL查询中调用。

如果实际上不应该从SQL查询中调用代码,并且您希望返回不是该代码主要目标的相关值或值,那么过程可能是一个不错的选择。

并非总是有正确的"选择,更像是编程风格的问题。

答案 1 :(得分:0)

是的,因为它是一个非常大的主题,但我可以提出一些不同之处。希望它有所帮助。

答案:

1)是函数可以有多个OUT IN参数但返回类型是常量。因此,如果函数中有OUT Param,则无法在SQL中调用它。类似地,可以在SQL中调用没有OUT参数的FUNCTION。

2)您可以使用OUT和RETURN类型从FUNCTION获取值,但仍然只返回一个返回类型。

CREATE OR REPLACE FUNCTION FUNCT_TEST
(
p_in IN NUMBER,
p_out OUT NUMBER
)
RETURN VARCHAR2
AS
BEGIN
p_out:=10;
RETURN 'AVRAJIT';
END;


SELECT FUNCT_TEST(1) FROM DUAL;

ORA-06553: PLS-306: wrong number or types of arguments in call to 'FUNCT_TEST'

CREATE OR REPLACE FUNCTION FUNCT_TEST
(
p_in IN NUMBER
)
RETURN VARCHAR2
AS
BEGIN
--p_out:=10;
RETURN 'AVRAJIT';
END;

SELECT FUNCT_TEST(1) FROM DUAL;

FUNCT_TEST(1)
AVRAJIT

答案 2 :(得分:0)

您可以在诸如过程之类的函数中添加和使用尽可能多的IN OUT参数(函数/过程中IN OUT参数的限制为65536)。

但是,如果您使用OUT参数创建了函数,则在从SELECT query访问函数时会遇到以下错误:

ORA-06572: Function function_name has out arguments