의 잘못된 번호저장 프로 시저/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()가 바로 후)입니다 나타나는 오류 :
무엇보다 화나는 것은 내가 서버 탐색기에서 예제를 실행할 수 있다는 것입니다 - 그리고 그냥 작동 벌금!
은 친절하고 나는 귀족되는거야 여기서 지적 해주십시오 ....
proc가 엉망입니다. proc의 매개 변수로 참조 커서를 가져 와서 열어야합니다. 루프/가져 오기를 수행 할 필요가 없습니다. 이것이 귀하의 고객 코드가하는 일입니다. 여기 링크가 있습니다 (C# tho가 아닙니다) - http://www.oracle-base.com/articles/misc/using-ref-cursors-to-return-recordsets.php – OldProgrammer
왜 직접'get_report_data'를 호출하지 않습니까? ? 래퍼 프로 시저의 핵심은 무엇입니까? –