2009-11-03 4 views
0

oracle에 저장 프로 시저를 만들었습니다.
내 asp.net 코드를 통해 호출하고 있습니다.저장 프로 시저의 반환 값을 얻는 방법?

PROCEDURE prc_GetNewQuestionNo(iNextQuestionNo IN OUT NUMBER) 
IS 
    iQuestionNo NUMBER ; 

BEGIN 
    Select MAX(QUESTIONNO)+ 1 INTO iQuestionNo 
    from tblIFFCOQUESTIONMASTER; 
    iNextQuestionNo:=iQuestionNo; 
END prc_GetNewQuestionNo; 

내가 asp.net에 전화 해요 : :
절차는

<Connection> 
    com.CommandType = CommandType.StoredProcedure; 
       com.CommandText = StoredProcedures.GET_NEW_QUESTION_NO; 
       com.Parameters.Add(new OracleParameter("iNextQuestionNo", OracleType.Number)).Direction = ParameterDirection.InputOutput; 

       adp = new OracleDataAdapter(com); 
       ds = new DataSet(); 
       adp.Fill(ds); 

어떻게 반환 값을 얻을?

+3

을 할 수 있지만,이 PL/SQL의 끔찍한 비트의

db.ExecuteNonQuery(cmd); iNextQuestionNo= (decimal?)cmd.Parameters[0].Value; 

희망을 니펫을. 두 세션이 동시에 전화를하면 같은 대답을 얻고 충돌합니다. 오라클 시퀀스를 사용해야합니다. –

+0

이 절차를 사용하여 기본 키를 생성하지 않기를 바랍니다. http://asktom.oracle.com/pls/asktom/f?p=100:11:0:::P11_QUESTION_ID:3379873654938 –

답변

1

기능을 사용하는 것이 더 좋지 않습니까? 그냥 좋아 :

create function prc_GetNewQuestionNo(iNextQuestionNo IN NUMBER) 
return number AS 
    iQuestionNo NUMBER ; 
BEGIN 
    Select MAX(QUESTIONNO)+ 1 INTO iQuestionNo from tblIFFCOQUESTIONMASTER; 
    return iQuestionNo; 
END prc_GetNewQuestionNo; 
+0

예를 참조하십시오. 그러나 OUT 매개 변수도 사용할 수 있습니다. – Ishita

1

내가 거기 회신 폴에 의견/질문을 추가하고 싶었다, 그러나 나는 couldnt한다. 내 무지를 사과하지만 SQL Server를 사용하여 격리 수준의 직렬화가 가능한 SQL Server를 저장하고 있다면 트랜잭션/저장 프로 시저가 잠길 때 모든 SQL 테이블을 마지막으로 잠그지 않아 동시성에 문제가 없습니다. 나쁜 행동인가요?

+0

이 질문은 SQL Server가 아닌 Oracle이라는 태그가 지정되었습니다. 오라클은 (기본적으로) 확장 가능한 애플리케이션을위한 좋은 방법 인 읽기를 직렬화하지 않습니다. WW는 그들의 코멘트에서 기본 키를 생성하는 최선의 방법을 설명했습니다. 이전 링크를 참조한 토론을 보려면이 링크를 참조하십시오 ... http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:4343369880986 –

+0

감사합니다. Paul 정직한 질문, 당신이 처음에 말한 것에 의문을 가지고 있습니다. – GDalma

+0

@G 달마 - 이것은 다른 사람들의 실수로부터 배우기에 가장 좋은 질문을 할 수있는 적절한 장소입니다. :) –

0

나는 문제를 잘 .. 다음은 스칼라 값이 아닌 전체 레코드 집합을 원하는

   adp = new OracleDataAdapter(com); 
       ds = new DataSet(); 
       adp.Fill(ds); 

것 같아요? 그래서 그 대신이

// 일부 코드와 같은 시도는이 귀하의 질문에 대한 대답하지

관련 문제