创建一个名为hellofrom的包。 Proc_1应调用Proc_2,Proc_2,调用Proc_3;

时间:2017-10-31 13:47:37

标签: oracle plsql oracle-apex

创建一个名为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;

1 个答案:

答案 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.