我的理解是有两种方法可以从程序或函数返回retult,
OUT类型参数:用于从过程和函数中获取值
从函数
我的问题是,
函数中OUT参数和返回值之间有什么不同?
如果我在函数中有一个OUT参数,这是否意味着我可以有2"返回"导致
答案 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