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);