PL/SQL – Lendo um cursor usando Dynamic SQL
Olá pessoal !
Atendendo a pedidos, abaixo um pequeno exemplo de como ler um cursor usando Dynamic SQL. O código é bem simples:
CREATE TABLE teste
(
codigo NUMBER
,descricao VARCHAR2(2000)
)
/
INSERT INTO teste VALUES (1, 'TESTE 1')
/
INSERT INTO teste VALUES (2, 'TESTE 2')
/
DECLARE
stmtString VARCHAR2(2000);
TYPE SQLType IS REF CURSOR;
testCursor SQLType;
recTeste teste%ROWTYPE;
BEGIN
-- String com o SQL
stmtString := 'SELECT * FROM teste WHERE codigo = :codigo';
-- Abrir o cursor usando o bind
OPEN testCursor FOR stmtString USING 1;
-- Fetch dos dados do cursor
LOOP
FETCH testCursor INTO recTeste;
EXIT WHEN testCursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('Descricao: ' || recTeste.descricao);
END LOOP;
-- Fechando cursor
CLOSE testCursor;
EXCEPTION
WHEN OTHERS THEN
-- Feche sempre seu cursor 🙂
IF testCursor%ISOPEN
THEN
DBMS_OUTPUT.PUT_LINE('Cursor Aberto !');
ELSE
DBMS_OUTPUT.PUT_LINE('Cursor Fechado !');
END IF;
END;
/
Creio que é auto-explicativo ! 🙂
Você pode utilizar outras abordagens para ter o mesmo efeito. Use sua imaginação e crie outras variações.
Um grande abraço