【发布时间】:2016-04-29 22:07:36
【问题描述】:
我的目标是在一个过程中执行一个查询,然后将结果传递给另一个处理数据并打印一些 html 表的过程。
type utentiCursorType IS REF CURSOR; /*in a separate package*/
procedure GeneraRisultatiClienti(
IdSessione integer,
Nome varchar2,
Cognome varchar2,
Giorno varchar2,
Mese varchar2,
Anno varchar2,
Via varchar2,
Civico varchar2,
CapZip varchar2,
Citta varchar2,
Stato varchar2,
Telefono varchar2,
Mobile varchar2 default '',
Email varchar2,
Username varchar2
) is
clienti_cur utentiCursorType;
begin
open clienti_cur for
select u.id, u.nome, u.cognome, u.username
from Utenti u, Clienti c
where u.id = c.id_Utente
and (Nome is null or u.nome = Nome )
and (Cognome is null or u.cognome = Cognome)
and (DataDiNascita is null or u.data_di_nascita = DataDiNascita)
and (Via is null or u.via = Via)
and (Civico is null or u.civico = Civico)
and (CapZip is null or u.cap_zip = CapZip)
and (Citta is null or u.citta = Citta)
and (Stato is null or u.stato = Stato)
and (Telefono is null or u.telefono = Telefono)
and (Mobile is null or u.mobile = Mobile)
and (Email is null or u.email = Email)
and (Username is null or u.username = Username);
pkgruppo1.VisualizzaClienti(IdSessione, clienti_cur);
end GeneraRisultatiClienti;
procedure VisualizzaClienti(IdSessione integer, risultati in utentiCursorType) is
/*riga Risultati%ROWTYPE;*/
begin
modGUI.ApriPagina('Risultati', IdSessione);
pkgruppo1.CreaMenuGruppo1(IdSessione);
modGUI.ApriTabella;
modGUI.ApriRigaTabella;
modGUI.IntestazioneTabella('Nome');
modGUI.IntestazioneTabella('Cognome');
modGUI.IntestazioneTabella('Username');
modGUI.ChiudiRigaTabella;
for riga in risultati
loop
modGUI.ApriRigaTabellaConBottoni('proceduraGestioneAzione');
modGUI.PassaParametro('IdRecord', riga.id);
modGUI.ElementoTabella(riga.nome);
modGUI.ElementoTabella(riga.cognome);
modGUI.ElementoTabella(riga.username);
modGUI.ChiudiRigaTabellaConBottoni('azDettagli', 'azModifica', 'azElimina');
modGUI.ChiudiTabella;
modGUI.ChiudiPagina;
end loop;*/
end VisualizzaClienti;
如您所见,我想使用通用游标类型,因为查询结果并不总是相同。 显然“for riga in risultati”是行不通的。 如何在不使用 fetch into 之类的东西的情况下处理该游标?
谢谢
【问题讨论】:
-
FETCH INTO 有什么问题? “游标 FOR 循环将其循环索引隐式声明为 %ROWTYPE 记录,打开游标,重复从结果集中将值行提取到记录中的字段中,并在处理完所有行后关闭游标。当游标 FOR进入循环时,游标名称不能属于已由 OPEN 语句或封闭游标 FOR 循环打开的游标。"
-
如果您的查询具有不同的行类型,请参阅“Oracle - 从引用游标中选择特定列”stackoverflow.com/questions/10321571/…
-
您的声明:“如何在不使用诸如 fetch into 之类的东西的情况下处理该光标?” 没有意义。为什么你不想使用
fetch into?我建议阅读精美手册:Fetching Data with Cursor Variables. -
查询在两个表之间建立连接。那么如何在不使用
%ROWTYPE 类型的变量的情况下使用 FETCH INTO 呢?有没有办法在游标中存储如此复杂的结果?