2014-02-20 3 views
6

asp.net에서 # 코드의 in/out 매개 변수로 일부 oracle pl/sql 프로 시저를 실행하려고합니다. 나는 매개 변수에서 값을 다시 얻고 싶습니다. 하지만 "ORA-06502 : PL/SQL : 숫자 또는 값 오류 : 문자열 버퍼가 너무 작음"과 같은 오라클 예외가 발생합니다. 지금 어떻게 할 수 있습니까? 도와주세요.ORA-06502 : PL/SQL : 숫자 또는 값 오류 : C# 코드의 문자열 버퍼가 너무 작음 예외

코드 :

using Oracle.DataAccess.Client; 
using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.SqlClient; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace Activity.Account 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      SuccessLabel.Visible = false; 
      FailureLabel.Visible = false; 
     } 

     protected void Create_user(object sender, EventArgs e) 
     { 
      var id=""; 
      string oradb = "Data Source=OracleServerHost;User ID=scott;password=tiger"; 
      using (OracleConnection conn = new OracleConnection(oradb)) 
      { 
       try 
       { 
        OracleCommand cmd = new OracleCommand(); 
        cmd.Connection = conn; 
        cmd.CommandText = "create_users_372640"; 
        cmd.CommandType = CommandType.StoredProcedure; 
        OracleParameter p1 = new OracleParameter("u_user_id", UserIDTextBox.Text.TrimEnd()); 
        OracleParameter p2 = new OracleParameter("u_First", FirstNameTextBox.Text.TrimEnd()); 
        OracleParameter p3 = new OracleParameter("u_Last", LastNameTextBox.Text.TrimEnd()); 
        OracleParameter p4 = new OracleParameter("u_Email", EmailIDTextBox.Text.TrimEnd()); 
        OracleParameter p5 = new OracleParameter("u_password", PasswordTextBox.Text.TrimEnd()); 
        cmd.Parameters.Add(p1); 
        cmd.Parameters.Add(p2); 
        cmd.Parameters.Add(p3); 
        cmd.Parameters.Add(p4); 
        cmd.Parameters.Add(p5); 
        OracleCommand cmd_chk = new OracleCommand(); 
        cmd_chk.Connection = conn; 
        cmd_chk.CommandText = "check_user_372640"; 
        cmd_chk.CommandType = CommandType.StoredProcedure; 
        OracleParameter p6 = new OracleParameter("user_id", UserIDTextBox.Text.TrimEnd()); 
        cmd_chk.Parameters.Add(p6); 
        cmd_chk.Parameters.Add("id", OracleDbType.Varchar2).Direction = ParameterDirection.Output; 
        conn.Open(); 
        cmd_chk.ExecuteNonQuery(); 
        id=(string)cmd_chk.Parameters["id"].Value; 
        //OracleDataReader rd = cmd_chk.ExecuteReader(); 
        if (id != null && id != "") 
        { 
         //rd.Read(); 
         SuccessLabel.Visible = false; 
         FailureLabel.Visible = true; 
        } 
        else 
        { 
         cmd.ExecuteNonQuery(); 
         SuccessLabel.Visible = true; 
         FailureLabel.Visible = false;  
        } 
       }catch(Exception){ 
        Console.WriteLine("SQL Exception Occured"); 
       } 
      } 

     } 
    } 
} 

내 오라클 절차는 다음과 같습니다

create or replace procedure check_user_372640(
user_id in varchar2, 
id out varchar2 
) 
as 
u_id varchar2(20); 
begin 
select user_id into u_id from ACTIVITY_USERS_372640 where user_id=user_id; 
id:=u_id; 
end; 

답변

8

의 크기를 rease. 실수는 varchar2로 매개 변수 "Id"를 선언했습니다. 그러나 나는 그것에 어떤 크기도주지 않았다. 이제 최대 크기를 매개 변수로 선언하고 정상적으로 작동합니다.

cmd_chk.Parameters.Add("id", OracleDbType.Varchar2,32767).Direction = ParameterDirection.Output; 
0

The problem originates from using Char which is a fixed length string. Not sure where, but somewhere in your code you try to put a Char or varchar2 string of length N into a char of lengh M where M > N.

0

당신이 %type.
구문처럼 고정 된 데이터 타입으로 사용해 볼 수 : - tablename.colname%type.

0

당신이 필요 inc 그것은 지금 나를 위해 노력하고 있습니다 u_id

u_id varchar2(4000); 
관련 문제