sql >> データベース >  >> RDS >> Oracle

テスト目的でプライベートplsqlプロシージャにアクセスする方法はありますか?

    10g以上であれば、これを行う方法があります。これは条件付きコンパイルと呼ばれます。これは非常に優れた機能であり、特別な構文を提供するため、コンパイル時にPL/SQLコードを変更できます。

    たまたま、私はこの機能を正確に使用して、仕様内のプライベートパッケージを公開し、それらに対してUTPLSQLテストを実行できるようにしています。

    特別な構文は次のとおりです。

    create or replace package my_pkg
    as
    
        $IF $$dev_env_test $THEN
    
        PROCEDURE private_proc;
    
        $END
    
        FUNCTION public_function return date;
    
    end my_pkg;
    /
    

    2ドル記号の付いた変数は、条件付きコンパイルフラグです。

    パッケージについて説明すると、パブリックパッケージしか表示されません:

    SQL> desc my_pkg
    FUNCTION PUBLIC_FUNCTION RETURNS DATE
    
    SQL>
    

    ここで、条件付きフラグを設定してパッケージを再コンパイルし、まるで魔法のように...

    SQL> alter session set plsql_ccflags='dev_env_test:true'
      2  /
    
    Session altered.
    
    SQL> alter package my_pkg compile
      2  /
    
    Package altered.
    
    SQL> desc my_pkg
    PROCEDURE PRIVATE_PROC
    FUNCTION PUBLIC_FUNCTION RETURNS DATE
    
    SQL>
    

    関数の民営化は、あなたが思うほど簡単です:

    SQL> alter session set plsql_ccflags='dev_env_test:false'
      2  /
    
    Session altered.
    
    SQL> alter package my_pkg compile
      2  /
    
    Package altered.
    
    SQL> desc my_pkg
    FUNCTION PUBLIC_FUNCTION RETURNS DATE
    
    SQL>
    

    条件付きコンパイルを使用すると、さらに多くのことができます。ドキュメントで説明されています。 詳細



    1. 500GBのSQLテーブルをApacheParquetに変換する方法は?

    2. MYSQL last_insert_id()と並行性

    3. SQLServerで一重引用符をエスケープする

    4. MySQLデータベースにApacheLuceneのインデックスを付け、同期を維持します