1:遊標執行個體,顯示出姓名和部門
DECLARE
name VARCHAR2(50);
department_name varchar(20); --定義兩個變數來存放employees表和departments表中的內容
CURSOR emp_cur IS --定義遊標emp_cur
SELECT name, department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id; --選出所有員工的姓名和所在部門
BEGIN
OPEN emp_cur; --開啟遊標
LOOP
FETCH emp_cur INTO name, department_name; --每次將一行資料放入到變數中,遊標後移
EXIT WHEN emp_cur%NOTFOUND; --當遊標取不到資料時退出迴圈
dbms_output.put_line(name || ' 在 ' || department_name); --輸出姓名和所在部門
END LOOP;
CLOSE emp_cur;
END;
2:第二個例子,
公司上市,決定給員工提高薪資,入職時間沒超過1年漲100,1000元封頂
DECLARE
hire_date DATE; --定義2個變數存放employee表中的內容
e_id NUMBER;
CURSOR emp_cur IS --定義遊標emp_cur
SELECT id, hire_date
FROM employees; --選出所有員工的姓名和入職時間
BEGIN
OPEN emp_cur; --開啟遊標
LOOP
FETCH emp_cur INTO e_id, hire_date; --每次將一行資料存入變數中,遊標後移
EXIT WHEN emp_cur % NOTFOUND;
IF 100*(2010 - to_char(hire_date, 'yyyy')) < 1000 THEN --判斷年限和工資的關係
UPDATE salary
SET salaryvalue = salaryvalue + 100*(2010 - to_char(hire_date, 'yyyy'))
WHERE employeeid = e_id;
ELSE
UPDATE salary
SET salaryvalue = salaryvalue + 1000;
WHERE employeeid = e_id;
END IF;
END LOOP;
END;
3:使用迴圈遊標簡化遊標的讀取
文法:
FOR <類型> IN <遊標名> LOOP
--操作各行資料
END LOOP;
例子:
DECLARE
TYPE employee_record IS RECORD --定義一個RECORD類型的變數,裡麵包含name和department_name兩個變數
(
name VARCHAR2(50),
department_name varchar(20)
);
CURSOR emp_cur IS
SELECT name, department_name
FROM employee e, departments d
WHERE e.department_id = d.department_id;
BEGIN
FOR employee_record IN emp_cur LOOP
dbms_output.put_line
(employee_record.name || ' 在 ' || employee_record.department_name);
END LOOP;
END;