从c#调用过程时,'ALTA_SOCIO'的过多声明与此调用匹配

时间:2014-03-19 18:09:22

标签: c# oracle stored-procedures

这个问题正在慢慢杀死我,我认为问题可能是日期和时间格式但不确定。

例外:

ORA-06550: line 1, column 7:
PLS-00307: too many declarations of 'ALTA_SOCIO' match this call
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

程序:

    PROCEDURE alta_socio(
    p_nickname IN VARCHAR2,
    p_nombre IN VARCHAR2,
    p_apellido IN VARCHAR2,
    p_cod_tipo_documento IN VARCHAR2,
    p_numero_documento IN NUMBER,
    p_fecha_nacimiento IN DATE,
    p_sexo IN VARCHAR2,
    p_cod_categoria IN VARCHAR2,
    p_numero_socio OUT NUMBER,
    p_codigo_error OUT NUMBER);

PROCEDURE alta_socio(
    p_nickname IN VARCHAR2,
    p_nombre IN VARCHAR2,
    p_apellido IN VARCHAR2,
    p_cod_tipo_documento IN VARCHAR2,
    p_numero_documento IN NUMBER,
    p_fecha_nacimiento IN DATE,
    p_sexo IN VARCHAR2,
    p_cod_categoria IN VARCHAR2,
    p_mail IN VARCHAR2 DEFAULT NULL,
    p_telefono_particular IN VARCHAR2 DEFAULT NULL,
    p_telefono_alternativo IN VARCHAR2 DEFAULT NULL,
    p_cod_ocupacion IN VARCHAR2 DEFAULT NULL, 
    p_cod_profesion IN VARCHAR2 DEFAULT NULL,
    p_cod_estado_civil  IN VARCHAR2 DEFAULT NULL,
    p_fecha_casamiento IN DATE DEFAULT NULL,
    p_nombre_apellido_conyuge IN VARCHAR2 DEFAULT NULL,
    p_cod_pais   IN VARCHAR2 DEFAULT NULL,
    p_cod_provincia IN VARCHAR2 DEFAULT NULL,
    p_cod_localidad IN VARCHAR2 DEFAULT NULL,
    p_calle IN VARCHAR2 DEFAULT NULL,
    p_numero IN VARCHAR2 DEFAULT NULL, 
    p_piso IN VARCHAR2 DEFAULT NULL,
    p_departamento IN VARCHAR2 DEFAULT NULL,
    p_cp IN VARCHAR2 DEFAULT NULL,
    p_cp_nuevo_formato IN VARCHAR2 DEFAULT NULL,        
    p_numero_socio OUT NUMBER,
    p_codigo_error OUT NUMBER);

c#代码

  int retornoNroSocio = (int)retorno.ObjetoGenerico;
        //Agrego todos los parametros al comando

        OracleParameter parameterNickname = new OracleParameter("p_nickname", OracleType.VarChar, 32767);
        parameterNickname.Direction = ParameterDirection.Input;
        parameterNickname.Value = nickname;
        ora_cmd.Parameters.Add(parameterNickname);

        OracleParameter parameterNombre = new OracleParameter("p_nombre", OracleType.VarChar, 32767);
        parameterNombre.Direction = ParameterDirection.Input;
        parameterNombre.Value = nombre;
        ora_cmd.Parameters.Add(parameterNombre);

        OracleParameter parameterApellido = new OracleParameter("p_apellido", OracleType.VarChar, 32767);
        parameterApellido.Direction = ParameterDirection.Input;
        parameterApellido.Value = apellido;
        ora_cmd.Parameters.Add(parameterApellido);


        OracleParameter parameterTipoDocumento = new OracleParameter("p_cod_tipo_documento", OracleType.VarChar, 32767);
        parameterTipoDocumento.Direction = ParameterDirection.Input;
        parameterTipoDocumento.Value = tipoDocumento;
        ora_cmd.Parameters.Add(parameterTipoDocumento);

        OracleParameter parameterNroDocumento = new OracleParameter("p_numero_documento", OracleType.Number);
        parameterNroDocumento.Direction = ParameterDirection.Input;
        parameterNroDocumento.Value = numeroDocumento;
        ora_cmd.Parameters.Add(parameterNroDocumento);

        string fecha1 = DateTime.Today.ToShortDateString();
        DateTime fecha2 = DateTime.Today;
        string fecha3 = fecha2.ToString("dd-MM-yyyy");
        DateTime fecha4 = new DateTime(2012, 5, 7, 12, 23, 22, 0);
        DateTime fecha5 = DateTime.ParseExact(fecha3, "dd-MM-yyyy", null);

        OracleParameter parameterFechaNacimiento = new OracleParameter("p_fecha_nacimiento", OracleType.DateTime);
        parameterFechaNacimiento.Direction = ParameterDirection.Input;
        parameterFechaNacimiento.Value = fecha5;   
        //parameterFechaNacimiento.Value = fecha2.ToString("dd/MM/yyyy");   
        ora_cmd.Parameters.Add(parameterFechaNacimiento);

        OracleParameter parameterSexo = new OracleParameter("p_sexo", OracleType.VarChar, 32767);
        parameterSexo.Direction = ParameterDirection.Input;
        parameterSexo.Value = sexo.ToString();
        ora_cmd.Parameters.Add(parameterSexo);

        OracleParameter parameterCodCategoria = new OracleParameter("p_cod_categoria", OracleType.VarChar, 32767);
        parameterCodCategoria.Direction = ParameterDirection.Input;
        parameterCodCategoria.Value = codCategoria;
        ora_cmd.Parameters.Add(parameterCodCategoria);

        //ora_cmd.Parameters.Add("p_numero_socio", OracleType.Number).Direction = ParameterDirection.Output;
       // ora_cmd.Parameters.Add("p_codigo_error", OracleType.Number).Direction = ParameterDirection.Output;

        OracleParameter resultNumeroSocio = new OracleParameter("p_numero_socio", OracleType.Number);
        resultNumeroSocio.Direction = ParameterDirection.Output;
        ora_cmd.Parameters.Add(resultNumeroSocio);

        OracleParameter resultCodigoError = new OracleParameter("p_codigo_error", OracleType.Number);
        resultCodigoError.Direction = ParameterDirection.Output;
        ora_cmd.Parameters.Add(resultCodigoError);


        //Ejecuto el comando
        ora_cmd.ExecuteNonQuery();

我尝试了几种日期格式但没有成功,我不知道可能是什么。 非常感谢您提供的帮助,如果您需要更多我可以添加的帮助。

1 个答案:

答案 0 :(得分:3)

我不认为这是日期格式 - Oracle无法区分您要调用哪个 alta_socio过程,因为前8个参数是相同的,其余参数是可选的。

然而,传递日期的正确方式只是传递日期值而不是将其转换为字符串

OracleParameter parameterFechaNacimiento = new OracleParameter("p_fecha_nacimiento", OracleType.DateTime);
parameterFechaNacimiento.Direction = ParameterDirection.Input;
parameterFechaNacimiento.Value = fecha5;   // use the native DateTime type
ora_cmd.Parameters.Add(parameterFechaNacimiento);