我是oracle的新手。我创建了一个包含spec和body的软件包。
它的标题是:
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
我可以从同一包的过程中调用函数吗?另外,我可以调用其他程序包的功能吗?
答案 0 :(得分:3)
调用函数将返回输出。您需要将函数分配给变量,例如:
some_var = OT.PK_TEST.PRNT_STRNG;
您只能直接调用过程
答案 1 :(得分:1)
是的,您可以在同一程序包中调用函数/过程。您也可以从其他程序包或其他架构中调用其他函数,只需引用它即可。您唯一缺少的就是为您调用的函数的返回值分配一个变量。
您应该这样做:
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;