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();
내 같은 코드는 잘 작동하고 나에게 출력을주고있다.
제 절차가 잘못되었거나 다른 곳에서 도움이된다면 제발 도와주세요. 나는 그 문제를 파악할 수 없다.
ASP 코드가 'log_details'라는 프로 시저를 호출하는 것 같습니다. 당신은 다른 인수 집합을 취하는'branch_details' 프로 시저의 구현을 게시했습니다. –
@JustinCave 잘못된 업로드 죄송합니다. 업데이트 된 질문을 확인하십시오. –
DB에서 실행하면 프로 시저가 결과를 반환하는지 알고 있습니까? –