problem receiving string from C # calling an Oracle procedure with OUT parameter

0

Good morning. I have the problem that since I call a procedure in Oracle that returns one or more variables in out but if the text is 1234, it returns 12, for as long as I return the double value, that is, 1234 || 1234, but how can I fix it so that I do not have to duplicate the information when I return it in the OUT variable.

    Procedure prfaltantes_gondola(p_cia IN NUMBER, p_tda IN NUMBER, p_barra IN VARCHAR2,p_usuario IN VARCHAR2,
  p_error OUT VARCHAR2, p_mensaje OUT VARCHAR2) IS
   p_desc_producto  VARCHAR2(300); 
   p_uni_med varchar2(300);                                  
BEGIN
  BEGIN
     select rpad(a.CODBARCOD||' - '||b.INVPTMDESC,length(a.CODBARCOD||' - '||b.INVPTMDESC)*2,' ') desc_producto, 
            rpad(c.desmed,length(c.desmed)*2,'-') desmed
       into p_desc_producto, p_uni_med  
       from codbartab a, invptmtab b, unimed c
      where b.INVPTMCIA(+) = a.CODBARCIA
        and b.INVPTMCOD(+) = a.CODBARCOD
        and c.CODMED(+) = b.INVPTMMED
        and a.codbarcia = p_cia
        and codbarbar = p_barra;

        INSERT INTO SBARRIO.FALTANTES_GONDOLA (CIACOD,TDAOPERA,BARRA,ESTADO,USUARIO_HANDHELD)
                                              VALUES(p_cia,p_tda,p_barra,'P',p_usuario);
        COMMIT;

        p_error := '00';
        p_mensaje := p_desc_producto||'|'||p_uni_med||'|'||p_usuario||p_desc_producto||'|'||p_uni_med||'|'||p_usuario;

  EXCEPTION
     WHEN NO_DATA_FOUND THEN
        p_error := '11';
        p_mensaje := p_cia||' '||p_tda||' '||p_barra||p_cia||' '||p_tda||' '||p_barra;--'No se Encontraron Datos para la Barra2';
     WHEN OTHERS THEN
     p_error := '11';
        p_mensaje := 'Error: '||SQLERRM||'Error: '||SQLERRM;

  END;
 END;   

and the call from c # is

     OracleConnection conexion = new OracleConnection(conexionO);
     OracleCommand cmd = new OracleCommand();
     cmd.Connection = conexion;
     cmd.CommandText = "pkg_webservices.prfaltantes_gondola";
     cmd.CommandType = System.Data.CommandType.StoredProcedure;
     //parametros IN
     OracleParameter p_cia = new OracleParameter("p_cia", DbType.Int32);
     p_cia.Value = int.Parse(words[1]);
     cmd.Parameters.Add(p_cia);
     OracleParameter p_tda = new OracleParameter("p_tda", DbType.Int32);
     p_tda.Value = int.Parse(words[2]);
     cmd.Parameters.Add(p_tda);
     OracleParameter p_barra = new OracleParameter("p_barra",              OracleType.VarChar, 4000);
     p_barra.Value = words[3];
     cmd.Parameters.Add(p_barra);
     OracleParameter p_usuario = new OracleParameter("p_usuario", OracleType.VarChar, 4000);
     p_usuario.Value = words[4];
     cmd.Parameters.Add(p_usuario);
     //parametros OUT
     OracleParameter sp_error = new OracleParameter("p_error", OracleType.VarChar, 4000);
     sp_error.Direction = ParameterDirection.Output;
     cmd.Parameters.Add(sp_error);
     OracleParameter sp_mensaje = new OracleParameter("p_mensaje", OracleType.VarChar, 4000);
     sp_mensaje.Direction = ParameterDirection.Output;
     cmd.Parameters.Add(sp_mensaje);
     conexion.Open();
     int exito = cmd.ExecuteNonQuery();
     datos = new Alterno();
     datos.error = sp_error.Value.ToString();
     datos.mensajes = sp_mensaje.Value.ToString();
     conexion.Close();

Thanks in advance for your help.

greetings

p.d. what is required

   using System;
   using System.Collections.Generic;
   using System.Linq;
   using System.Runtime.Serialization;
   using System.ServiceModel;
   using System.ServiceModel.Web;
   using System.Text;

   namespace MiWS2
    {
    // NOTA: puede usar el comando "Rename" del menú "Refactorizar"     para       cambiar el nombre de interfaz "IWSAlternos" en el código y en el archivo de configuración a la vez.
[ServiceContract]
public interface IWSAlternos
{

    [OperationContract] 
    Alterno ObtenerAlterno(string parametros);



    // TODO: agregue aquí sus operaciones de servicio
}


[DataContract]

public class Alterno 
{

    [DataMember]
    public String error { get; set; }
    [DataMember]
    public String mensajes { get; set; }


    }

   }
    
asked by IcemanGT 08.02.2018 в 16:01
source

0 answers