大家早上好,我来了好几天试图完成这项工作,但找不到方法。我收到以下错误
ORA-06550: line 1, column 7: PLS-00306: wrong number or types
of arguments in call to 'ALTA_SOCIO'
ORA-06550: line 1, column 7: PL/SQL: Statement ignored
如果不完全清楚,我不能发布图片,请原谅
这是代码
protected override void EjecutarConcreto()
{
int retornoNroSocio = (int)retorno.ObjetoGenerico;
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);
parameterNombre.Direction = ParameterDirection.Input;
parameterNombre.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);
OracleParameter parameterFechaNacimiento = new OracleParameter("p_fecha_nacimiento", OracleType.DateTime);
parameterFechaNacimiento.Direction = ParameterDirection.Input;
parameterFechaNacimiento.Value = fechaNacimiento;
ora_cmd.Parameters.Add(parameterFechaNacimiento);
OracleParameter parameterSexo = new OracleParameter("p_sexo", OracleType.VarChar, 32767);
parameterSexo.Direction = ParameterDirection.Input;
parameterSexo.Value = sexo;
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;
//Ejecuto el comando
ora_cmd.ExecuteNonQuery();
这是桌子
NUMERO_SOCIO NUMBER(7) NOT NULL,
NICKNAME VARCHAR2(25) NOT NULL,
APELLIDO VARCHAR2(30) NOT NULL,
NOMBRE VARCHAR2(30) NOT NULL,
COD_TIPO_DOCUMENTO VARCHAR2(10) NOT NULL,
NRO_DOCUMENTO NUMBER(8) NOT NULL,
COD_CATEGORIA VARCHAR2(10) NOT NULL,
FECHA_NACIMIENTO DATE,
SEXO VARCHAR2(1)
和程序:
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);
[WebGet(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
public RetornoNroSocio AltaSocio(string codUsuario, string claveUsuario, string establecimiento, string nick, string nombre, string apellido, int documento, DateTime fechaNacimiento, char sexo, string codCategoria)
{
RetornoNroSocio rn = new RetornoNroSocio() { NroSocio = 0 };
if (codUsuario != null && claveUsuario != null && establecimiento != null && nick != null && codUsuario != null && nombre != null && apellido != null && (sexo == 'M' || sexo == 'F') && codCategoria != null)
{
//Verifico que si el documento es una cedula sea valido
if (PUtiles.CedulaUruguaya.validarCedula(documento.ToString()))//REVISAR ESTA VALIDACION
{
//Verifico que el usuario tenga permisos
RetornoBool rb = new SeguridadAccesoClub().TienePermiso(codUsuario, claveUsuario, Globales.ACC_VERIFICAR_SOCIO, Globales.MODO_INGRESO);
//En caso de que no ocurra ningun error y el usuario tenga permisos
if (!rb.Error && rb.Resultado)
{
//Verifico que el usuario no exista
int NumeroSocioSiExiste = ValidarSocio(establecimiento, codUsuario, claveUsuario, Globales.CODIGO_DATOS_DNI, documento.ToString()).NroSocio;
if (NumeroSocioSiExiste == 0)
{
//Creo y realizo la peticion a la API
PeticionAPI p = new AltaSocio(establecimiento, nick, nombre, apellido, Globales.DOCUMENTO_CI, documento, fechaNacimiento, sexo, codCategoria);
RetornoGenerico r = p.Ejecutar();
if (!r.Error)//si no hay error
{
rn.Codigo = 0;
rn.Mensaje = "Socio creado OK";
rn.NroSocio = (int)r.ObjetoGenerico;//El numero de socio
}
else//si hay error
{
rn.Codigo = -99;
rn.Mensaje = "Se produjo un error inesperado ";
rn.NroSocio = 0;
var _logger = log4net.LogManager.GetLogger("log4Net");
_logger.Error("Error al dar de alta un usuario " +
r.MensajeError + " Datos: CodUsuario: "+ codUsuario +" ClaveUsuario: "+ claveUsuario
+" Establecimiento: " + establecimiento + " Nick: " + nick + " Nombre: "+ nombre +
" Apellido " + apellido + " Documento: " + documento + " FechaNacimiento: "+ fechaNacimiento +
" Sexo: " + sexo + " CodCategoria: " + codCategoria);
}
}
else
{
rn.Codigo = -1;
rn.Mensaje = "Este socio ya existe";
rn.NroSocio = NumeroSocioSiExiste;
}
}
else
{
if (rb.Error)
{
rn.Codigo = -3;
rn.Mensaje = "Error al obtener los permisos del usuario";
rn.NroSocio = 0;
var _logger = log4net.LogManager.GetLogger("log4Net");
_logger.Error("rror al obtener los permisos del usuario " +
rb.MensajeError + " Datos: CodUsuario: " + codUsuario + " ClaveUsuario: " + claveUsuario
+ " Establecimiento: " + establecimiento);
}
else
{
rn.Codigo = -4;
rn.Mensaje = "El usuario no tiene los permisos de acceso necesarios para realizar la consulta.";
rn.NroSocio = 0;
}
}
}
else
{
rn.Codigo = -2;
rn.Mensaje = "Numero de cedula no es valido ";
rn.NroSocio = 0;
}
}
else
{
rn.Codigo = -5;
rn.Mensaje = "Alguno de los campos es vacio";
rn.NroSocio = 0;
}
return rn;
}
命名空间 WcfServicioAccesoCASClub.PConsumoAPIs { 公共抽象类 PeticionAPI {
private OracleConnection ora_conn;
protected OracleCommand ora_cmd;
protected string codEstablecimiento;
protected string connectionString;
protected string nombreProcedimiento;
protected string nombreProcedimientoReal;
protected CommandType tipoComando = CommandType.StoredProcedure;
protected RetornoGenerico retorno;
public RetornoGenerico Ejecutar() {
InicializarRetorno();
try {
if (!string.IsNullOrEmpty(codEstablecimiento)) {
connectionString = ObtenerConnectionString(codEstablecimiento);
RetornoGenerico rg = OperacionPrevia();
if (!rg.Error) {
ora_conn = new OracleConnection(connectionString);
ora_conn.Open();
CrearComando();
EjecutarConcreto();
} else {
retorno.Error = true;
retorno.MensajeError = rg.MensajeError;
}
}else{
retorno.Error = true;
retorno.MensajeError = "No se recibio un establecimiento válido.";
}
} catch (Exception ex) {
retorno.Error = true;
retorno.MensajeError = string.Format("Error al ejecutar el comando {0}. \nDescripcion del error: {1}", nombreProcedimiento, ex.Message);
} finally {
if (ora_conn != null && ora_conn.State == ConnectionState.Open) {
ora_conn.Close();
}
}
return retorno;
}
protected virtual RetornoGenerico OperacionPrevia() {
return new RetornoGenerico() { Error = false, MensajeError = string.Empty, ObjetoGenerico = null };
}
protected void CrearComando() {
ora_cmd = new OracleCommand(nombreProcedimiento, ora_conn);
ora_cmd.CommandType = tipoComando;
}
protected abstract void EjecutarConcreto();
protected abstract void InicializarRetorno();
protected string ObtenerConnectionString(string codEstablecimientoIn) {
return GeneradorConnectionString.Instance.ObtenerConnectionString(codEstablecimientoIn);
}
protected string MensajeError(int nroError) {
string mensajeError = string.Empty;
ora_cmd = null;
ora_cmd = new OracleCommand("cj_boldt.utl_terminales.obtener_error", ora_conn);
ora_cmd.CommandType = CommandType.StoredProcedure;
OracleParameter parameterNroSocio = new OracleParameter("p_codigo_error", OracleType.Number);
parameterNroSocio.Direction = ParameterDirection.Input;
parameterNroSocio.Value = nroError;
ora_cmd.Parameters.Add(parameterNroSocio);
OracleParameter parameterNombre = new OracleParameter("p_nombre_procedimiento", OracleType.VarChar, 32767);
parameterNombre.Direction = ParameterDirection.Input;
parameterNombre.Value = nombreProcedimientoReal;
ora_cmd.Parameters.Add(parameterNombre);
ora_cmd.Parameters.Add("p_mensaje_error", OracleType.VarChar, 32767).Direction = ParameterDirection.Output;
//Ejecuto el comando
ora_cmd.ExecuteNonQuery();
//Obtengo los valores recibidos por parametro
try {
mensajeError = ora_cmd.Parameters["p_mensaje_error"].Value.ToString();
} catch (Exception ex) {
mensajeError = "Ocurrio un error en la conexión";
}
return mensajeError;
}
}
}
感谢您的帮助,非常感谢