2015-12-22 39 views
9

tanto in tanto incontro esempi in cui SELECT...INTO...FROM DUAL viene utilizzato per chiamare una funzione - ad esempio:Usando `select` per chiamare una funzione

SELECT some_function INTO a_variable FROM DUAL; 

è usato, al posto di

a_variable := some_function; 

mio prendere su questo è che non è una buona pratica perché A) rende poco chiaro che una funzione viene invocata, e B) è inefficiente in quanto costringe una transizione dal motore PL/SQL al motore SQL (forse meno di un problema oggi).

Qualcuno può spiegare perché questo potrebbe essere stato fatto, ad es. era necessario all'inizio della codifica PL/SQL per poter richiamare una funzione? Il codice che sto guardando potrebbe risalire a Oracle 8.

Eventuali approfondimenti apprezzati.

+1

Penso che versioni molto vecchie di Oracle (come Oracle 8 e 9), in realtà non supportano l'assegnazione con una funzione. –

+0

Per quanto mi ricordo, la seconda sintassi è disponibile da 10g. Sei sicuro che sia eseguibile su 8i? –

+0

@a_horse_with_no_name - So che 9i supporta l'assegnazione diretta dalle funzioni (ad esempio 'a_variable: = some_function;'). Ma 8i potrebbe non avere - Non ho mai dovuto lavorare con esso. Grazie! –

risposta

3

Questa pratica risale al prima di PLSQL e Oracle 7. Come già detto l'assegnazione era possibile (e ovviamente Best Practice) in Oracle7.

Prima di Oracle 7 C'erano due strumenti ampiamente usati che necessario l'uso di Select ... in var da doppio;

Da un lato c'era un Oracle Tool chiamato RPT, una sorta di generatore di report. RPT potrebbe essere utilizzato per creare processi batch. Aveva due tipi di macro, che potevano essere combinati per ottenere quello che usiamo PLSQL per oggi. Il mio primo lavoro Oracle ha comportato il debug di PLSQL che è stato generato da un programma che ha preso i batch RPT e li ha convertiti automaticamente in PLSQL. Ho buttato via il mio unico manuale RPT poco dopo il 2000.

D'altra parte c'era Oracle Forms 2.xe il suo componente Menu. Il cambio di contesto nel menu Oracle veniva spesso eseguito con un Seleziona ... da doppio; Ricordo ancora quanto ero orgoglioso quando ho scoperto che un bug non rintracciabile era causato da un totale di record nella tabella Dual.

Mi dispiace dire che non posso provare nulla di tutto questo, ma è il momento dell'anno per ripensare ai vecchi tempi e davvero divertente avere la risposta.

+0

Grazie per le informazioni! A proposito, mi piace la tua foto avatar. Vivo vicino a Hinckley, nell'Ohio, dove gli avvoltoi (localmente chiamati "poiane") sono un'icona locale (navigano le correnti d'aria che salgono da Hinckley Ridge - che scorre proprio di fronte a me) quindi vedo questi animali molto durante l'estate, ecco perché ho potuto identificare l'uccello dalla foto. Cerco solo di continuare a muovermi e spero che non diventino impazienti :-). Inoltre, mia figlia si offre volontaria presso un'organizzazione locale per il soccorso degli uccelli che cura alcune poiane ferite (anche se la loro aquila calva è più impressionante :-). Comunque, grazie per la risposta. –

+0

Inoltre, grazie per aver sottolineato che alcune delle mie abitudini di codifica dei miei colleghi sono ancora più atrofizzate delle mie! ;-) –