创建一个名为hellofrom的包,其中包含三个名为proc_1,proc_2和proc_3的公共过程。这些过程中的每一个都应使用DBMS_OUTPUT.PUT_LINE()来显示消息“Hello from Proc x”,其中“x”为1或2或3,视情况而定。 我帮助过这个。现在我试图将Proc 1,2,3互相称呼。 这是我提出的代码,错误就在下面。不确定这意味着什么。我添加了一个函数。
CREATE OR REPLACE PACKAGE BODY hellofrom IS
FUNCTION call_proc --private function
(p_proc_1 VARCHAR2,
p_proc_2 VARCHAR2,
p_proc_3 VARCHAR2)
RETURN VARCHAR2 IS
BEGIN
IF p_proc_1 THEN
DBMS_OUTPUT.PUT_LINE('Hello from Proc_2');
ELSEIF p_proc_2 THEN
DBMS_OUTPUT.PUT_LINE('Hello from Proc_3');
ELSE
DBMS_OUTPUT.PUT_LINE('Hello');
END IF;
END call_proc;
PROCEDURE proc_1
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello from Proc 1');
END proc_1;
PROCEDURE proc_2
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello from Proc 2');
END proc_2;
PROCEDURE proc_3
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello from Proc 3');
END proc_3;
END hellofrom;
答案 0 :(得分:0)
现在我正试图将Proc 1,2,3互相称呼。
根据您的问题标题,这意味着您要从proc_2
拨打proc_1
,从proc_3
拨打proc_2
;
您不需要带有参数的私有函数。您可以像这样编写包代码。
CREATE OR REPLACE PACKAGE hellofrom -- Create package spec.
AS
PROCEDURE proc_1;
PROCEDURE proc_2;
PROCEDURE proc_3;
END hellofrom;
/
CREATE OR REPLACE PACKAGE BODY hellofrom IS
PROCEDURE proc_1
IS
BEGIN
dbms_output.put_line('Hello from Proc 1');
proc_2;
END proc_1;
PROCEDURE proc_2
IS
BEGIN
dbms_output.put_line('Hello from Proc 2');
proc_3;
END proc_2;
PROCEDURE proc_3
IS
BEGIN
dbms_output.put_line('Hello from Proc 3');
END proc_3;
END hellofrom;
现在按如下方式致电proc_1
。
SET SERVEROUTPUT ON
BEGIN
hellofrom.proc_1;
END;
/
<强> O / P 强>
Hello from Proc 1
Hello from Proc 2
Hello from Proc 3
PL/SQL procedure successfully completed.