Can odp.net pass a parameter to a boolean pl/sql parameter?

前端 未结 2 1704
暖寄归人
暖寄归人 2020-12-11 06:18

Is it possible to correctly pass an OracleParameter to a boolean parameter in a pl/sql stored procedure?

2条回答
  •  时光说笑
    2020-12-11 07:01

    I used the following workaround to bypass this limitation:

    1. Wrap the function call using an anonymous block.
    2. Return an output variable containing 1 or 0.
    3. Read the output variable and cast it to boolean.

    Here is some sample code:

    using (var connection = new OracleConnection(""))
    {
        var command = new OracleCommand();
        command.Connection = connection;
        command.CommandText = 
            "declare v_bool boolean;" + 
            "begin " +
            "v_bool := auth_com.is_valid_username (:username); "+
            "if (v_bool = TRUE) then select 1 into :v_result from dual; end if; " +
            "if (v_bool = FALSE) then select 0 into :v_result from dual; end if; " +
            "end;";
    
        command.Parameters.Add(new OracleParameter { ParameterName = "username", OracleDbType = OracleDbType.NVarchar2, Size=512, Direction = ParameterDirection.Input });
        command.Parameters.Add(new OracleParameter { ParameterName = "v_result", OracleDbType = OracleDbType.Decimal, Direction = ParameterDirection.Output });     
    
        try
        {
            connection.Open();
            command.ExecuteNonQuery();
        }
        finally
        {
            connection.Close();
        }
    
        bool success = Convert.ToBoolean(((OracleDecimal)command.Parameters["v_result"].Value).ToInt32());
    }
    

    EDIT:

    Alex Keh from Oracle, october 2013:

    We're planning on supporting ODP.NET Boolean in the managed provider in the near term, possibly in the middle of next year.

提交回复
热议问题