커서란 특정한 SQL 영역을 가리키는 핸들정도로 생각 하시면 되구요...
아래의 예제에선 커서로 만든 SQL을 FOR문을 이용하여 꺼내면서 꺼낸 그데이터를
변경하는 예제 입니다.
SQL> ed a12
DECLARE
CURSOR c_emp_sal IS
SELECT last_name, salary
FROM s_emp
FOR UPDATE;
BEGIN
FOR emp_rec IN c_emp_sal LOOP
DBMS_OUTPUT.PUT_LINE(emp_rec.last_name || ' ' || emp_rec.salary);
IF emp_rec.salary < 2000 THEN
UPDATE s_emp SET salary = salary * 1.2
WHERE CURRENT OF c_emp_sal;
ELSE
UPDATE s_emp SET salary = salary * 1.1
WHERE CURRENT OF c_emp_sal;
END IF;
END LOOP;
END;
/
SQL> @a12
SQL> SELECT last_name, salary FROM s_emp;
아래의 예제에선 커서로 만든 SQL을 FOR문을 이용하여 꺼내면서 꺼낸 그데이터를
변경하는 예제 입니다.
SQL> ed a12
DECLARE
CURSOR c_emp_sal IS
SELECT last_name, salary
FROM s_emp
FOR UPDATE;
BEGIN
FOR emp_rec IN c_emp_sal LOOP
DBMS_OUTPUT.PUT_LINE(emp_rec.last_name || ' ' || emp_rec.salary);
IF emp_rec.salary < 2000 THEN
UPDATE s_emp SET salary = salary * 1.2
WHERE CURRENT OF c_emp_sal;
ELSE
UPDATE s_emp SET salary = salary * 1.1
WHERE CURRENT OF c_emp_sal;
END IF;
END LOOP;
END;
/
SQL> @a12
SQL> SELECT last_name, salary FROM s_emp;
![]() | ![]() ![]() | 12-27 | 2122 | |
![]() | ![]() ![]() | 12-11 | 1532 | |
53 | ![]() ![]() | 03-15 | 1305 | |
52 | ![]() ![]() | 01-31 | 1444 | |
51 | ![]() ![]() | 01-31 | 1448 | |
50 | ![]() ![]() | 01-31 | 1128 | |
49 | ![]() ![]() | 01-19 | 1446 | |
48 | ![]() ![]() | 01-11 | 1275 | |
47 | ![]() ![]() | 01-03 | 1775 | |
46 | ![]() ![]() | 12-27 | 2122 | |
45 | ![]() ![]() | 12-19 | 1536 | |
44 | ![]() ![]() | 12-14 | 1513 | |
43 | ![]() ![]() | 12-11 | 1532 | |
42 | ![]() ![]() | 12-09 | 1217 | |
41 | ![]() ![]() | 12-01 | 1448 | |
40 | ![]() ![]() | 12-01 | 1587 | |
39 | ![]() ![]() | 12-01 | 1100 |
댓글 없음:
댓글 쓰기