Plsql pl/sql中out参数和返回值之间的差异
我的理解是有两种方法可以从程序或函数返回结果Plsql pl/sql中out参数和返回值之间的差异,plsql,Plsql,我的理解是有两种方法可以从程序或函数返回结果 OUT类型参数:用于从过程和函数中获取值 函数返回的值 我的问题是, 函数中的OUT参数和返回值之间有什么不同 如果我在一个函数中有一个OUT参数,这是否意味着我可以有2个“返回”结果 是的,正如我所说,这是一个非常庞大的话题,但我可以提出一些不同之处。希望能有帮助 答复: 1) 是函数可以有多个OUT IN参数,但返回类型将是常量。因此,如果函数中有OUT参数,则无法在SQL中调用它。类似地,可以在SQL中调用不带OUT参数的函数 2) 您可以使用
是的,正如我所说,这是一个非常庞大的话题,但我可以提出一些不同之处。希望能有帮助 答复: 1) 是函数可以有多个OUT IN参数,但返回类型将是常量。因此,如果函数中有OUT参数,则无法在SQL中调用它。类似地,可以在SQL中调用不带OUT参数的函数 2) 您可以使用OUT和返回类型从函数中获取值,但返回类型仍然只有一个
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
从没有out参数的函数返回的值可以从SQL查询中使用(在select或dml语句中)。如果您有一个返回简单基元类型的代码,请使用i reccomend函数
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查询中调用,并且您希望返回不相关的值或不是该代码主要目标的值,那么过程可能是一个不错的选择
并非总是有一个“正确”的选择,这更像是一个编程风格的问题。您可以在函数(如过程)中添加和使用尽可能多的
IN-OUT
参数(函数/过程中的IN-OUT参数限制为65536)
但是,如果您使用OUT
参数创建了函数,则在从SELECT query
访问函数时,会出现以下错误:
ORA-06572:Function\u name没有参数
第二个问题的答案是:是。第一个问题是一个非常大的话题,要了解相似性和差异性,请研究这里的文档:您认为有什么不同?显然,函数类似于upper('x')
,过程类似于dbms\u output.put\u line('x')
,因此主要区别在于语义。通过引用传递、调用SQL等都是细节。