Ho questa tabella:Come restituire un set di risultati/cursore da un blocco anonimo Oracle PL/SQL che esegue Dynamic SQL?
ALLITEMS
---------------
ItemId | Areas
---------------
1 | EAST
2 | EAST
3 | SOUTH
4 | WEST
Il 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');
In MSSQL, per ottenere un cursore da uno SQL dinamico che posso fare:
DECLARE @v_sqlStatement VARCHAR(2000);
SET @v_Sqlstatement = 'SELECT * FROM ALLITEMS';
EXEC (@v_sqlStatement); --returns a resultset/cursor, just like calling SELECT
In Oracle, ho è necessario utilizzare un blocco 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
Ma tutto ciò che ottengo è "blocco anonimo completato".
Come ottengo per restituire il cursore?
(so che se faccio AUTOPRINT, si stamperà le informazioni nella refcursor (non è la stampa nel codice di cui sopra, ma questo è un altro problema))
sarò chiamata a questo SQL dinamico dal codice (ODBC, C++) e mi serve per restituire un cursore.
Come faccio a fare questo? Sono perplesso.
Grazie! Ci proverò. – Liao
@Peter Lang: Come chiamereste la funzione in questo caso? – MissPiplup
@MissPiplup: ho corretto il collegamento interrotto, ti aiuta? –