IF문
IF문
DECLARE
grade CHAR(1);
BEGIN
--변수의 초기화
grade := 'B';
IF grade = 'A' THEN
DBMS_OUTPUT.PUT_LINE('Excellent');
ELSIF grade = 'B' THEN
DBMS_OUTPUT.PUT_LINE('Good');
ELSIF grade = 'C' THEN
DBMS_OUTPUT.PUT_LINE('Fair');
ELSIF grade = 'D' THEN
DBMS_OUTPUT.PUT_LINE('Poor');
END IF;
END;
Good
CASE문
CASE문
DECLARE
grade CHAR(1);
BEGIN
grade := 'C';
CASE grade
WHEN 'A' THEN
DBMS_OUTPUT.PUT_LINE('Excellent');
WHEN 'B' THEN
DBMS_OUTPUT.PUT_LINE('Good');
WHEN 'C' THEN
DBMS_OUTPUT.PUT_LINE('Fair');
WHEN 'D' THEN
DBMS_OUTPUT.PUT_LINE('Poor');
ELSE
DBMS_OUTPUT.PUT_LINE('Not Found');
END CASE;
END;
Fair
LOOP문
IF ELSE문
LOOP문
DECLARE
--변수선언
test_number INTEGER;
result_num INTEGER;
BEGIN
test_number := 1;--test_numbers는 여기서 초기화
LOOP
result_num := 2 *test_number; --result_num는 루프를 돌면서 초기화
IF result_num >20 THEN
EXIT; --블록 종료 (break같은 것)
ELSE
DBMS_OUTPUT.PUT_LINE(result_num);
END IF;
test_number :=test_number +1;
END LOOP;
--LOOP 블럭을 빠져나오면 아래 코드를 실행함.
DBMS_OUTPUT.PUT_LINE('프로그램 끝');
END;
2 4 6 8 10 12 14 16 18 20 프로그램 끝
EXIT WHEN을 사용
DECLARE
test_number INTEGER;
result_num INTEGER;
BEGIN
-- 변수 초기화
test_number := 1;
LOOP
result_num := 2 * test_number;
EXIT WHEN result_num > 20; -- 조건체크
DBMS_OUTPUT.PUT_LINE(result_num);
test_number := test_number + 1;
END LOOP;
END;
2 4 6 8 10 12 14 16 18 20
WHILE-LOOP문
DECLARE
test_number INTEGER;
result_num INTEGER;
BEGIN
test_number := 1;
result_num :=0; --초기화를 해준다음 반복문에 들어가야됨.
WHILE result_num < 20 LOOP
result_num := 2*test_number;
DBMS_OUTPUT.PUT_LINE(result_num);
test_number := test_number +1;
END LOOP;
END;
2 4 6 8 10 12 14 16 18 20
FOR..LOOP문
FOR..LOOP 문
DECLARE
test_number INTEGER;
result_num INTEGER;
BEGIN
FOR test_number IN 1..10 LOOP
result_num :=2 * test_number;
DBMS_OUTPUT.PUT_LINE(result_num);
END LOOP;
END;
2 4 6 8 10 12 14 16 18 20
FOR..LOOP 문 (IN REVERSE)
FOR..LOOP 문 (IN REVERSE)
DECLARE
test_number INTEGER;
result_num INTEGER;
BEGIN
FOR test_number IN REVERSE 1..10 LOOP
result_num :=2 * test_number;
DBMS_OUTPUT.PUT_LINE(result_num);
END LOOP;
END;
20 18 16 14 12 10 8 6 4 2
CURSOR
CURSOR(커서)
- 쿼리에 의해 반환되는 결과는 메모리 상에 위치하게 되는데 PL/SQL에서는 바로 커서(CURSOR)를 사용하여 이 결과집합에 접근할 수 있다.
DECLARE
--커서 선언 : 커서에 이름을 주고, 이 커서가 접근하려는 쿼리를 정의
CURSOR emp_csr IS --emp_csr 이 result set 즉 결과집합이다.
SELECT empno
FROM emp
WHERE deptno = 10;
emp_no emp.empno%TYPE;--자료형을 읽어오게 하는법
BEGIN
--커서열기(읽기) : 커서로 정의된 쿼리를 실행하는 역할
OPEN emp_csr;
LOOP
FETCH emp_csr INTO emp_no; --emp_csr에 접근해서 emp_no에 할당
--%NOTFOUND: 커서에서만 사용 가능한 속성인데 더이상 패치(할당)할 로우가 없음을 의미
EXIT WHEN emp_csr%NOTFOUND; --더이상 읽을게 없다면 블럭을 빠져나감.
DBMS_OUTPUT.PUT_LINE(emp_no);
END LOOP;
--커서닫기: 패치 작업이 끝나면 사영된 커서를 닫는다.
CLOSE emp_csr;
END;
7782 7839 7934
'쌍용교육(JAVA) > PL\SQL' 카테고리의 다른 글
쌍용교육 -PL/SQL 수업 22,23일차 PL/SQL 서브프로그램(실습문제,생성된 함수 확인하기,프로시저,실습문제,book 테이블 만들고 연습,패키지, 트리거) (1) | 2024.04.13 |
---|---|
쌍용교육 -PL/SQL 수업 21일차 PL/SQL 서브프로그램 (0) | 2024.04.13 |
쌍용교육 -PL/SQL 수업 21일차 (레코드) (0) | 2024.04.12 |
쌍용교육 -PL/SQL 수업 21일차 콜렉션(1.varray2.중첩 테이블3.Associative array(index-by table)4.콜렉션을 데이터베이스 객체로 생성) (0) | 2024.04.12 |
쌍용교육 -PL/SQL 수업 21일차 변수와상수(1.변수2.상수3.%TYPE4.%ROWTYPE) (0) | 2024.04.12 |