2017-10-31 12 views
-2

proc_1、proc_2、およびproc_3という3つのパブリックプロシージャを含むhellofromというパッケージを作成します。これらの各プロシージャは、DBMS_OUTPUT.PUT_LINE()を使用して、「Hello from Proc x」というメッセージを表示する必要があります。ここで、「x」は1または2または3です。 私はこれを手伝ってくれました。今、私はProc 1,2,3をお互いに呼び出そうとしています。 これは私が思いついたコードであり、間違いはその下にあります。それが何を意味するか分かりません。私は関数を追加しました。hellofromというパッケージを作成します。 Proc_1はProc_2、Proc_2を呼び出し、Proc_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

"p_proc_1はTHEN IF" これは意味がありません。 p_pfoc_1は文字列でありブール値ではないので、入力パラメータの期待値は? – OldProgrammer

+0

'elseif'は' elsif'でなければなりません。 –

答えて

0

今はお互いにPROC 1、2、3を呼び出すようにしようとしています。それはあなたがproc_1、およびproc_2から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. 
+0

ありがとう。私の質問のいくつかは進まなかった。 Proc_1はproc_2を呼び出し、proc_2はproc_3を呼び出す必要があるため、proc_1のproc_2への参照とproc_2のproc_3への参照を含める必要があります。これらは3つすべての手順をチェックするパッケージを記述するときに見える必要があります。だからこそ私は機能を追加した。それはプライベートにしていないのですか? –

+0

pl/sqlにはプロシージャの明示的な 'private'または' public'定義はありません。パッケージ仕様で定義されているものはパブリックスコープです。パッケージ本体の中で定義されているものはパッケージ専用です。今度はあるprocを別のprocから呼び出すので、それらの引数を持つ関数は必要ありません。これは単に他のすべてのプロシージャを呼び出すspecで定義された関数にすることができます。それがあなたが望む方法であれば、質問を編集して、関数と手続きをどのように呼び出すかを具体的に説明します。 –

関連する問題