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

ORA-06508:PL / SQL:không thể tìm thấy đơn vị chương trình đang được gọi

Tôi nghi ngờ rằng bạn chỉ báo cáo lỗi cuối cùng trong một ngăn xếp như thế này:

ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "schema.package" has been invalidated
ORA-04065: not executed, altered or dropped package body "schema.package"
ORA-06508: PL/SQL: could not find program unit being called: "schema.package"

Nếu vậy, đó là vì gói của bạn ở trạng thái:

Giá trị của các biến, hằng số và con trỏ mà packagedecl so sánh (trong đặc tả hoặc nội dung của nó) bao gồm packagestate của nó . Nếu một gói PL / SQL khai báo ít nhất một biến, hằng số hoặc con trỏ, thì gói đó là trạng thái ; nếu không, nó là không trạng thái .

Khi bạn biên dịch lại trạng thái bị mất:

Nếu phần thân của một gói được khởi tạo, có trạng thái được biên dịch lại (rõ ràng, với "Câu lệnh GÓI ALTER", hoặc ngầm hiểu), việc gọi tiếp theo chương trình con trong gói sẽ khiến Oracle Databaseto loại bỏ trạng thái gói hiện có và tăng ngoại lệORA-04068.

Sau khi PL / SQL tăng ngoại lệ, một tham chiếu đến gói khiến Cơ sở dữ liệu thần kỳ khởi tạo lại gói, gói này sẽ khởi tạo lại ...

Bạn không thể tránh điều này nếu gói của bạn có trạng thái. Tôi nghĩ rằng khá hiếm khi thực sự cần một gói để có trạng thái, vì vậy bạn nên xem lại bất kỳ thứ gì bạn đã khai báo trong gói, nhưng bên ngoài một hàm hoặc thủ tục, để xem liệu nó có thực sự cần thiết ở mức đó hay không. Vì bạn đang ở mức 10g, nên điều đó bao gồm các hằng số, không chỉ các biến và con trỏ.

Nhưng đoạn cuối cùng của tài liệu được trích dẫn có nghĩa là lần tiếp theo bạn tham chiếu gói trong cùng một phiên, bạn sẽ không gặp lỗi và nó sẽ hoạt động như bình thường (cho đến khi bạn biên dịch lại).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL:Cột không được phép

  2. Oracle RAC N + 1 Dự phòng

  3. Cách gọi thủ tục có tham số ra làm kiểu bảng từ một lớp Java

  4. Tùy chọn phân phối trong khi gửi yêu cầu đồng thời trong R12.1.3

  5. SQLDeveloper có hỗ trợ thực thi các tập lệnh không?