Oracle显式游标小例子

2014-11-24 18:39:12 · 作者: · 浏览: 0

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;