Cursore esplicito vs cursore implicito
Quando si tratta di database, un cursore è una struttura di controllo che consente di attraversare i record in un database. Un cursore fornisce un meccanismo per assegnare un nome a un'istruzione di selezione SQL e quindi può essere utilizzato per manipolare le informazioni all'interno di tale istruzione SQL. I cursori impliciti vengono creati e utilizzati automaticamente ogni volta che viene emessa un'istruzione Select in PL / SQL, quando non è presente un cursore definito in modo esplicito. I cursori espliciti, come suggerisce il nome, sono definiti esplicitamente dallo sviluppatore. In PL / SQL un cursore esplicito è in realtà una query con nome definita utilizzando la parola chiave cursore.
Cos'è il cursore implicito?
I cursori impliciti vengono creati e utilizzati automaticamente da Oracle ogni volta che viene emessa un'istruzione select. Se viene utilizzato un cursore implicito, il Database Management System (DBMS) eseguirà automaticamente le operazioni di apertura, recupero e chiusura. I cursori impliciti devono essere utilizzati solo con istruzioni SQL che restituiscono una singola riga. Se l'istruzione SQL restituisce più di una riga, l'utilizzo di un cursore implicito introdurrà un errore. Un cursore implicito viene automaticamente associato a ciascuna istruzione DML (Data Manipulation Language), ovvero le istruzioni INSERT, UPDATE e DELETE. Inoltre, un cursore implicito viene utilizzato per elaborare le istruzioni SELECT INTO. Quando si recuperano i dati utilizzando i cursori impliciti, è possibile sollevare l'eccezione NO_DATA_FOUND quando l'istruzione SQL non restituisce dati. Inoltre,i cursori impliciti possono sollevare eccezioni TOO_MANY_ROWS quando l'istruzione SQL restituisce più di una riga.
Cos'è il cursore esplicito?
Come accennato in precedenza, i cursori espliciti sono query definite utilizzando un nome. Un cursore esplicito può essere considerato come un puntatore a un insieme di record e il puntatore può essere spostato in avanti all'interno dell'insieme di record. I cursori espliciti forniscono all'utente il controllo completo sull'apertura, chiusura e recupero dei dati. Inoltre, più righe possono essere recuperate utilizzando un cursore esplicito. I cursori espliciti possono anche accettare parametri proprio come qualsiasi funzione o procedura in modo che le variabili nel cursore possano essere modificate ogni volta che viene eseguito. Inoltre, i cursori espliciti consentono di recuperare un'intera riga in una variabile record PL / SQL. Quando si utilizza un cursore esplicito, prima deve essere dichiarato utilizzando un nome. È possibile accedere agli attributi del cursore utilizzando il nome assegnato al cursore. Dopo la dichiarazione, il cursore deve essere aperto prima. Quindi è possibile avviare il recupero. Se è necessario recuperare più righe, l'operazione di recupero deve essere eseguita all'interno di un ciclo. Infine, il cursore deve essere chiuso.
Differenza tra cursore esplicito e cursore implicito
La differenza principale tra il cursore implicito e il cursore esplicito è che un cursore esplicito deve essere definito esplicitamente fornendo un nome mentre i cursori impliciti vengono creati automaticamente quando si emette un'istruzione select. Inoltre, più righe possono essere recuperate utilizzando cursori espliciti mentre i cursori impliciti possono recuperare solo una singola riga. Anche le eccezioni NO_DATA_FOUND e TOO_MANY_ROWS non vengono sollevate quando si utilizzano cursori espliciti, al contrario dei cursori impliciti. In sostanza, i cursori impliciti sono più vulnerabili agli errori dei dati e forniscono meno controllo programmatico rispetto ai cursori espliciti. Inoltre, i cursori impliciti sono considerati meno efficienti dei cursori espliciti.