DECLARE
i NUMBER := 0;
BEGIN
-- LOOP
LOOP
i:=i+1;
EXIT WHEN i > 10;
dbms_output.put_line(i);
END LOOP;
-- WHILE
WHILE i< 10 LOOP
i:= i+1;
dbms_output.put_line(i);
END LOOP;
-- FOR
FOR i IN 1..10 LOOP
dbms_output.put_line(i);
END LOOP;
END;
SELECT 열1, 열2, .., 열 n
INTO 변수1, 변수2.., 변수 n
FROM ...
DECLARE
V_DEPT_ROW DEPT%ROWTYPE;
BEGIN
SELECT DEPTNO, DNAME, LOC INTO V_DEPT_ROW FROM DEPT
WHERE DEPTNO = 40;
DBMS_OUTPUT.PUT_LINE('DEPTNO:' || V_DEPT_ROW.DEPTNO);
END;
DECLARE
CURSOR 커서 이름 IS SQL문; -- 커서 선언
BEGIN
OPEN 커서 이름; -- 커서 열기
FETCH 커서 이름 INTO 변수 -- 커서로부터 읽어온 데이터 사용
CLOSE 커서 이름; -- 커서 닫기
END;
FOR 루프 인덱스 이름 IN 커서 이름 LOOP
결과 행별로 반복 수행할 작업;
END LOOP;
DECLARE
-- 명시적 커서 선언
CURSOR c1 IS
SELECT DEPTNO, DNAME, LOC
FROM DEPT;
BEGIN
-- 커서 FOR LOOP 시작(자동 Open, Fetch, Close)
FOR c1_rec IN LOOP
DBMS_OUTPUT.PUT_LINE('DEPTNO:' || c1_rec.DEPTNO);
END LOOP;
END;
DECLARE
cnt NUMBER:=0;
e_user_exception EXCEPTION; -- 예외 정의
BEGIN
SELECT COUNT(*) INTO cnt
FROM employees
WHERE department_id = 40;
IF cnt < 5 THEN
RAISE e_user_exception;
END IF;
EXCEPTION
WHEN e_user_exception THEN
dbms_output.put_line('인원이 너무 적어요');
END;
CREATE [OR REPLACE] PROCEDURE 프로시저 이름
IS | AS
선언부
BEGIN
실행부
EXCEPTION
예외 처리부
END [프로시저 이름];
create or replace PROCEDURE JOB_UPDATE(p_job_id in JOBS2.JOB_ID%TYPE, p_job_title in JOBS2.JOB_TITLE%TYPE, p_min_salary in JOBS2.MIN_SALARY%TYPE, p_max_salary in JOBS2.MAX_SALARY%TYPE)
IS
v_count NUMBER := 0;
-- CURSOR job_cursors IS SELECT JOB_ID, JOB_TITLE, MIN_SALARY, MAX_SALARY FROM JOBS2;
BEGIN
--CURSOR job_cursors IS
SELECT COUNT(*)
INTO v_count
FROM jobs2
WHERE job_id = p_job_id;
--job_record job_cursors%ROWTYPE;
dbms_output.put_line('count:'||' '||v_count);
IF 0 = v_count THEN
dbms_output.put_line('INSERT2'||' '||p_job_id);
INSERT INTO JOBS2 VALUES(p_job_id, p_job_title, p_min_salary, p_max_salary);
dbms_output.put_line('INSERT'||' '||p_job_id);
ELSE
dbms_output.put_line('UPDATE2'||' '||p_job_id);
UPDATE JOBS2 SET JOB_TITLE = p_job_title, MIN_SALARY = p_min_salary, MAX_SALARY = p_max_salary WHERE JOB_ID = p_job_id;
dbms_output.put_line('UPDATE'||' '||p_job_id);
END IF;
END;