2012-12-01 5 views
0

오라클 절차에서 select 문을 작성할 수 없습니다. 이걸 만들 수있게 도와주세요. 이제 프로 시저에서 insert, update.delete 문을 만들지 만 select 문을 만들 수 없습니다. 커서를 사용하여 select 문을 작성하는 데 도움을주십시오.오라클 절차에서 명세서 선택

c_dbuser OUT SYS_REFCURSOR 

ELSIF (TYPE_ =1) THEN 

    OPEN c_dbuser FOR 
    SELECT * FROM tbl_discount_master ; 
    CLOSE c_dbuser; 

END IF; 

call procedure_name(xx,xx,xx,1); 

어떻게 호출 절차 문을 사용하여 값을 가져올 수 있습니까?

답변

0

select와 insert/update/delete의 차이점은 하나 이상의 변수 또는 행 유형 변수 중 일부 구조를 선택해야한다는 것입니다.

가능한 빨리 Explicit 커서를 사용하지 마십시오.보다 빠르고 덜 간결하고 오류가 발생하지 않는 암시 적 커서가 좋습니다. 예.

for cur_my_query in 
    select column1, 
     column2, 
     ... 
    from ... 
    where ... 
loop 
    refer here to cur_my_query or my_query.column1 etc 
end loop 
1

다른 제안 사항 외에도 정확하게 하나의 행을 가져올 때이 솔루션이 있습니다.

DECLARE 
    myvar1 mytable.mycolumn1%TYPE; 
    myvar2 mytable.mycolumn2%TYPE; 
BEGIN 
    SELECT mycolumn1, mycolumn2 
     INTO myvar1, myvar2 
     FROM mytable 
    WHERE …; 
END; 

에는 선택된 로우 ( NO_DATA_FOUND)가 존재하지 않는 경우 예외를 발생 또는 하나 이상의 행 ( TOO_MANY_ROWS)가 있으면된다.