삭제에 대한 cursor 의 설명은 잘 이해가 가질 않는군요.
Cursor 는 readonly 이므로 삭제 작업은 할수가 없습니다. 어느 책인지 몰라도 잘못 적힌 것 같습니다.
그리고 모든 자료중에서 세번째부터 여섯번째까지만 자료를 출력하고 싶다. 이럴 경우에는 사실 limit 구문이 존재하지 않는한 cursor 를 사용할 수 밖에 없습니다.
begin work;
declare trans1 cursor for select * from table_name order by age;
fetch 3 from trans1;
fetch relative 3 from trans1;
close trans1;
end work;
이런식의 구문이 되겠지요.
최근 들어 MySQL 과 PostgreSQL 의 경우 select 구문에 limit 절을 지원합니다. 그래서 이와 같은 구문을 다음과 같이 적어 줌으로서 해결을 할수도 있습니다.
select * from table_name order by age limit 3 offset 3;
아래 구문이 훨씬 깨끗하긴 깨끗하죠. 하지만 앞의 글을 볼려면 또 다시 select 를 해야만 합니다. 이럴 경우에는 cursor 가 훨씬 편한 상황이 되겠지요.
방법을 잘 아시고, 용도에 대해서는 나름대로 활용도를 찾아 보시기 바랍니다. 많은 곳이 있답니다. :/)
>>이근호 님께서 쓰시길<<
:: 안녕하세요. 지난번에 커서에 대해서 질문한 사람입니다.
:: 다름이 아니라 커서에 대한 개념을 알려고 어느 님이 말씀하셨듯이.. SQL 책을 뒤졌는데 궁금증이 가
:: 시지 않네요. 거기에는 이렇게 써 있더군요
::
:: 커서에 대한 이해를 쉬게 하기 위해 다음에 대해 생각해 보자.
::
:: 만약 어떤 테이블에 세 번째 행이 문제가 있어 지우고 싶다면 일반적인 쿼리 문장으로 어떻게 작성할
:: 수 있을까?? 이런 경우 일반 쿼리문으로는 수행할 방법이 없으며, 커서를 이용해야 한다. 사원 별 판
:: 매 데이타에 대해 사원별 판매 상품 상위 3개만을 가져오는 쿼리를 수행해야 한다면 어떻게 처리할 수
:: 있을 까?
::
:: 이러한 때 커서를 ...쓴다고 하는데....중요한건 그냥 질의문만 날리면 되는게 아닌지요... 그냥 selec
:: t * from 테이블 이름 이런식으로 하던지
::
:: delete * from 테이블 이름 으로 삭제를 하든지....그렇게는 안되나요???3번째 행과 같은 옵션 때문에
:: 불가능 한것인지...알고 싶습니다..
::
:: 그리고 그런경우...커서는 어떻게 해결을 하는지도 알고 싶습니다.
|