2013-07-18 1 views
0

의 잘못된 번호저장 프로 시저/SYS_REFCURSOR -이 Oracle 저장 프로 시저를 (이 테스트 예제)이 있음을 감안할 때 인수

PROCEDURE dave IS 
dave_data SYS_REFCURSOR; 
v_col1 NUMBER; 
v_col2 VARCHAr2(100); 
BEGIN 
DBMS_OUTPUT.ENABLE(2000000); 
dave_truck_ticket.get_report_data(dave_data,1234,'01-JUL-13','15-Jul-13'); 
LOOP 
    FETCH dave_data INTO v_col1, v_col2; 
    EXIT WHEN dave_data%NOTFOUND; 
    DBMS_OUTPUT.PUT_LINE(v_col1||' - '||v_col2); 
END LOOP; 
CLOSE dave_data; 
END; 

그리고 YES 오류는 저장 프로 시저에있을 수 있습니다 - 난 적이 없기 때문에 오라클은

나는이 방법으로 커서 (dave_data)에서 데이터를 읽으려고 해요 .. 전 감동 :

O.OracleConnection objConn = new O.OracleConnection("DATA SOURCE=XXXDEV.WORLD;USER ID=XXXXXX;PASSWORD=XXXXXX;"); 

    O.OracleCommand objCmd = new O.OracleCommand(); 

    objCmd.Connection = objConn; 

    objCmd.CommandText = "DAVE"; 

    objCmd.CommandType = System.Data.CommandType.StoredProcedure; 

    O.OracleParameter cursor = new O.OracleParameter("dave_data", O.OracleDbType.RefCursor); 
    cursor.Direction = System.Data.ParameterDirection.Output; 

    objCmd.Parameters.Add(cursor); 

    try 
    { 

    objConn.Open(); 

    O.OracleDataReader objReader = objCmd.ExecuteReader(); 
    objReader.Read(); 
    objReader[0].ToString(); 

내 O. 기준은 다음과 같이 지정됩니다 O를 사용하여 = Oracle.DataAccess.Client; (버전 4.112.3.0)

나는 (가 ExecuteReader()가 바로 후)입니다 나타나는 오류 : Oracle error

무엇보다 화나는 것은 내가 서버 탐색기에서 예제를 실행할 수 있다는 것입니다 - 그리고 그냥 작동 벌금!

은 친절하고 나는 귀족되는거야 여기서 지적 해주십시오 ....

+3

proc가 엉망입니다. proc의 매개 변수로 참조 커서를 가져 와서 열어야합니다. 루프/가져 오기를 수행 할 필요가 없습니다. 이것이 귀하의 고객 코드가하는 일입니다. 여기 링크가 있습니다 (C# tho가 아닙니다) - http://www.oracle-base.com/articles/misc/using-ref-cursors-to-return-recordsets.php – OldProgrammer

+0

왜 직접'get_report_data'를 호출하지 않습니까? ? 래퍼 프로 시저의 핵심은 무엇입니까? –

답변

0

문제는 오라클 절차, 그리고 C# 코드로입니다. 다른 개발자로부터 오라클 프로 시저를 받았고, 우리는 전선을 교차 시켰습니다. 일단 참조 커서가있는 OUT 매개 변수를 작성하면 정상적으로 작동합니다. +1 올드 프로그래머 - 당신이 대답을 당신의 코멘트를 만들었어야!

관련 문제