Cuando se trata de bases de datos, un cursor es una estructura de control. Un cursor proporciona un mecanismo para asignar un nombre a una declaración de selección de SQL. Los cursores implícitos se crean y utilizan automáticamente cada vez que se emite una instrucción Select en PL/SQL, cuando no hay un cursor definido explícitamente. Los cursores explícitos, como sugiere su nombre, están definidos explícitamente por el desarrollador. En PL/SQL, un cursor explícito es en realidad una consulta con nombre definida usando el cursor de la palabra clave.
Oracle crea y utiliza automáticamente los cursores implícitos cada vez que se emite una declaración de selección. Si se usa un cursor implícito, el Sistema de administración de bases de datos (DBMS) realizará las operaciones de abrir, buscar y cerrar automáticamente. Los cursores implícitos se deben usar solo con sentencias de SQL que devuelven una sola fila. Si la instrucción SQL devuelve más de una fila, el uso de un cursor implícito introducirá un error.
Los cursores explícitos son consultas definidas usando un nombre. Un cursor explícito se puede considerar como un puntero a un conjunto de registros y el puntero se puede mover hacia adelante dentro del conjunto de registros. Los cursores explícitos proporcionan al usuario el control completo sobre la apertura, el cierre y la obtención de datos. Además, se pueden recuperar varias filas usando un cursor explícito. Los cursores explícitos también pueden tomar parámetros como cualquier función o procedimiento para que las variables en el cursor puedan cambiarse cada vez que se ejecutan.
La principal diferencia entre el cursor implícito y el cursor explícito es que un cursor explícito debe definirse explícitamente al proporcionar un nombre, mientras que los cursores implícitos se crean automáticamente cuando se emite una instrucción de selección. Además, se pueden recuperar múltiples filas utilizando cursores explícitos, mientras que los cursores implícitos solo pueden recuperar una única fila. Las excepciones NO_DATA_FOUND y TOO_MANY_ROWS no se generan cuando se usan cursores explícitos, a diferencia de los cursores implícitos. En esencia, los cursores implícitos son más vulnerables a los errores de datos y proporcionan menos control que los cursores explícitos. Además, los cursores implícitos se consideran menos eficientes que los cursores explícitos.