2016-09-07 4 views
0

私は以前のJava開発者で、OracleのSQL-Developerを使用してOracleの「パッケージ」を作成しています。Oracle 12 "パッケージ"内で、変数または関数またはプロシージャにアクセス可能またはアクセス不可能にするにはどうすればよいですか?

OracleのWebサイトによれば、一部のオブジェクト(変数、関数、プロシージャ)がパッケージのスコープの外側にアクセスできるOracleパッケージを作成することは可能ですが、他のオブジェクトはパッケージ内でのみアクセス可能です。

私は、意図的にしかし表面的にJavaに似ているこのような(疑似コード!)をしようとしています。

したがって、「Oracle PL SQLパッケージ内の(Javaの)PUBLICおよびPRIVATEと同様の機能を、どのように実装するのか」と尋ねています。 (「 『Oracleのキーワードは』正しい方向に私を指すように十分である参照してください。)

感謝を事前に!

CREATE PACKAGE a 
// header 
**PUBLIC** NUMBER nVisibleOutside := 1; 
**PRIVATE** NUMBER nNOTVisibleOutside := 14922016; 

PUBLIC PROCEDURE pVisibleOutside(); 
PUBLIC FUNCTION fNOTVisibleOutside(); 

/* other stuff */ 

// body 

/* actual code of pVisibleOutside and fNOTVisibleOutside(); */ 


END a; 
+3

仕様に記載されているものは、外部発信者が利用できるものです。本文には含まれていますが、仕様で定義されていないものは内部呼び出し可能です。 2つは異なるステートメントによって作成されることに注意してください。各CREATEステートメントの詳細は、[the documentation](https://docs.oracle.com/database/121/LNPLS/packages.htm#LNPLS009)を参照してください。 –

+0

すごく速かった!ありがとう! – posaunist0205

+0

はい、私は正常にいくつかのパッケージを作成しました。私は、可視/不可視の機能がどのように機能しているかを知っていません。再度、感謝します。 – posaunist0205

答えて

0

Oracleがパッケージ仕様とパッケージ本体を使用しています。事実上、仕様はすべてを定義します他のコード領域(例えば、別のパッケージ)によってアクセス可能にしたいプロシージャ/関数/変数/ etcの中身を定義し、本体は "プライベート"である他のプロシージャと関数の定義を含み、定義の背後にあるロジックパッケージ仕様書に記載されています。

次のように上記の提供した例は行くだろう:

XX_EXAMPLE_PACKAGE.p_visible_outside; 

をまた、同様に、あなたは「呼び出すことができます。

CREATE OR REPLACE PACKAGE XX_EXAMPLE_PACKAGE AS 

    -- Variable that is visible to any code 
    n_visible_outside NUMBER := 1; 

    -- Procedure that is visible to any code 
    PROCEDURE p_visible_outside (); 


END XX_PACKAGE_SPECIFICATION; 
/

CREATE OR REPLACE PACKAGE BODY XX_EXAMPLE_PACKAGE AS 

    -- A variable that is visible to the whole package body but not 
    -- to external code 
    v_dummy VARCHAR2(100); 

    -- Procedure visible to any code through the specification 
    PROCEDURE p_visible_outside AS 

    -- declaring a variable that is only visible to this procedure 
    n_not_visible_outside NUMBER := 14922016; 

    BEGIN 

    -- Logic 

    END p_visible_outside; 

    -- Function not visible outside as not declared in specification 
    -- can be accessed by code within this package 
    FUNCTION f_not_visible_outside RETURN BOOLEAN IS 

    --Logic 

    END f_not_visible_outside; 

END; 
/

あなたはその後、別のパッケージから、このように「見える」の手順を呼び出すことができますあなたがすべき将来的に、しかし、開発標準に従うことほど重要ではありません初心者として

​​

:別のパッケージから、このように見える」グローバル変数。おそらく、あなたはいくつかのローカル開発標準を持っていますが、おそらくgoogleのどこかにOracle PL/SQL標準があると思います。

+0

非常に良い書き込み、ありがとうございます。はい、あまりにも標準的な恋人です(私はC、その後Java、さまざまなデータベースではなく、Oracleをコーディングして長年過ごしました)。 – posaunist0205

関連する問題