2016-04-29 22 views
-1

私の目標は、プロシージャ内でクエリを実行し、その結果をデータを処理し、いくつかのhtmlテーブルを印刷する別のプロシージャに渡すことです。複雑なクエリ結果をPL SQLのパラメータとして渡す

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; 

わかりましたが、私は一般的なカーソルタイプを使用したいのですが、結果が常に同じではないためです。明らかに "リサ・リサーチのために"は機能しません。 フェッチするようなものを使わずにカーソルを処理するにはどうしたらいいですか?手のレコードのaraoundへ

おかげ

+1

のようなサンプルのため 検索ウェブ?カーソルFORループはループ・インデックスを%ROWTYPEレコードとして暗黙的に宣言し、カーソルをオープンし、結果セットからレコードのフィールドに値の行を繰り返しフェッチし、すべての行が処理されたときにカーソルを閉じます。ループが入力された場合、カーソル名は、OPEN文またはカーソルFORループで既に開かれているカーソルには属しません。 – Mottor

+0

クエリの行タイプが異なる場合は、「Oracle - 参照カーソルから特定の列を選択する」を参照してください。http://stackoverflow.com/questions/10321571/oracle-select-a-specific-column-from-a-ref-cursor – Mottor

+0

あなたの声明:_「フェッチするものを使わずにそのカーソルを処理するにはどうすればいいですか?」_は意味がありません。なぜ 'fetch into'を使いたくないのですか?ファイン・マニュアル[カーソル変数を使用したデータの取り込み](http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/static.htm#LNPLS581)を読むことをお勧めします。 – user272735

答えて