У меня есть эта таблица:
ALLITEMS
---------------
ItemId | Areas
---------------
1 | EAST
2 | EAST
3 | SOUTH
4 | WEST
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');
В MSSQL, чтобы получить курсор из динамического SQL, я могу сделать:
DECLARE @v_sqlStatement VARCHAR(2000);
SET @v_Sqlstatement = 'SELECT * FROM ALLITEMS';
EXEC (@v_sqlStatement); --returns a resultset/cursor, just like calling SELECT
В Oracle мне нужно использовать блок 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
Но все, что я получаю, это «анонимный блок завершен».
Как мне заставить его вернуть курсор?
(Я знаю, что если я сделаю AUTOPRINT, он напечатает информацию в REFCURSOR (это не печатает в коде выше, но это другая проблема))
Я буду вызывать этот динамический SQL из кода (ODBC, C ++), и мне нужно, чтобы он возвращал курсор.
Как мне это сделать? Я в тупике.