Como retornar um conjunto de resultados / cursor de um bloco anônimo Oracle PL / SQL que executa o SQL dinâmico?
Eu tenho esta tabela:
ALLITEMS
---------------
ItemId | Areas
---------------
1 | EAST
2 | EAST
3 | SOUTH
4 | WEST
O DDL:
drop table allitems;
Create Table Allitems(ItemId Int,areas Varchar2(20));
Insert Into Allitems(Itemid,Areas) Values(1,'east');
Insert Into Allitems(ItemId,areas) Values(2,'east');
insert into allitems(ItemId,areas) values(3,'south');
insert into allitems(ItemId,areas) values(4,'east');
No MSSQL, para obter um cursor de um SQL dinâmico, eu posso fazer:
DECLARE @v_sqlStatement VARCHAR(2000);
SET @v_Sqlstatement = 'SELECT * FROM ALLITEMS';
EXEC (@v_sqlStatement); --returns a resultset/cursor, just like calling SELECT
No Oracle, preciso usar um bloco PL / SQL:
SET AUTOPRINT ON;
DECLARE
V_Sqlstatement Varchar2(2000);
outputData SYS_REFCURSOR;
BEGIN
V_Sqlstatement := 'SELECT * FROM ALLITEMS';
OPEN outputData for v_Sqlstatement;
End;
--result is : anonymous block completed
Mas tudo o que recebo é "bloco anônimo concluído".
Como faço para retornar o cursor?
(Eu sei que se eu fizer a AUTOPRINT, ela imprimirá as informações no REFCURSOR (não está imprimindo no código acima, mas isso é outro problema))
Vou chamar esse SQL dinâmico a partir do código (ODBC, C ++) e preciso que ele retorne um cursor.
Como eu faço isso? Estou perplexo.