Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Gặp lỗi khi gọi bất kỳ hàm nào trong truy vấn SQL trong một gói mà không khai báo hàm trong đặc tả gói

Không liên quan gì đến khai báo chuyển tiếp.

Điều này đề cập đến thực tế là bạn đang sử dụng truy vấn SQL để gọi hàm . Có vẻ như khi sử dụng một câu lệnh để gọi một hàm, bạn không còn ở trong phạm vi của gói PL / SQL, do đó bạn chỉ có thể gọi các hàm có sẵn công khai.

Đối với lý do tại sao , Tôi chỉ có thể đoán, vì vậy đừng coi đó là điều hiển nhiên, nhưng PL / SQL và SQL có các công cụ khác nhau . Vì vậy, khi thực hiện một truy vấn sql, ngay cả bên trong gói pl / sql của bạn, bạn đi đến cấp độ SQL nơi nó sẽ kiểm tra lại các quyền theo công cụ SQL. Vì vậy, nó không có ý tưởng rằng nó được thực thi từ bên trong gói PL / SQL và bạn nên được phép gọi hàm private.

Tôi nghĩ rằng sự khác biệt của các động cơ có thể được kiểm tra dễ dàng, hãy thử sử dụng varchar2 là 32000, nó sẽ hoạt động trong hàm pl / sql của bạn. Bây giờ, nếu bạn gọi hàm pl / sql của mình trả về varchar2(32000) , nó sẽ thất bại. Thi là một vấn đề tôi gặp phải, nhưng tôi không có bất kỳ cơ sở dữ liệu nào để cung cấp cho bạn một đoạn mã.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xuất bảng kết xuất bằng cách sử dụng SQL DEVELOPER

  2. Nhận đầu ra từ dbms_output.get_lines bằng JDBC

  3. Bí danh người dùng Oracle DB

  4. Oracle TNS:tên dịch vụ net không được chỉ định chính xác

  5. PIVOT Oracle - chuyển đổi dữ liệu nhiều hàng thành một hàng với nhiều cột, không có dữ liệu tổng hợp