내 C # 코드에서 저장 프로 시저를 실행하려고 할 때 발생하는 오류입니다.
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "MYAPP.PRO_COMPANYSEARCH", line 28
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 1
내 C # 코드는 다음과 같습니다.
using (var mCon = new OracleConnection(MyConnectionString))
{
myCon.Open();
using (OracleCommand myOracleCmd = myCon.CreateCommand())
{
myOracleCmd.CommandType = CommandType.StoredProcedure;
myOracleCmd.CommandText = "PRO_COMPANYSEARCH";
myOracleCmd.Parameters.Add("o_result_cur", OracleDbType.RefCursor, ParameterDirection.Output);
myOracleCmd.Parameters.Add("o_sqlcode", OracleDbType.Int32, ParameterDirection.Output);
myOracleCmd.Parameters.Add("o_sqlmsg", OracleDbType.Varchar2, ParameterDirection.Output);
var reader = myOracleCmd.ExecuteReader();
dtCompany.Load(reader);
reader.Dispose();
}
}
3 개의 출력 매개 변수가 있으며, 그중 2 개는 예외 추적에 사용되고 다른 하나는 결과에 사용됩니다.
편집 : 이것은 내 저장 프로 시저입니다 (게시하는 것을 잊었다 고 믿을 수 없습니다).
CREATE OR REPLACE
PROCEDURE PRO_COMPANYSEARCH (
o_result_cur OUT SYS_REFCURSOR,
o_sqlcode OUT NUMBER,
o_sqlmsg OUT VARCHAR2)
IS
BEGIN
o_sqlmsg := 'SUCCESS';
o_sqlcode := 0;
OPEN o_result_cur FOR Select distinct irint, irname, irabbv, iropt From vw_issue;
EXCEPTION
WHEN NO_DATA_FOUND THEN
o_sqlcode := SQLCODE * -1;
o_sqlmsg := 'NO DATA FOUND';
WHEN OTHERS THEN
o_sqlcode := SQLCODE * -1; --This is line 28, I removed unnecessary comments.
o_sqlmsg := SUBSTR(SQLERRM, 1, 200);
END PRO_COMPANYSEARCH;
답을 찾았습니다. C # 코드에서 varchar의 크기도 포함해야합니다.
using (var mCon = new OracleConnection(MyConnectionString))
{
myCon.Open();
using (OracleCommand myOracleCmd = myCon.CreateCommand())
{
myOracleCmd.CommandType = CommandType.StoredProcedure;
myOracleCmd.CommandText = "PRO_COMPANYSEARCH";
myOracleCmd.Parameters.Add("o_result_cur", OracleDbType.RefCursor, ParameterDirection.Output);
myOracleCmd.Parameters.Add("o_sqlcode", OracleDbType.Int32, ParameterDirection.Output);
myOracleCmd.Parameters.Add("o_sqlmsg", OracleDbType.Varchar2, ParameterDirection.Output);
myOracleCmd.Parameters["O_sqlmsg"].Size = 255;
myOracleCmd.ExecuteNonQuery();
var myReader = ((OracleRefCursor)myOracleCmd.Parameters["o_result_cur"].Value).GetDataReader();
dtCompany.Load(myReader);
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다