Tôi có một tập lệnh sử dụng gói (PKG_MY_PACKAGE). Tôi sẽ thay đổi một số trường trong truy vấn trong gói đó và sau đó biên dịch lại nó (tôi không thay đổi hoặc biên dịch bất kỳ gói nào khác). Tôi chạy tập lệnh và gặp lỗi giống nhưGói PL/SQL không hợp lệ
ORA-04068: existing state of packages has been discarded ORA-04061: existing state of package body "USER3.PKG_MY_PACKAGE" has been invalidated ORA-04065: not executed, altered or dropped package body "USER3.PKG_MY_PACKAGE" ORA-06508: PL/SQL: could not find program unit being called: "USER3.PKG_MY_PACKAGE" ORA-06512: at line 34
Tôi chạy lại tập lệnh (không thay đổi bất kỳ thứ gì khác trong hệ thống) và tập lệnh thực thi thành công.
Tôi nghĩ rằng khi tôi biên dịch trước khi tôi thực thi tập lệnh có thể sửa bất kỳ tham chiếu không hợp lệ nào. Đây là bản tái sản xuất 100% và tôi càng sử dụng tập lệnh này càng khó chịu. Điều gì có thể gây ra điều này và điều gì sẽ khắc phục nó?
(oracle 10g, sử dụng PL/SQL Developer 7)
@OMG: Tôi chỉ biên dịch lại phần thân vì đó là tất cả những thay đổi. – FrustratedWithFormsDesigner
Không có lý do gì để bạn sử dụng các biến toàn cục cho việc này - chỉ cần chuyển sang sys_context. Bằng cách này, bạn có thể loại bỏ hoàn toàn các biến toàn cục và làm cho gói của bạn không có trạng thái. –