Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [java] Chiamata a Stored Procedure

    Ciao ragazzi.
    Sto cercando di chiamare una procedura (da me creata) memorizzata dentro Oracle (installato sul mio pc).

    Questo è il codice della pagina jsp con la chiamata alla Stored Procedure:

    codice:
    <%
        Connection con = (Connection) session.getAttribute("connessione");
    		   
       try{
    	  
    	   String call="{call miaProcedura(?)}";
    	   CallableStatement cs = con.prepareCall(call);
      		
    	   cs.registerOutParameter (1, Types.INTEGER);
    	   cs.execute();
    
      	//recupero del valore di ritorno	
      	int codice = cs.getInt(1);
    	   
    %>

    Questa è la Stored Procedure :

    codice:
    create or replace PROCEDURE miaProcedura (pro OUT SYS_REFCURSOR) 
    AS
    BEGIN
    open pro for
    SELECT codice
    FROM tabella
    end;

    Questo è l'errore che mi porta Eclipse :

    java.sql.SQLException: ORA-06550: riga 1, colonna 7: PLS-00306: numero o tipi di argomenti errati nella chiamata di 'miaProcedura' ORA-06550: riga 1, colonna 7: PL/SQL: Statement ignored



    SOLUZIONI A RIGUARDO? Grazie in anticipo

  2. #2
    Il problema (come ti dice l'eccezione) e nel tipo di parametri della chiamata alla procedura infatti tu hai dichiarato che la procedura ritorna un intero
    codice:
    cs.registerOutParameter (1, Types.INTEGER);
    Questo non è vero in quanto la procedura ritorna un cursore:
    codice:
    create or replace PROCEDURE miaProcedura (pro OUT SYS_REFCURSOR)
    Soluzione:
    codice:
    cs.registerOutParameter(1, OracleTypes.CURSOR);

  3. #3
    Ok grazie mille . E se vorrei visualizzare il codice ritornato dalla procedura?

  4. #4
    In che senso, come ho detto prima quella procedura ritorna un cursore, nessun codice.

  5. #5
    E tramite il cursone non posso ritornare in qualche modo il "codice" ? Oppure dovrei modificare il parametro di output della procedura?

  6. #6
    Provando cosi :

    codice:
     String call="{  call miaProcedura(?)}";
     CallableStatement cs = con.prepareCall(call);
     cs.registerOutParameter (1, OracleTypes.CURSOR);
    
    ResultSet res = (ResultSet) cs.getObject (1); 
    
    while(res.next()){
    
    res.getInt(1);
    
    }
    mi stampa questo errore : java.lang.NullPointerException





    Provando cosi:


    codice:
     String call="{  call miaProcedura(?)}";
     CallableStatement cs = con.prepareCall(call);
     cs.registerOutParameter (1, OracleTypes.CURSOR);
    
    ResultSet res = cs.executeQuery(); 
    
    while(res.next()){
    
    res.getInt(1);
    
    }
    mi stampa questo errore : java.sql.SQLException: Impossibile eseguire l'operazione di FETCH su un'istruzione PLSQL: next

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.