hyeonga_code
Database_84_PL/SQL_제어 구조_반복 제어문 본문
-- PL/SQL 제어 구조
-- 반복 제어문
-- LOOP 문
-- 명령문이나 명령문 시퀀스를 여러 번 반복합니다.
-- 루프를 종료하려면 EXIT 문을 사용합니다.
-- 사용하는 경우
-- 기본 루프 : 루프 안의 명령문이 적어도 한 번 실행되어야 하는 경우
-- WHILE 루프 : 매번 반복을 시작할 때마다 조건이 평가되어야 하는 경우
-- FOR 루프 : 반복 횟수를 알 수 있는 경우
-- 유형
-- 기본 루프
/*
LOOP
statement1;
. . .
EXIT [WHEN condition];
END LOOP;
*/
-- 전체 조건 없이 반복 작업을 수행합니다.
-- 키워드 LOOP 와 END LOOP 사이에 있는 명령문 시퀀스를 묶습니다.
-- 루프를 시작할 때 이미 조건이 만족하더라도 해당 명령문을 적어도 한 번 이상 실행합니다.
-- EXIT 문이 없는 경우 끝없이 실행됩니다.
-- WHILE 루프
/*
WHILE condition LOOP
statement1;
statement2;
. . .
END LOOP
*/
-- 조건을 기준으로 작업의 반복을 제어합니다.
-- 조건이 TRUE 인 동안 명령문을 반복합니다.
-- 반복이 시작될 대마다 조건이 평가됩니다.
-- 조건이 FALSE 면 루프가 종료됩니다.
-- 루프가 시작할 대 조건이 FALSE 인 경우 반복 작업이 더 이상 실행되지 않습니다.
-- FOR 루프
/*
FOR counter IN [REVERSE]
lower_bound..upper_bound LOOP
statement1;
statement2;
. . .
END LOOP;
*/
-- 횟수를 기준으로 작업의 반복을 제어합니다.
-- 반복 횟수에 대한 테스트를 단축하려는 경우 사용합니다.
-- 카운터는 암시적으로 선언되므로 선언하지 않아도 무관합니다.
-- 기본 루프
-- 국가 코드가 CA이고 도시 이름이 Montreal인 세 개의 새로운 위치 ID를 삽입합니다.
DECLARE
v_countryid locations.country_id%TYPE := 'CA';
v_loc_id locations.location_id%TYPE;
v_counter NUMBER(2) := 1;
v_new_city locations.city%TYPE := 'Montreal';
BEGIN
SELECT MAX(location_id) INTO v_loc_id FROM locations
WHERE country_id = v_countryid;
LOOP
INSERT INTO locations(location_id, city, country_id)
VALUES((v_loc_id + v_counter), v_new_city, v_countryid);
v_counter := v_counter + 1;
EXIT WHEN v_counter > 3;
END LOOP;
END;
/
/*
PL/SQL 프로시저가 성공적으로 완료되었습니다.
*/
-- 결과를 조회합니다.
SELECT * FROM locations;
-- WHILE 루프
-- 국가 코드가 CA이고 도시가 Montreal인 세 개의 새로운 위치 ID를 추가합니다.
-- 카운터가 루프에 지정된 값을 넘어서면 루프를 제어하는 조건이 FALSE로 평가되어 루프가 종료됩니다.
DECLARE
v_countryid locations.country_id%TYPE := 'CA';
v_loc_id locations.location_id%TYPE;
v_new_city locations.city%TYPE := 'Montreal';
v_counter NUMBER := 1;
BEGIN
SELECT MAX(location_id) INTO v_loc_id FROM locations
WHERE country_id = v_countryid;
WHILE v_counter <= 3 LOOP
INSERT INTO locations(location_id, city, country_id)
VALUES((v_loc_id + v_counter), v_new_city, v_countryid);
v_counter := v_counter + 1;
END LOOP;
END;
/
/*
PL/SQL 프로시저가 성공적으로 완료되었습니다.
*/
-- 결과를 조회합니다.
SELECT * FROM locations;
-- FOR 루프
-- 국가 코드가 CA이고 도시 이름이 Montreal인 세 개의 새로운 위치 ID를 삽입합니다.
DECLARE
v_countryid locations.country_id%TYPE := 'CA';
v_loc_id locations.location_id%TYPE;
v_new_city locations.city%TYPE := 'Montreal';
BEGIN
SELECT MAX(location_id) INTO v_loc_id
FROM locations
WHERE country_id = v_countryid;
FOR i IN 1..3 LOOP
INSERT INTO locations(location_id, city, country_id)
VALUES((v_loc_id + i), v_new_city, v_countryid );
END LOOP;
END;
/
/*
PL/SQL 프로시저가 성공적으로 완료되었습니다.
*/
-- 결과를 조회합니다.
SELECT * FROM locations;
'Oracle Database' 카테고리의 다른 글
Database_86_PL/SQL_제어 구조_예외 처리 (0) | 2023.08.31 |
---|---|
Database_85_PL/SQL_제어 구조_CURSOR (0) | 2023.08.31 |
Database_83_PL/SQL_제어 구조_조건 제어문 (0) | 2023.08.31 |
Database_82_PL/SQL_변수 사용, 실행문 작성 (0) | 2023.08.30 |
Database_81_PL/SQL_변수 선언, 스칼라 데이터, 조합 데이터, 참조 데이터, 부울 변수, 바인드 변수, %TYPE, %ROWTYPE (0) | 2023.08.30 |