나는 SQL Server에 익숙해 져 오랜 시간 동안이 문제로 어려움을 겪고 있습니다. 다음 코드를 가지고 OracleDbType이 정확하고 매개 변수에 전달되는 실제 값이 일치하는지 확인했습니다. 내 문제는 반환 값으로 인해 해결할 수 있다고 생각합니다. 그게 행 수를 줄뿐입니다. 반환 매개 변수가 맨 위에 설정되어야한다는 어딘가를 읽었습니다. 라인 1, 열 7 :
ORA-06550 u0027 (으) \ u0027INSERT_REC \에 잘못된 번호 또는 전화에 인수 유형 : \ 고정 이하 여신/SQL : 문 무시 내가 무엇입니까 특정 오류ASP.NET 및 Oracle Data Provider를 사용하여 Oracle Stored Proc를 처리하는 방법은 무엇입니까?
이PLS-00306 말한다
저장된 절차는 다음과 같이
PROCEDURE INSERT_REC
(
A_MILL_CENTER IN GRO_OWNER.MOVEMENT.MILL_CENTER%TYPE, --# VARCHAR2(10)
A_INGREDIENT_CODE IN GRO_OWNER.MOVEMENT.INGREDIENT_CODE%TYPE, --# VARCHAR2(50)
A_FEED_CODE IN GRO_OWNER.MOVEMENT.FEED_CODE%TYPE, --# VARCHAR2(30)
--# A_MOVEMENT_TYPE should be ‘RECEIPT’ for ingredient receipts
A_MOVEMENT_TYPE IN GRO_OWNER.MOVEMENT.MOVEMENT_TYPE%TYPE, --# VARCHAR2(10)
A_MOVEMENT_DATE IN VARCHAR2, --# VARCHAR2(10)
A_MOVEMENT_QTY IN GRO_OWNER.MOVEMENT.MOVEMENT_QTY%TYPE, --# NUMBER(12,4)
--# A_INVENTORY_TYPE should be ‘INGREDIENT’ or ‘FINISHED’
A_INVENTORY_TYPE IN GRO_OWNER.MOVEMENT.INVENTORY_TYPE%TYPE, --# VARCHAR2(10)
A_CREATE_USERID IN GRO_OWNER.MOVEMENT.CREATE_USERID%TYPE, --# VARCHAR2(20)
A_RETURN_VALUE OUT NUMBER --# NUMBER(10,0)
);
내 코드는 다음과 같습니다
for (int i=0; i < theData.Length -1; i+=3)
{
//3 items hardcoded for now
string millCenter = "0010260510";
string movementType = "RECEIPT";
string feedCode = "test this";
string userID = "GRIMMETTM";
string inventoryType = "INGREDIENT"; //set to FINISHED for feed stuff
string movementDate = theData[i];
string ingCode = System.Text.RegularExpressions.Regex.Match(
theData[i + 1], @"^([0-9]*)").ToString();
//int pounds = Convert.ToInt32(theData[i + 2].Replace(",", ""));
int pounds = 100;
//setup parameters
OracleParameter p9 =
new OracleParameter("A_RETURN_VALUE", OracleDbType.Int32, 30);
p9.Direction = ParameterDirection.ReturnValue;
oraCmd.Parameters.Add(p9);
OracleParameter p1 =
new OracleParameter("A_MILL_CENTER", OracleDbType.Varchar2, 10);
p1.Direction = ParameterDirection.Input;
p1.Value = millCenter;
oraCmd.Parameters.Add(p1);
OracleParameter p2 =
new OracleParameter("A_INGREDIENT_CODE", OracleDbType.Varchar2, 50);
p2.Direction = ParameterDirection.Input;
p2.Value = ingCode;
oraCmd.Parameters.Add(p2);
OracleParameter p3 =
new OracleParameter("A_FEED_CODE", OracleDbType.Varchar2, 30);
p3.Direction = ParameterDirection.Input;
p3.Value = feedCode;
oraCmd.Parameters.Add(p3);
OracleParameter p4 =
new OracleParameter("A_MOVEMENT_TYPE", OracleDbType.Varchar2, 10);
p4.Direction = ParameterDirection.Input;
p4.Value = movementType;
oraCmd.Parameters.Add(p4);
OracleParameter p5 =
new OracleParameter("A_MOVEMENT_DATE", OracleDbType.Varchar2, 10);
p5.Direction = ParameterDirection.Input;
p5.Value = movementDate;
oraCmd.Parameters.Add(p5);
OracleParameter p6 =
new OracleParameter("A_MOVEMENT_QTY", OracleDbType.Int32, 12);
p6.Direction = ParameterDirection.Input;
p6.Value = pounds;
oraCmd.Parameters.Add(p6);
OracleParameter p7 =
new OracleParameter("A_INVENTORY_TYPE", OracleDbType.Varchar2, 10);
p7.Direction = ParameterDirection.Input;
p7.Value = inventoryType;
oraCmd.Parameters.Add(p7);
OracleParameter p8 =
new OracleParameter("A_CREATE_USERID", OracleDbType.Varchar2, 20);
p8.Direction = ParameterDirection.Input;
p8.Value = userID;
oraCmd.Parameters.Add(p8);
//open and execute
oraConn.Open();
oraCmd.ExecuteNonQuery();
oraConn.Close();
@Matt : 코드를 다시 포맷하여 가로 스크롤 막대가 생기지 않도록하고 PL/SQL 모양을 유효하게 만들었습니다. 제 변경 사항에 동의하는지 확인하십시오. –
중요한 정보가 빠졌습니다 : 저장된 proc에 대한 호출은 for 루프에 있습니다. 첫 번째 실행이 완료되고 두 번째 실행이 실패합니다. 루프를 반영하도록 위의 코드를 업데이트합니다. – Matt