c# - ORA-06502: PL/SQL: numeric or value error with stored procedure and ASP.NET MVC -


i trying insert data oracle database asp.net mvc application. using stored procedure so, error:

ora-06502: pl/sql: numeric or value error: character string buffer small ora-06512: @ "c##aet.kategorija_pkg", line 40 ora-06502: pl/sql: numeric or value error: character string buffer small ora-06512: @ line 1

procedure code is:

procedure ins_kategorija   (     p_naziv in kategorija.naziv%type,      p_kategorija_id out kategorija.kategorija_id%type,     p_rezultat out number,     p_poruka out varchar2   )     begin     p_rezultat := 1;      select kategorija_seq.nextval p_kategorija_id dual;      insert kategorija     values (p_kategorija_id, p_naziv);      p_rezultat := 0;     p_poruka := 'db: kategorija uspesno uneta.';      exception     when others       p_rezultat := 1;       p_poruka := 'db: ' ||sqlcode|| ' - ' ||sqlerrm;   end ins_kategorija; 

and method calling it:

list<oracleparameter> izvrsitransakciju(string nazivprocedure, list<oracleparameter> parametri, oracletransaction transakcija)         {             try             {                 using (oraclecommand komanda = new oraclecommand(nazivprocedure, konekcija))                 {                     komanda.transaction = transakcija;                     komanda.commandtype = commandtype.storedprocedure;                     komanda.bindbyname = true;                      list<oracleparameter> izlazniparametri = new list<oracleparameter>();                      foreach (oracleparameter p in parametri)                     {                         komanda.parameters.add(p);                          if (p.direction != parameterdirection.input) izlazniparametri.add(p);                     }                      komanda.executenonquery();                      return izlazniparametri;                 }             }             catch (exception ex)             {                  throw new exception("greška pri izvršavanju transakcije: " + ex.message);             }         } 

the methods communicates database are:

    public  list<oracleparameter> pokrenitransakciju(string nazivprocedure, list<oracleparameter> parametri)             {                 try                 {                     list<oracleparameter> listaparametara;                     using (konekcija)                     {                         konekcija.open();                          using (oracletransaction transakcija = konekcija.begintransaction())                         {                             listaparametara = izvrsitransakciju(nazivprocedure, parametri, transakcija);                              int rezultat = convert.toint32(listaparametara.firstordefault(x => x.parametername == "p_rezultat"));                             if (rezultat != 0)                                 transakcija.rollback();                             else                                 transakcija.commit();                              return listaparametara;                         }                     }                 }                 catch (exception ex)                 {                     throw ex;                 }             }      list<oracleparameter> izvrsitransakciju(string nazivprocedure, list<oracleparameter> parametri, oracletransaction transakcija)             {                 try                 {                     using (oraclecommand komanda = new oraclecommand(nazivprocedure, konekcija))                     {                         komanda.transaction = transakcija;                         komanda.commandtype = commandtype.storedprocedure;                         komanda.bindbyname = true;                          list<oracleparameter> izlazniparametri = new list<oracleparameter>();                          foreach (oracleparameter p in parametri)                         {                             komanda.parameters.add(p);                              if (p.direction != parameterdirection.input) izlazniparametri.add(p);                         }                          komanda.executenonquery();                          return izlazniparametri;                     }                 }                 catch (exception ex)                 {                      throw new exception("greška pri izvršavanju transakcije: " + ex.message);                 }             }  public oracleparameter napraviparametar(string naziv, object vrednost, oracledbtype? tip, parameterdirection pravac)         {             oracleparameter param = new oracleparameter();              param.parametername = naziv;             param.direction = pravac;              if (tip != null)                 param.oracledbtype = (oracledbtype)tip;              dodajvrednost(param, vrednost);              return param;         }          void dodajvrednost(oracleparameter param, object vrednost)         {             if (vrednost == null) return;              if (vrednost int)                 param.value = (int)vrednost;             else if (vrednost decimal)                 param.value = (decimal)vrednost;             else if (vrednost string)                 param.value = (string)vrednost;             else if (vrednost datetime)                 param.value = (datetime)vrednost;         } 

any ideas? thank in advance!

[solution] appreciated assistance laudec, figured out 1 must specify size attribute of oracleparameter object when defining varchar2 parameters. added that, , problem solved.

apparently, comes variable affected p_poruka out parameter when calling ins_kategorija procedure small store message trying put in ( based on discussion in comments ).

if called ins_kategorija inside package, have understood behavious :

  declare      poruka varchar2(10);      kategorija_id number;      rezulta number;    begin      ins_kategorija('test',kategorija_id,rezulta,poruka);    end; 

this raise mentionned error message. didn't expect when calling outside. ( code calls directly ins_kategorija or call procedure package calls ins_kategorija ? )

i guess have change code in caller of pokrenitransakciju, 1 defines out variable(and size) used call procedure

edit : reasons following based on op's comment :

when 1 defines oracleparameter of varchar2 type, oracleparameter.size required (it seems set 0 if isn't manually set).


Comments

Popular posts from this blog

php - Vagrant up error - Uncaught Reflection Exception: Class DOMDocument does not exist -

vue.js - Create hooks for automated testing -

Add new key value to json node in java -