sql >> Database >  >> RDS >> Oracle

Wordt het gebruik van select * voor een cursor in PL/SQL beschouwd als slechte programmering?

Gebruik select * in je code is wat ik lui programmeren zou noemen, met verschillende vervelende bijwerkingen. Hoeveel je die bijwerkingen ervaart, zal verschillen, maar het is nooit positief.

Ik zal enkele van de punten gebruiken die al in andere antwoorden zijn genoemd, maar voel je vrij om mijn antwoord aan te passen en wat meer negatieve punten toe te voegen over het gebruik van select * .

  1. U verzendt meer gegevens van de SQL-engine naar uw code dan nodig is, wat een negatief effect heeft op de prestaties.

  2. De informatie die je terugkrijgt, moet je in variabelen plaatsen (bijvoorbeeld een recordvariabele). Dit kost meer PGA-geheugen dan nodig is.

  3. Door select * . te gebruiken je zult nooit alleen een index gebruiken om de gewenste informatie op te halen, je zult ook altijd de tabel moeten bezoeken (mits er geen index bestaat die alle kolommen van de tabel bevat). Nogmaals, met een negatief effect op de prestaties.

  4. Minder duidelijk voor mensen die je code onderhouden wat je bedoeling is. Ze moeten in de code duiken om alle exemplaren van uw recordvariabele te herkennen om te weten wat er wordt opgehaald.

  5. U gebruikt geen SQL-functies om berekeningen uit te voeren, maar vertrouw altijd op PL/SQL- of Java-berekeningen. Mogelijk loopt u een aantal geweldige SQL-verbeteringen mis, zoals analytische functies, modelclausule, recursieve subquery-factoring en dergelijke.

  6. Vanaf Oracle11 worden afhankelijkheden op kolomniveau bijgehouden, wat betekent dat wanneer u select * , wordt uw code in de datadictionary gemarkeerd als "afhankelijk van alle kolommen" van die tabel. Uw procedure wordt ongeldig als er iets gebeurt met een van die kolommen. Dus als u select * gebruikt, wordt uw code vaker ongeldig gemaakt dan nodig is.

Nogmaals, voel je vrij om je eigen punten toe te voegen.



  1. MySQL-update met een subquery in veilige updatemodus

  2. PLS-00386:type-mismatch gevonden tussen FETCH-cursor en INTO-variabelen

  3. php/mysql postcode nabijheid zoeken

  4. Perzische waarde invoegen in een tabel met php-code