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

L'uso di select * per un cursore in PL/SQL è considerato una cattiva programmazione?

Usando select * nel tuo codice c'è quella che chiamerei programmazione pigra, con diversi effetti collaterali spiacevoli. Quanto sperimenterai questi effetti collaterali, sarà diverso, ma non è mai positivo.

Userò alcuni dei punti già menzionati in altre risposte, ma sentiti libero di modificare la mia risposta e aggiungere altri punti negativi sull'utilizzo di select * .

  1. Stai inviando più dati dal motore SQL al tuo codice del necessario, il che ha un effetto negativo sulle prestazioni.

  2. Le informazioni che ottieni devono essere inserite in variabili (ad esempio una variabile record). Ciò richiederà più memoria PGA del necessario.

  3. Usando select * non utilizzerai mai un indice da solo per recuperare le informazioni desiderate, dovrai sempre visitare anche la tabella (a condizione che non esista un indice che contenga tutte le colonne della tabella). Ancora una volta, con un effetto negativo sulla performance.

  4. Meno chiaro per le persone che mantengono il tuo codice qual è la tua intenzione. Devono approfondire il codice per individuare tutte le occorrenze della variabile del record per sapere cosa viene recuperato.

  5. Non utilizzerai le funzioni SQL per eseguire calcoli, ma farai sempre affidamento su calcoli PL/SQL o Java. Probabilmente ti stai perdendo alcuni grandi miglioramenti SQL come le funzioni analitiche, la clausola del modello, il factoring ricorsivo delle sottoquery e simili.

  6. Da Oracle11 in poi, le dipendenze vengono tracciate a livello di colonna, il che significa che quando usi select * , il tuo codice viene contrassegnato nel dizionario dei dati come "dipendente da tutte le colonne" di quella tabella. La tua procedura verrà invalidata quando succede qualcosa a una di quelle colonne. Pertanto, l'utilizzo di select * significa che il tuo codice verrà invalidato più spesso del necessario.

Ancora una volta, sentiti libero di aggiungere i tuoi punti.