2013-03-22 3 views
0

asp.net을 사용하여 Oracle 데이터베이스에서 데이터를 가져 오려고하지만 데이터가 테이블에있는 동안 커서에 아무런 출력이 나타나지 않습니다. 다음 저장 프로 시저를 사용하고 있습니다 :오라클 커서에서 데이터를 가져올 수 없습니다

CREATE OR REPLACE PROCEDURE branch_details 
(startIndex in int 
,pageSize in int 
,isSearch in int 
,byName  in int 
,dataDetail in varchar2 
, p_cursor out sys_refcursor) 
AS 
BEGIN 
    IF isSearch=1 THEN 
     IF byName=1 THEN 
      OPEN p_cursor FOR 
      SELECT * 
      FROM (SELECT ROW_NUMBER() OVER(ORDER BY branch_id) 
         AS MyRows 
         , branch_id, branch_name 
         , branch_location, bm_name, bm_contact 
         , bm_email, is_active, max_ua 
         , (SELECT COUNT(branch_id) 
          FROM branch_info 
          WHERE branch_name LIKE 
           '%'|| dataDetail||'%') 
         AS RowNumber 
        FROM branch_info 
        WHERE branch_name LIKE '%'|| dataDetail||'%') 
      WHERE MyRows BETWEEN startIndex 
           AND startIndex+pageSize-1; 
     ELSE 
      OPEN p_cursor FOR 
      SELECT * 
      FROM (SELECT ROW_NUMBER() OVER(ORDER BY branch_id) 
         AS MyRows 
         , branch_id, branch_name, branch_location 
         , bm_name, bm_contact, bm_email, is_active 
         , max_ua 
         , (SELECT COUNT(branch_id) 
          FROM branch_info 
          WHERE branch_id LIKE 
           '%'|| dataDetail||'%') 
         As RowNumber 
        FROM branch_info 
        WHERE branch_id LIKE '%'|| dataDetail||'%') 
      WHERE MyRows BETWEEN startIndex 
          AND startIndex+pageSize-1; 
     END IF; 
    ELSE 
     OPEN p_cursor FOR 
     SELECT * 
      FROM (SELECT ROW_NUMBER() OVER(ORDER BY branch_id) 
         AS MyRows 
        , branch_id, branch_name, branch_location 
        , bm_name, bm_contact, bm_email 
        , is_active, max_ua 
        , (SELECT COUNT(branch_id) 
          FROM branch_info) AS RowNumber 
        FROM branch_info) 
     WHERE MyRows BETWEEN startIndex 
          AND startIndex+pageSize-1; 
    END IF; 
END; 

그리고 다음 asp.net 코드를 사용 : 다른 프로 시저에 대한

List<Paramarray> param = new List<Paramarray>(); 
    param.Add(new Paramarray("@dataDetail", data)); 
    param.Add(new Paramarray("@byName", id?"0":"1")); 
    param.Add(new Paramarray("@isSearch", isSearch?"1":"0")); 
    param.Add(new Paramarray("@startIndex", startIndex==1?startIndex.ToString():Convert.ToString(((startIndex-1)*pageSize)+1))); 
    param.Add(new Paramarray("@pageSize", pageSize.ToString())); 

    _command.Connection = _connection; 
    _command.CommandType = CommandType.StoredProcedure; 
    _command.CommandText = "branch_details"; 
    foreach (Paramarray _param in param) 
    { 
     _parameter = new OracleParameter(_param.name,_param.value); 
     _command.Parameters.Add(_parameter);    
    } 

    _command.Parameters.Add("@p_cursor", OracleDbType.RefCursor).Direction = ParameterDirection.Output; 
    if (_connection.State != ConnectionState.Open) _connection.Open(); 
    _dataReader = _command.ExecuteReader(); 
    dt.Load(_dataReader); 
    if (_connection.State == ConnectionState.Open) _connection.Close(); 

내 같은 코드는 잘 작동하고 나에게 출력을주고있다.

제 절차가 잘못되었거나 다른 곳에서 도움이된다면 제발 도와주세요. 나는 그 문제를 파악할 수 없다.

+0

ASP 코드가 'log_details'라는 프로 시저를 호출하는 것 같습니다. 당신은 다른 인수 집합을 취하는'branch_details' 프로 시저의 구현을 게시했습니다. –

+0

@JustinCave 잘못된 업로드 죄송합니다. 업데이트 된 질문을 확인하십시오. –

+0

DB에서 실행하면 프로 시저가 결과를 반환하는지 알고 있습니까? –

답변

0

나는 당신의 절차가 잘못되었다고 내기하려고합니다. 귀하의 asp.net 코드 괜찮아 보이는 더 많은 정보없이 그것은 나에게 커서가 어떤 데이터를 반환하지 않는 것 같습니다.

절차를 테스트하거나 커서 쿼리 만 테스트 했습니까?

관련 문제