sql >> Database teknologi >  >> RDS >> Oracle

Anses det for dårlig programmering at bruge select * for en markør i PL/SQL?

Brug select * i din kode er, hvad jeg vil kalde doven programmering, med flere grimme bivirkninger. Hvor meget du oplever disse bivirkninger, vil variere, men det er aldrig positivt.

Jeg vil bruge nogle af de punkter, der allerede er nævnt i andre svar, men du er velkommen til at redigere mit svar og tilføje nogle flere negative punkter om brugen af ​​select * .

  1. Du sender flere data fra SQL-motoren til din kode end nødvendigt, hvilket har en negativ effekt på ydeevnen.

  2. De oplysninger, du får tilbage, skal placeres i variabler (f.eks. en rekordvariabel). Dette vil tage mere PGA-hukommelse end nødvendigt.

  3. Ved at bruge select * du vil aldrig bruge et indeks alene til at hente de ønskede oplysninger, du skal også altid besøge tabellen (forudsat at der ikke findes et indeks, som indeholder alle kolonner i tabellen). Igen med en negativ effekt på ydeevnen.

  4. Mindre klart for folk, der vedligeholder din kode, hvad din hensigt er. De skal dykke ned i koden for at få øje på alle forekomster af din registreringsvariabel for at vide, hvad der bliver hentet.

  5. Du vil ikke bruge SQL-funktioner til at udføre beregninger, men altid stole på PL/SQL- eller Java-beregninger. Du går muligvis glip af nogle fantastiske SQL-forbedringer som analytiske funktioner, modelklausul, rekursiv subquery factoring og lignende.

  6. Fra Oracle11 og fremefter spores afhængigheder på kolonneniveau, hvilket betyder, at når du bruger select * , din kode bliver markeret i dataordbogen som "afhængig af alle kolonner" i den tabel. Din procedure vil blive ugyldig, når der sker noget med en af ​​disse kolonner. Så brug af select * betyder, at din kode bliver ugyldiggjort oftere end nødvendigt.

Igen, du er velkommen til at tilføje dine egne point.



  1. antal rækker, der forekommer for hver dato i kolonnens datointerval

  2. Java/Mysql..SQLEundtagelse:En tabel skal have mindst 1 kolonne SQLState:42000 VendorError:1113

  3. mysql ERKLÆRER MENS uden for lagret procedure hvordan?

  4. Kontroller, om en IP-adresse er gemt i databasen