프로그래밍 관련/DB SQL

SQL for문 관련 while문 관련

AlrepondTech 2020. 9. 11. 00:24
반응형

 

 

 

 

=================================

=================================

=================================

 

 

 

 

 

출처: http://blog.daum.net/_blog/BlogTypeView.do?blogid=0HGqf&articleno=5918846&categoryId=399028®dt=20101212140058#ajax_history_home

 

커서문에서 FOR LOOP 문을 쓰면더 간단한 코드를 작성할수 있다.

커서를 열고 닫을 필요없이 또한 FETCH과정또한 필요없다.

 

FOR 문에서 IN 키워드 이후에 CURSUR을 두면 SELECT문을 두었을때와 같이  반환된 레코드가 있는 동안

LOOP를 돌기 떄문이다.

 

 

일단 앞포스팅에서 이용한 CURSOR 에서 사용한 예제를 FOR LOOP 문으로 바꾸어 보자. 

http://blog.daum.net/kwonmc/5918845 - CURSOR 예제

 

 

CREATE OR REPLACE PROCEDURE INFO_HIREDATE
(P_YEAR IN CHAR)
 IS
 CURSOR EMP_CUR IS
           SELECT FIRST_NAME, jOB_ID
           FROM EMPLOYEES
           WHERE TO_CHAR(HIRE_DATE,'YYYY')=P_YEAR;
 

 
 BEGIN
        
  
           DBMS_OUTPUT.PUT_LINE( LPAD('-', 20, '-') );
           DBMS_OUTPUT.PUT_LINE('이름 직위');
           DBMS_OUTPUT.PUT_LINE( LPAD('-', 20, '-') );
            
           FOR i IN  EMP_CUR  LOOP 
             
             -- IN뒤에 커서가 SELECT문과 같기 때문에 FETCH될 데이터가
             --   있는 동안은 계속 LOOP가 실행된다.
           
             DBMS_OUTPUT.PUT_LINE(i.FIRST_NAME||' ' ||i.JOB_ID);
           END LOOP;

  
END;

 

 

FOR 문에서 IN 후에 SELECT 문이나 CURSOR 를 둔다면 그 쿼리문의 결과값들 모두를 출력하게 됨을

기억하자.더 간단한 코드를 작성할수 있다.

 

 

 

=================================

=================================

=================================

 

 

 

반응형

 

 

728x90

 

 

 

 

출처: http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=10205&docId=69756931&qb=c3FsIGZvcuusuA==&enc=utf8§ion=kin&rank=3&search_sort=0&spq=0&pid=g9qhnc5Y7vdssvkSe0Zssc--015838&sid=T9qYPOJt2k8AADbVF3k

 

 

FOR i=row TO This.RowCount()
 ls_tag1 = This.GetItemString(i, "od_tag")
 IF ls_tag1 <> 'Z' THEN ls_tag1 = 'A'
 
IF ls_tag = ls_tag1 THEN This.SetItem(i, "cb_cust", ls_code) 

NEXT

 

위에는 품목이있으면 맨위에 품목별 cb_cust(거래처)를 구하게되면

포문을 돌려 품목있는건 전부 처음입력한 cb_cust 를 동일하게 넣어주는작업인데요.

 

만약 위에서 어떤결과값을주고 포문을 중지시킬때..예를들어

이미 cb_cust가등록되어있다면...(if cb_cust > 0 쯤이 되겠지요..) 포문을 중간에

멈추는..건 어떤게 있을까요.. if cb_cust > 0 then  break 하니까 안되네요..;

 

요점은..이미 cb_cust(거래처)에 정보가 있다면 포문을 멈추고..

정보가 없다면 계속 포문을돌려서 cb_cust에 처음입력한 거래처를 동일하게

넣어주고 싶습니다.

 

초보입니다.쉽게 설명해주시면 정말 감사하겠습니다.

남은 하루도 마무리잘하시구요 ^^ 

의견 쓰기

질문자 채택된 경우, 추가 답변 등록이 불가합니다.

re: sql for ~ next 문 질문드립니다.

isigma답변채택률87.7%2006.10.19 18:21

답변 추천하기

질문자 인사

감사합니다 ^^

Loop 문 안에는 Continue하고 Exit로 반복에 대해 컨트롤 할수 있습니다.

 

파워빌더 도움말에 Continue를 조회해 보시면

 

integer A=0, B=0, Count

FOR Count = 1 to 100
  A = A + 1
  IF Count > 15 THEN CONTINUE
  B = B + 1

NEXT

 

count 가 1부터 100까지 도는 동안 a는 1씩증가하지만

b는 15이상이 되었을때 위에 있는 coutinue때문에 for으로 다시 복귀 합니다.

 

이미 거래처가 등록이 되어 있다면 입력을 하지 말고 넘어가라 라고 표현하려면

 

if cb_cust > 0   then continue 하시면 되겠네요.

 

만약  if cb_cust > 0 then exit 하시면 for문을 완전히 빠져 나갑니다.

 

 

=================================

=================================

=================================

 

 

 

출처: http://www.sqler.com/?mid=bSQLQA&page=7&document_srl=340271

 

어렵다..이구구

 

for i =0 to 2

  Response.write i &"<br>"

   for j=i*3 to i*3+3

      Response.write j &"<br>"

  next

next

 

이걸

while 문을 써서 SP로 만들어야 하는데

잘 안되여

 

목록

엮인글 주소 : http://www.sqler.com/index.php?document_srl=340271&act=trackback&key=8ab

2011.01.27 18:21:10 (*.253.27.186)

zofarnim

declare @i tinyint, @j tinyint, @k tinyint
 set @i=0

 WHILE (@i < 2)
 BEGIN
  set @j=@i*3
  set @k=@j+3
  print '@i='+convert(varchar,@i
  while (@j <= @k)
  begin
   print '@j='+convert(varchar,@j)
   set @j = @j + 1
  end 
  set @i = @i + 1
 END

 

 

=================================

=================================

=================================

 

 

반응형