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

Plsql pl/sql中out参数和返回值之间的差异,plsql,Plsql,我的理解是有两种方法可以从程序或函数返回结果 OUT类型参数:用于从过程和函数中获取值 函数返回的值 我的问题是, 函数中的OUT参数和返回值之间有什么不同 如果我在一个函数中有一个OUT参数,这是否意味着我可以有2个“返回”结果 是的,正如我所说,这是一个非常庞大的话题,但我可以提出一些不同之处。希望能有帮助 答复: 1) 是函数可以有多个OUT IN参数,但返回类型将是常量。因此,如果函数中有OUT参数,则无法在SQL中调用它。类似地,可以在SQL中调用不带OUT参数的函数 2) 您可以使用

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

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

  • 函数返回的值

  • 我的问题是,

  • 函数中的OUT参数和返回值之间有什么不同

  • 如果我在一个函数中有一个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等都是细节。