📤 Compartilhe este artigo com o link curto:
In traditional PL/SQL development, static cursors are rigidly defined at compile time. This means that the query executed by the cursor is fixedly tied to the source code of the block. However, in real‑world enterprise scenarios, we often encounter the need to build flexible routines, where the SQL command, the tables queried, or the selection filters must be assembled dynamically based on parameters provided at runtime.
To meet this demand with maximum performance and security, Oracle provides the concept of REF CURSOR (Cursor Variables).
A REF CURSOR is a pointer to a query context stored in the database server memory. Unlike a conventional cursor, a cursor variable does not store the data itself, but rather the logical address of a result set generated dynamically.
There are two main types of REF CURSOR in PL/SQL:
CREATE OR REPLACE PROCEDURE consultar_clientes_dinamico ( p_tipo_status IN VARCHAR2, p_cursor OUT SYS_REFCURSOR ) IS BEGIN IF p_tipo_status = 'VIP' THEN OPEN p_cursor FOR SELECT client_id, full_name, credit_limit FROM clients WHERE status = 'ACTIVE' AND credit_limit >= 10000; ELSIF p_tipo_status = 'PADRAO' THEN OPEN p_cursor FOR SELECT client_id, full_name, credit_limit FROM clients WHERE status = 'ACTIVE' AND credit_limit < 10000; ELSE OPEN p_cursor FOR SELECT client_id, full_name, credit_limit FROM clients WHERE status = 'INACTIVE'; END IF; END consultar_clientes_dinamico;
One of the greatest operational advantages of REF CURSOR is its native ability to act as an efficient communication bridge between the Oracle database and client applications developed in external languages like Java (JDBC), C# (.NET), or Python.
Instead of requiring the client application to send complex SQL queries directly to the database (which increases security risks like SQL Injection and generates excessive network traffic), the application calls a single PL/SQL procedure passing clean parameters, and receives back a REF CURSOR ready to be consumed and rendered on the end‑user screen.
Mastering the use of cursor variables (REF CURSOR) drastically expands the modeling power of your PL/SQL packages, allowing you to create decoupled, dynamic architectures that are highly integrated with modern client systems.