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

Czy używanie select * dla kursora w PL/SQL jest uważane za złe programowanie?

Używając select * w twoim kodzie jest to, co nazwałbym programowaniem leniwym, z kilkoma nieprzyjemnymi skutkami ubocznymi. To, jak bardzo doświadczasz tych skutków ubocznych, będzie się różnić, ale nigdy nie jest pozytywne.

Wykorzystam niektóre z punktów już wspomnianych w innych odpowiedziach, ale możesz edytować moją odpowiedź i dodać więcej negatywnych punktów dotyczących używania select * .

  1. Wysyłasz więcej danych z silnika SQL do swojego kodu niż to konieczne, co ma negatywny wpływ na wydajność.

  2. Informacje, które otrzymujesz, muszą być umieszczone w zmiennych (na przykład zmiennej rekordu). Zajmie to więcej pamięci PGA niż to konieczne.

  3. Używając select * nigdy nie użyjesz samego indeksu do pobrania potrzebnych informacji, zawsze będziesz musiał również odwiedzić tabelę (pod warunkiem, że nie istnieje indeks, który zawiera wszystkie kolumny tabeli). Ponownie, z negatywnym wpływem na wydajność.

  4. Mniej jasne dla osób utrzymujących Twój kod, jakie są Twoje zamiary. Muszą zagłębić się w kod, aby wykryć wszystkie wystąpienia zmiennej rekordu, aby wiedzieć, co jest pobierane.

  5. Nie będziesz używać funkcji SQL do wykonywania obliczeń, ale zawsze polegaj na obliczeniach PL/SQL lub Java. Prawdopodobnie brakuje Ci wspaniałych ulepszeń SQL, takich jak funkcje analityczne, klauzula modelu, rekurencyjne faktoring podzapytań i tym podobne.

  6. Począwszy od Oracle11, zależności są śledzone na poziomie kolumny, co oznacza, że ​​gdy używasz select * , Twój kod jest oznaczany w słowniku danych jako „zależny od wszystkich kolumn” tej tabeli. Twoja procedura zostanie unieważniona, gdy coś stanie się z jedną z tych kolumn. Tak więc użycie select * oznacza, że ​​Twój kod będzie unieważniany częściej niż to konieczne.

Ponownie możesz dodawać własne punkty.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ustawianie limitu czasu sieci dla połączenia JDBC

  2. ORA-04084:nie można zmienić NOWYCH wartości dla tego typu wyzwalacza

  3. SQL ROWNUM jak zwrócić wiersze między określonym zakresem

  4. Połączenie WildFly jdbc z Oracle

  5. Oracle SQL tworzący różne poziomy danych z jednej tabeli