Domanda

Sono abbastanza nuovo nella lingua e mi chiedevo se le chiamate di coda fossero ottimizzate. In un'altra lingua ho potuto esaminare il codice macchina o una rappresentazione intermedia e immaginarlo da solo, ma non ho idea di come farlo in PL / SQL.

Grazie in anticipo.

È stato utile?

Soluzione

I documenti online suggeriscono di non:

http: // download -east.oracle.com/docs/cd/B19306_01/appdev.102/b14261/subprograms.htm#i2884

  

Ogni chiamata ricorsiva crea una nuova   istanza di tutti gli articoli dichiarati in   sottoprogramma, compresi i parametri,   variabili, cursori ed eccezioni.   Allo stesso modo, nuove istanze di SQL   le dichiarazioni vengono create ad ogni livello   nella discesa ricorsiva.

E

  

Almeno un percorso deve portare a a   condizione di terminazione. Altrimenti, il   la ricorsione andrebbe avanti fino a PL / SQL   esaurisce la memoria e solleva il file   eccezione predefinita STORAGE_ERROR.

Se l'ottimizzazione delle chiamate di coda fosse disponibile, non esaurirebbe l'archiviazione (anche se potrebbe lasciare un po 'di timeout se lo lasci funzionare troppo a lungo.)

Potresti essere in grado di vedere sperimentalmente cosa fa: scrivere una funzione ricorsiva che termina con una chiamata in coda a se stessa e osservare l'utilizzo della memoria del processo Oracle quando lo chiami o vedere quale messaggio di errore ricevi. Verifica se riesci a bloccarlo indefinitamente senza aumentare la memoria.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top