S dopřednou deklarací nemá vůbec nic společného.
To se zabývá tím, že k volání funkce používáte SQL dotaz . Zdá se, že při použití příkazu k vyvolání funkce již nejste v rozsahu balíčku PL/SQL, takže můžete volat pouze veřejně dostupné funkce.
Pokud jde o důvod , mohu jen hádat, takže to neberte jako samozřejmost, ale PL/SQL a SQL mají různé motory . Takže když děláte SQL dotaz, dokonce i uvnitř vašeho pl/sql balíčku, přejdete na úroveň SQL, kde znovu zkontroluje oprávnění podle SQL motoru. Nemá tedy ponětí, že se spouští z balíku PL/SQL a měli byste mít možnost volat privátní funkci.
Myslím, že rozdíl motorů lze snadno zkontrolovat, zkuste použít varchar2 32000, bude to fungovat v rámci funkce pl/sql. Nyní, když zavoláte svou funkci pl/sql, která vrátí varchar2(32000)
, selže. Toto je problém, na který jsem narazil, ale nemám žádnou databázi, kterou bych vám mohl poskytnout.