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

Dlaczego statyczne ddl nie jest dozwolone w PL/SQL?

Odpowiedź brzmi:PL/SQL nie obsługuje dynamicznego polimorfizmu. obsługuje tylko statyczny polimorfizm, ponieważ

Wszystkie PL/SQL generują "DIANA" -> Opisowa notacja z atrybutami pośrednimi dla Ada , pośredniego języka o strukturze drzewa. DIANA jest używana wewnętrznie przez kompilatory.

W czasie kompilacji kod źródłowy PL/SQL jest tłumaczony na kod systemowy i generuje odpowiednią DIANA. Teraz pomyśl, że gdyby istniała instrukcja DDL, taka jak instrukcja tworzenia tabeli, która w czasie kompilacji nie istnieje, zostanie utworzona po uruchomieniu programu. jak wtedy twój silnik PL/SQL wygeneruje DIANA???

DIANA odgrywa ważną rolę w PL/SQL do sprawdzania/walidowania tego podprogramu. jest to wymagane, ponieważ wiemy, że podprogram może korzystać z obiektów bazy danych, takich jak tabele, widoki, synonimy lub inne przechowywane procedury. możliwe, że obiekty mogły zostać zmienione/usunięte/upuszczone przy następnym uruchomieniu programu. Na przykład:ktoś mógł upuścić tabelę, przechowywany proces lub sygnatura funkcji mogła ulec zmianie.

Dlatego generalnie PL/SQL jest używany do manipulowania danymi w strukturze bazy danych, ale nie do manipulowania tymi strukturami.

ale istnieją sposoby na manipulowanie przy użyciu dynamicznego SQL i pakietu DBMS_SQL, ale te metody znów powinny być używane ostrożnie. Na przykład, jeśli tworzysz tabelę, powinieneś najpierw sprawdzić, czy ta tabela już istnieje, czy nie używasz widoków słownika danych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lista elementów formatu liczb w Oracle

  2. SQLcl do przesyłania danych z Oracle do PostgreSQL lub YugabyteDB 🅾🐘🚀

  3. Funkcja CAST() w Oracle

  4. Czy możliwe jest zapytanie kolumny oddzielonej przecinkami dla określonej wartości?

  5. ORA-01017 Nieprawidłowa nazwa użytkownika/hasło podczas łączenia się z bazą danych 11g z klienta 9i