2017-01-19 4 views
0

C# 코드에서 Oracle에서 PACKAGE.PROCEDURE()를 호출하려고합니다. 이 간단한 예제에서 나는 프로 시저 호출에서 하나 개의 값을 얻을해야하지만, 내가 할 모든 오류입니다 :C# 코드에서 오라클 프로 시저를 호출하는 방법

다음과 같은 절차가 선언

wrong number or types of arguments in call to 'RETURN_NUM'

:

PROCEDURE return_num(xNum OUT NUMBER) AS 
    BEGIN 
    xNum:= 50; 
    dbms_output.put_line('hello world ' || xNum); 
    END; 

C# 코드 :

Oraclecon.Open(); 
        OleDbCommand myCMD = new   OleDbCommand("TEST.return_num", Oraclecon); 
        myCMD.CommandType = CommandType.StoredProcedure; 
        myCMD.Parameters.Add("xNum", OleDbType.Numeric); 

        OleDbDataReader myReader; 
        myReader = myCMD.ExecuteReader(); 

어떤 사람이 내가 잘못하고있는 것을 지적 할 수 있습니까? 내가 그 접근 할 수있는 방법

TYPE r_interface_data IS RECORD 
    (
    object_id    VARCHAR2(16),  
    obj_type    VARCHAR2(32) 
    ); 

    TYPE t_interfase_data IS TABLE OF r_interface_data; 

: 그런 다음 실제 시나리오에서 나는 같은 사용자 정의 형식에서 값의 집합을 반환하는 프로 시저를 호출하고 싶습니다. 감사!

UPDATE : 내 특정 경우에는 내가이 종료 업 나는 당신이 멀리 생각하지 않는 다음과 같은 방법

using (OleDbCommand cmd = new OleDbCommand("PACKAGE.procedure_name")) 
       { 
        cmd.CommandType = CommandType.StoredProcedure; 

        SqlManager sqlManager = new SqlManager(); 
        return sqlManager.GetDataSet(cmd); 
       } 
+0

업데이트 : 매개 변수의 방향을 OUT (아래보기 코드)로 지정하면 코드가 컴파일됩니다. 하지만 아무 데이터도받지 못했습니다 ... 'myCMD.Parameters.Add ("xNum", OleDbType.Numeric) .Direction = ParameterDirection.Output; ' 아이디어가 있으십니까? –

답변

2

을하고 ... 이것을 시도 :

OracleCommand cmd = new OracleCommand("return_num", Oraclecon); 
cmd.Parameters.Add(new OracleParameter("xNum", OracleDbType.Decimal, 
    ParameterDirection.Output)); 
cmd.CommandType = CommandType.StoredProcedure; 

cmd.ExecuteNonQuery(); 
OracleDecimal d = (OracleDecimal)cmd.Parameters[0].Value; 
double result = d.ToDouble(); 

result 이제 프로 시저의 out 매개 변수가 포함됩니다.

당신의 문제는 저장 프로 시저에 DbDataReader을 사용하려한다는 것입니다. DbDataReader은 검색어 용입니다.

또한 ODP.net을 사용했는데, Ole을 사용하고 있었거나 문제에 기여하지 않았을 수도 있습니다.

+0

답장을 보내 주셔서 감사합니다. @Hambone. 내 특별한 경우에 나는 다음과 같은 접근법을 사용하여 끝났다 ... 업데이트를 보아라. –