【问题标题】:Error ORA-06550 and PLS-00103 When Running Oracle Command运行 Oracle 命令时出现错误 ORA-06550 和 PLS-00103
【发布时间】:2019-05-03 19:34:42
【问题描述】:

运行cmd.ExecuteNonQuery时,显示如下错误:

System.Exception: 'ORA-06550: 第 1 行,第 13 列: PLS-00103:当需要以下符号之一时,发现符号“NET_BUSCAR_SOCIO_P1”:

:= 。 (@%;

using (OracleConnection con = new OracleConnection(connectionString))
{
    using (OracleCommand cmd = con.CreateCommand())
    {
        try
        {

            cmd.CommandText = " CALL NET_BUSCAR_SOCIO_P1(vCPF,vExisteSocio,vMatricula,vCodTbSituacao,vNomSocio,vExisteDebito,vExisteRecebimento,vCodTipoSocio,vExisteChequeDev); ";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("vCPF", OracleDbType.Int64).Direction = ParameterDirection.Input;
            cmd.Parameters["vCPF"].Value = cpf;
            cmd.Parameters.Add("vExisteSocio", OracleDbType.Int16).Direction = ParameterDirection.Output;
            cmd.Parameters.Add("vMatricula", OracleDbType.Int16).Direction = ParameterDirection.Output;
            cmd.Parameters.Add("vCodTbSituacao", OracleDbType.Int16).Direction = ParameterDirection.Output;
            cmd.Parameters.Add("vNomSocio", OracleDbType.Varchar2, 35).Direction = ParameterDirection.Output;

            cmd.Parameters.Add("vExisteDebito", OracleDbType.NChar).Direction = ParameterDirection.Output;
            cmd.Parameters.Add("vExisteRecebimento", OracleDbType.Int16).Direction = ParameterDirection.Output;

            cmd.Parameters.Add("vCodTipoSocio", OracleDbType.Varchar2, 30).Direction = ParameterDirection.Output;
            cmd.Parameters.Add("vExisteChequeDev", OracleDbType.Int16).Direction = ParameterDirection.Output;

            con.Open();
            cmd.ExecuteNonQuery();

            int existesocio = (int)cmd.Parameters["vExisteSocio"].Value;
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
        finally
        {
            if (con.State == ConnectionState.Open)
            {
                con.Close();
            }
        }
    }
}

【问题讨论】:

    标签: c# oracle oraclecommand


    【解决方案1】:

    当使用cmd.CommandType = CommandType.StoredProcedure; 时,CommandText 应该只包含存储过程的名称,即:

                    cmd.CommandText = "NET_BUSCAR_SOCIO_P1";
    

    【讨论】:

    • ORA-06502:PL / SQL:错误:字符串缓冲区太小数字或值 ORA-06512:在第 1 行
    • @PedroTomaz:这是一个单独的错误。存储过程的唯一字符参数是输出参数,因此您似乎可以调用存储过程,但没有为通过输出参数返回的值腾出足够的空间。您也没有指定 vExisteDebito 的大小。
    • 我会改变和测试。这是因为我无权访问 db。
    • 你解决了这个难题。谢谢你。 cmd.Parameters.Add("vExisteDebito", OracleDbType.NChar,6).Direction = ParameterDirection.Output;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多