sql >> Databáze >  >> RDS >> Oracle

Jak použít konstantu balíčku v příkazu SQL SELECT?

Nemůžete.

Aby se veřejná proměnná balíčku použila v příkazu SQL, musíte napsat funkci wrapper, aby byla hodnota vystavena vnějšímu světu:

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

Vytvořte funkci obálky:

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.

A teď to funguje:

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. Funkce Postgres Hodnota NULL pro řádek, který odkazuje na NEW

  2. Jak chránit databáze MySQL před ransomwarovými kampaněmi

  3. Jak provést SQL dotaz bez zobrazení výsledků

  4. Jak se vyhnout vkládání duplicitních záznamů do dotazu SQL INSERT (5 snadných způsobů)