Tidak ada hubungannya sama sekali dengan deklarasi maju.
Ini berkaitan dengan fakta bahwa Anda menggunakan kueri SQL untuk memanggil fungsi . Sepertinya saat menggunakan pernyataan untuk memanggil suatu fungsi, Anda tidak lagi berada di dalam cakupan paket PL/SQL, sehingga Anda hanya dapat memanggil fungsi yang tersedia untuk umum.
Mengenai alasannya , saya hanya bisa menebak, jadi jangan anggap remeh, tapi PL/SQL dan SQL memiliki mesin yang berbeda . Jadi, ketika melakukan kueri sql, bahkan di dalam paket pl/sql Anda, Anda pergi ke tingkat SQL di mana ia akan memeriksa lagi izin sesuai dengan mesin SQL. Jadi ia tidak tahu itu dijalankan dari dalam paket PL/SQL dan Anda harus diizinkan untuk memanggil fungsi privat.
Saya pikir perbedaan mesin dapat diperiksa dengan mudah, coba gunakan varchar2 dari 32000, itu akan berfungsi dalam fungsi pl/sql Anda. Sekarang, jika Anda memanggil fungsi pl/sql Anda mengembalikan varchar2(32000)
, itu akan gagal. Ini adalah masalah yang saya alami, tetapi saya tidak memiliki database untuk memberikan cuplikannya kepada Anda.