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

SQL SELECTステートメントでパッケージ定数を使用するにはどうすればよいですか?

    できません。

    SQLステートメントで使用されるパブリックパッケージ変数の場合、値を外部に公開するラッパー関数を作成する必要があります。

    SQL> create package my_constants_pkg
      2  as
      3    max_number constant number(2) := 42;
      4  end my_constants_pkg;
      5  /
    
    Package created.
    
    SQL> with t as
      2  ( select 10 x from dual union all
      3    select 50 from dual
      4  )
      5  select x
      6    from t
      7   where x < my_constants_pkg.max_number
      8  /
     where x < my_constants_pkg.max_number
               *
    ERROR at line 7:
    ORA-06553: PLS-221: 'MAX_NUMBER' is not a procedure or is undefined
    

    ラッパー関数を作成します:

    SQL> create or replace package my_constants_pkg
      2  as
      3    function max_number return number;
      4  end my_constants_pkg;
      5  /
    
    Package created.
    
    SQL> create package body my_constants_pkg
      2  as
      3    cn_max_number constant number(2) := 42
      4    ;
      5    function max_number return number
      6    is
      7    begin
      8      return cn_max_number;
      9    end max_number
     10    ;
     11  end my_constants_pkg;
     12  /
    
    Package body created.
    

    そして今、それは機能します:

    SQL> with t as
      2  ( select 10 x from dual union all
      3    select 50 from dual
      4  )
      5  select x
      6    from t
      7   where x < my_constants_pkg.max_number()
      8  /
    
             X
    ----------
            10
    
    1 row selected.
    


    1. SQL Server ROUND()関数:その目的と、なぜ気にする必要があるのですか?

    2. OracleDatabaseでのPL/SQL一括収集の概要

    3. あるSQLServerから別のSQLServerにテーブルデータをエクスポートする

    4. グループ化された連結:重複の順序付けと削除