2011-01-14 4 views
0

ODP.NET 2 Day + 개발자 가이드를 읽지 못했지만이 문제는 정말 분실했습니다. 함수 정의 (패키지에 저장 됨)를 제공했지만 데이터 셋을 캐스팅해야하는지 또는 함수를 전달해야하는지 이해하지 못합니다. 다음은 함수 정의는 다음과 같습니다ODP.NET과 데이터 세트를 사용하여 데이터를 삽입하는 Oracle 함수를 어떻게 호출합니까? (특정 예)

여기
FUNCTION ins (
rec_data IN OUT schema.table%ROWTYPE, 
p_rowid OUT ROWID, 
p_execution_ts IN schema.table.update_ts%TYPE) 
RETURN NUMBER 

우리가 한 일입니다 (아무것도하지 않는 한) :

// inserts data 

public void insertData(DataSet Data) 
{ 
string connStr = "DATA SOURCE=someValidConnString"; 
OracleConnection conn = new OracleConnection(connStr); 
string rowID = String.Empty; 
Int32 rtnVal = 0; 
try 
{ 
conn.Open(); 
OracleCommand insCmd = new OracleCommand("PACKAGE.ins", conn); 
insCmd.CommandType = CommandType.StoredProcedure; 
OracleParameter outParam2 = new OracleParameter("retVal", OracleDbType.Varchar2,  rtnVal, 

ParameterDirection.ReturnValue); 
insCmd.Parameters.Add(outParam2); //return value 
OracleParameter inParam1 = new OracleParameter("rec_data", OracleDbType.NVarchar2,  dsACCTData.Tables 

[0].Rows[0], ParameterDirection.InputOutput); 
OracleParameter outParam = new OracleParameter("p_rowid", OracleDbType.Varchar2, rowID, 

ParameterDirection.Output); 
OracleParameter inParam2 = new OracleParameter("p_execution_ts", OracleDbType.Date, 

Oracle.DataAccess.Types.OracleDate.GetSysDate(), ParameterDirection.Input); 
insCmd.Parameters.Add(inParam1); //first in out parameter 
insCmd.Parameters.Add(outParam); //second out parameter 
insCmd.Parameters.Add(inParam2); //third in parameter 


insCmd.ExecuteNonQuery(); 
conn.Close(); 

} 
catch (OracleException ee) 
{ 
throw ee; 
} 
finally 
{ 
conn.Dispose(); 

} 
} 

나는 이것이 VRY 특정 질문에 알고하지만 난 정말 잃었어요. 오라클 함수가 작동한다고 가정 해 봅시다.이 경우 ODP.NET을 사용하여 올바르게 호출하는 법을 모릅니다.

도움을 주셔서 감사합니다.

편집 :

ORA-06550 : 줄 1, 열 15 : PLS-00306 : 잘못된 번호 또는 ORA-06550 'INS'에 대한 호출에서 인수의 종류 : 1 호선 여기에 오류 메시지는 열 7 : PL/SQL : 문 무시

종류와 관련, 복어

+0

받고있는 오류를 게시 할 수 있습니까? – Harrison

+0

네, 사과드립니다. – Fugu

답변

1

어쩌면이 도움이 될 수 :

http://www.c-sharpcorner.com/UploadFile/john_charles/CallingOraclestoredproceduresfromMicrosoftdotNET06222007142805PM/CallingOraclestoredproceduresfromMicrosoftdotNET.aspx

나는 동일한 대답을 찾고 있는데, 뭔가 발견했다고 생각합니다. 두 번째 행에 출력 변수의 예가 있습니다.

objCmd.Parameters.Add("pin_deptno", OracleType.Number).Value = 20; 
objCmd.Parameters.Add("pout_count", OracleType.Number).Direction = ParameterDirection.Output; 

그 링크가 좋을 것입니다.

감사합니다, M

1

모든 것이 좋게 보입니다. 하지만 모든 속성 이름과 속성 유형을 확인해야합니다. 당신의 예에서

잘못된 데이터 유형 OracleDbType.Varchar2 때문에 (오라클 기능 정의) 함수의 반환 번호

OracleParameter outParam2 ("RETVAL"= 새로운 OracleParameter, OracleDbType.Varchar2, rtnVal, 이 ParameterDirection.ReturnValue);

insCmd.Parameters.Add (outParam2); // 반환 값