Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di echoweb
    Registrato dal
    Sep 2008
    Messaggi
    419

    [C#] Leggere esito di una procedura / funzione oracle

    Ciao a tutti..

    qualcuno di voi sa come si fa a leggere l'esito di una procedura o funzione oracle?

    Io ho provato così, ma non va...

    Codice PHP:
    String strConn "Data Source=XXX;Persist Security Info=True;User ID=XXX;Password=XXX;Unicode=True";

    String res "";

    String sql "declare RES varchar2(200); " +
                            
    " begin " +
                            
    " RES:='111111'; " +
                            
    " Dbms_Output.put_line(to_char(RES)); " +
                            
    " Dbms_Output.put_line('wqw'); " +
                            
    " END; ";

    System.Data.OracleClient.OracleConnection connection = new System.Data.OracleClient.OracleConnection(strConn);
    System.Data.OracleClient.OracleCommand cmd = new System.Data.OracleClient.OracleCommand(sqlconnection);

    connection.Open();

    try
    {
        
    System.Data.OracleClient.OracleDataReader dr cmd.ExecuteReader();
        if (
    dr.HasRows)
        {
            while (
    dr.Read() == true)
            {
                
    res dr.GetString(0);

            }
        }
        else
        {
            
    res "no righe";
        }
    }
    catch (
    Exception ex)
    {
        
        
    res "-2";
    }

    connection.Close();

    Response.Write("esito: " +res); 
    Se uso una query come:

    Codice PHP:
    sql "select 'ciao' RES from dual"
    riesco a leggere i dati.

    Qualche consiglio?

    Grazie


    "Non soffocare la tua ispirazione e la tua immaginazione,
    non diventare lo schiavo del tuo modello"

    Vincent van Gogh

  2. #2
    Sto lavorando da poco in ambiente Oracle e per quanto riguarda la creazione di stored procedure se ne occupano altre figure in azienda.
    Per eseguire una stored procedure ho utilizzato il seguente codice (vb.net, spero non abbia difficoltà nel tradurlo altrimenti ti aiuto volentieri io):

    codice:
          With cmdStoredProc
            .Connection = cn
            .CommandText = "NOMEPROCEDURA"
            .CommandType = CommandType.StoredProcedure
     Dim oPar As OracleParameter = New OracleParameter
     oPar.Direction = ParameterDirection.Input
        oPar.ParameterName = "Par1"
    oPar.OracleDbType = OracleDbType.Varchar2
           .Parameters.Add (oPar)
    oPar = New OracleParameter
    oPar.Direction = ParameterDirection.Output
    oPar.ParameterName = "Par2"
    oPar.OracleDbType = OracleDbType.RefCursor
    .Parameters.Add(oPar)
    End With
    (perdona la formattazione, ma sto facendo copia/incolla dal mio progetto)
    Poi tutto l'ambaradan lo dai in pasto all'oracle datareader in maniera canonica sfruttando quindi il codice che hai già scritto tu.

    Note importanti:
    1) devi chiamare la stored procedure senza specificare i parametri. Nel tuo caso quindi .CommandText = "Dbms_Output.put_line" e stop;
    2) oltre al parametro di input devi specificare il parametro di output ossia il cursore che la stored procedure estrae. Le mie stored procedure sono costruite nel seguente modo:

    codice:
      PROCEDURE NOMEPROCEDURA (I_PARAMETRO1 IN  VARCHAR2, O_RESULT_SET OUT CURSOR_TYPE) IS
       BEGIN
        OPEN O_RESULT_SET FOR
          select field1, field2 from Table1
       END;
    spero di esserti stato utile.

  3. #3
    Utente di HTML.it L'avatar di echoweb
    Registrato dal
    Sep 2008
    Messaggi
    419
    Grazie mille motogpdesmo16 per le informazioni!!!

    Era proprio quello che mi serviva.

    Grazie ancora!


    "Non soffocare la tua ispirazione e la tua immaginazione,
    non diventare lo schiavo del tuo modello"

    Vincent van Gogh

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.