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

ORA-04061:istniejący stan treści pakietu PACKAGE.NAME został unieważniony utrzymuje się

Oracle robi to, ponieważ rekompilacja pakietu PL/SQL unieważnia wszelkie używane zmienne sesji.

Niewiele możemy zrobić, aby tego uniknąć, z wyjątkiem stosowania dobrych praktyk wdrażania. Nie wprowadzaj zmian, gdy baza danych jest w użyciu, upewnij się, że wszystkie połączenia są prawidłowo odłączone itp. Łatwiej powiedzieć niż zrobić w dobie CI/CD, zerowych przestojów i innych ekscytujących innowacji.

Z tyłu szafki jest więc jedna rzecz:pragma serially_reusable; . Ta instrukcja oznacza, że ​​stan pakietu jest utrzymywany przez czas pojedynczego wywołania serwera . Na przykład, jeśli mamy blok PL/SQL, który wywołuje procedurę SR trzy razy, każda zmienna zmieniona przez tę procedurę będzie utrzymywać wartość w trzech wywołaniach. Ale następnym razem, gdy uruchomimy blok - w tej samej sesji - zmienne zostaną zresetowane do swoich wartości początkowych.

Istnieje kilka ograniczeń dotyczących wielokrotnego użytku szeregowego PL/SQL — na przykład nie można go używać w zapytaniach SQL. Ale wielką atrakcją z twojej perspektywy nie jest już więcej błędów ORA-04068 lub ORA-04061. Brak stanu sesji, nic do unieważnienia.

pragma serially_reusable muszą być zadeklarowane na poziomie pakietu, w treści i specyfikacji. Musisz więc mieć pewność, że żadna z pakietów procedur nie musi utrzymywać stanu między wywołaniami serwera.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SPRAWDŹ ograniczenie daty urodzenia?

  2. Wyrażenie regularne SQL do dzielenia kolumny (ciągu) na wiele wierszy na podstawie separatora '/n'

  3. Otwórz modalne okno dialogowe za pomocą JavaScript Oracle APEX

  4. Przebieg logowania w R12.2 i podstawowe rozwiązywanie problemów

  5. Oracle sql - łączenie z parametrem wejściowym