Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Błąd podczas wywoływania dowolnej funkcji w zapytaniu SQL w pakiecie bez deklaracji funkcji w specyfikacji pakietu

W ogóle nie ma nic wspólnego z deklaracją przekazania.

Dotyczy to faktu, że używasz zapytania SQL do wywołania funkcji . Wygląda na to, że kiedy używasz instrukcji do wywołania funkcji, nie jesteś już w zakresie pakietu PL/SQL, więc możesz wywoływać tylko publicznie dostępne funkcje.

Dlaczego , mogę się tylko domyślać, więc nie bierz tego za pewnik, ale PL/SQL i SQL mają różne silniki . Tak więc, wykonując zapytanie sql, nawet w swoim pakiecie pl/sql, przechodzisz na poziom SQL, gdzie ponownie sprawdza uprawnienia zgodnie z silnikiem SQL. Więc nie ma pojęcia, że ​​jest wykonywany z pakietu PL/SQL i powinieneś mieć możliwość wywołania funkcji prywatnej.

Myślę, że różnicę silników można łatwo sprawdzić, spróbuj użyć varchar2 32000, będzie działać w ramach twojej funkcji pl/sql. Teraz, jeśli wywołasz swoją funkcję pl/sql zwracającą varchar2(32000) , to się nie powiedzie. To jest problem, na który natknąłem się, ale nie mam żadnej bazy danych, aby dać ci fragment.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. używanie foreach do wstawiania wsadu w mybatis

  2. Wykryj, czy wartość zawiera co najmniej jedną cyfrę w Oracle

  3. Ignoruj ​​przecinki między cytatami podczas odczytywania procedury składowanej CSV Oracle UTL_FILE

  4. Oracle SQL :znaczniki czasu w klauzuli gdzie

  5. Jak uzyskać dostęp do tabel systemowych Oracle z wnętrza funkcji lub procedury PL/SQL?