sql >> Database >  >> RDS >> Oracle

Code voor het aanroepen van een functie in een pakket vanuit C# en ODP.NET

Dit is mijn eerste vraag op dit forum en ik ben blij om mijn eigen antwoord te posten.

We kunnen een orakelpakketfunctie aanroepen met ODP.NET door CommandType.StoredProcedure in te stellen .

ORA-06550: line 1, column 7:
PLS-00221: 'INSERT_FUNC' is not a procedure or is undefined
ORA-06550: line 1, column 7: PL/SQL: Statement ignored

Als u deze foutmelding krijgt, voegt u deze regel toe als de eerste parameter van het opdrachtobject:

cmd.Parameters.Add("Return_Value", OracleDbType.Int16,
    ParameterDirection.ReturnValue);

Hier is de werkende code:

using (var conn = new OracleConnection(oradb))
using (var cmd = conn.CreateCommand())
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "PKG_NAME.INSERT_FUNC";

    cmd.BindByName = true;

    cmd.Parameters.Add("Return_Value", OracleDbType.Int16,
        ParameterDirection.ReturnValue);
    cmd.Parameters.Add("i_description", OracleDbType.Varchar2, 1000,
        promotionEventSetupDetails.PromotionDescription,
        ParameterDirection.Input);
    cmd.Parameters.Add("i_theme", OracleDbType.Varchar2, 80,
        promotionEventSetupDetails.PromotionTheme,
        ParameterDirection.Input);
    cmd.Parameters.Add("o_id", OracleDbType.Varchar2,
        ParameterDirection.Output);
    cmd.Parameters.Add("o_error_msg", OracleDbType.Varchar2,
        ParameterDirection.Output);

    conn.Open();
    using (var dr = cmd.ExecuteReader())
    {
        // do some work here
    }
}


  1. Reguliere expressies binnen SQL Server

  2. EF-query naar Oracle die ORA-12704 gooit:tekenset komt niet overeen

  3. TO_CHAR(datetime) Functie in Oracle

  4. Hoe dynamische kolomnamen te gebruiken in een UPDATE- of SELECT-instructie in een functie?