【问题标题】:Error while calling function from procedure from same package从同一包中的过程调用函数时出错
【发布时间】:2020-02-07 12:08:18
【问题描述】:

我是 oracle 新手。我创建了一个包含规范和正文的包。

它的标题是:

CREATE OR REPLACE PACKAGE OT.PK_TEST IS
FUNCTION PRNT_STRNG RETURN VARCHAR2;
PROCEDURE PR_SUPERHERO(F_NAME VARCHAR2,L_NAME VARCHAR2);
END PK_TEST;
/

它的主体是:

CREATE OR REPLACE PACKAGE BODY OT.PK_TEST IS
FUNCTION PRNT_STRNG 
RETURN VARCHAR2
IS
BEGIN
RETURN 'ASHWIN';
END PRNT_STRNG;
PROCEDURE PR_SUPERHERO(F_NAME VARCHAR2,L_NAME VARCHAR2) 
IS
BEGIN
OT.PK_TEST.PRNT_STRNG;
DBMS_OUTPUT.PUT_LINE(F_NAME);
DBMS_OUTPUT.PUT_LINE(L_NAME);
END PR_SUPERHERO;
END PK_TEST;
/

我想测试是否可以从程序体中调用该函数。所以,我补充说:

OT.PK_TEST.PRNT_STRNG;

调用返回varchar的函数。但是,我得到了错误:

[Warning] ORA-24344: success with compilation error
11/1    PLS-00221: 'PRNT_STRNG' is not a procedure or is undefined
11/1    PL/SQL: Statement ignored
 (1: 0): Warning: compiled but with compilation errors

我可以从同一个包的过程中调用函数吗?另外,我可以调用不同包的函数吗?

【问题讨论】:

    标签: database oracle plsql oracle11g


    【解决方案1】:

    调用函数会返回一个输出。您需要将函数分配给如下变量:

    some_var = OT.PK_TEST.PRNT_STRNG;
    

    只能直接调用过程

    【讨论】:

      【解决方案2】:

      是的,您可以在同一个包中调用函数/过程。您也可以从其他包或其他模式中调用其他函数,您只需引用它即可。您唯一缺少的是将变量分配给您调用的函数的返回值。

      你应该这样做:

      v_temp VARCHAR2(32 CHAR);
      
      BEGIN
          v_temp := OT.PK_TEST.PRNT_STRNG;
          DBMS_OUTPUT.PUT_LINE(v_temp );
          DBMS_OUTPUT.PUT_LINE(F_NAME);
          DBMS_OUTPUT.PUT_LINE(L_NAME);
      END PR_SUPERHERO;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-21
        • 2019-10-14
        • 2021-08-07
        • 1970-01-01
        相关资源
        最近更新 更多