=================================
=================================
=================================
커서문에서 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 를 둔다면 그 쿼리문의 결과값들 모두를 출력하게 됨을
기억하자.더 간단한 코드를 작성할수 있다.
=================================
=================================
=================================
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
=================================
=================================
=================================
'프로그래밍 관련 > DB SQL' 카테고리의 다른 글
사용자 로그인 보안과 스키마 (0) | 2020.09.11 |
---|---|
DB - (VS,MFC)C++, JAVA 프로그래밍 데이터베이스(DB) 연동 관련 (0) | 2020.09.11 |
SQLite 데이터베이스, 쿼리문 관련 (0) | 2016.06.16 |
[MS-SQL] MS SQL local 접속 해결 과정 (0) | 2015.12.23 |
안드로이드 실전 개발 - SQLite (0) | 2014.04.09 |