在PL/SQL中使用游标、动态sql和绑定变量的小例子

时间:2022-04-15 03:56:24

需求:查询并输出30号部门的雇员信息

方式一:使用 loop...fetch

 SET serveroutput ON;
DECLARE
CURSOR c_emp IS
SELECT * FROM emp WHERE deptno = 30;
v_emp emp%rowtype;
BEGIN
OPEN c_emp;
loop
fetch c_emp INTO v_emp;
exit WHEN c_emp%notfound;
dbms_output.put_line(v_emp.empno||' '||v_emp.ename||' '||v_emp.job||' '||v_emp.mgr||' '||v_emp.hiredate||' '||v_emp.sal||' '||v_emp.comm||' '||v_emp.deptno);
end loop;
close c_emp;
END;
/

方式二:使用游标 for 循环

 SET serveroutput ON;
DECLARE
CURSOR c_emp IS
SELECT * FROM emp WHERE deptno = 30;
v_emp emp%rowtype;
BEGIN
FOR e IN c_emp loop
dbms_output.put_line(e.empno||' '||e.ename||' '||e.job||' '||e.mgr||' '||e.hiredate||' '||e.sal||' '||e.comm||' '||e.deptno);
end loop;
END;
/

方式三:使用动态sql和绑定变量

 SET serveroutput ON;
DECLARE
TYPE emp_cursor IS REF CURSOR;
c_emp emp_cursor;
v_emp emp%rowtype;
BEGIN
OPEN c_emp FOR 'select * from emp where deptno =:n' USING 30;
loop
fetch c_emp INTO v_emp;
exit WHEN c_emp%notfound;
dbms_output.put_line(v_emp.empno||' '||v_emp.ename||' '||v_emp.job||' '||v_emp.mgr||' '||v_emp.hiredate||' '||v_emp.sal||' '||v_emp.comm||' '||v_emp.deptno);
END loop;
close c_emp;
END;
/