你的位置:首页 > 数据库

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


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

方式一:使用 loop...fetch

 1 SET serveroutput ON; 2 DECLARE 3  CURSOR c_emp IS  4   SELECT * FROM emp WHERE deptno = 30; 5  v_emp emp%rowtype;  6 BEGIN 7  OPEN c_emp; 8   loop 9    fetch c_emp INTO v_emp;10    exit WHEN c_emp%notfound;11    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);12   end loop;13  close c_emp;14 END;15 /

方式二:使用游标 for 循环

 1 SET serveroutput ON; 2 DECLARE 3  CURSOR c_emp IS 4   SELECT * FROM emp WHERE deptno = 30; 5  v_emp emp%rowtype;  6 BEGIN 7  FOR e IN c_emp loop 8   dbms_output.put_line(e.empno||' '||e.ename||' '||e.job||' '||e.mgr||' '||e.hiredate||' '||e.sal||' '||e.comm||' '||e.deptno); 9  end loop;10 END;11 /

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

 1 SET serveroutput ON; 2 DECLARE 3  TYPE emp_cursor IS REF CURSOR; 4  c_emp emp_cursor; 5  v_emp emp%rowtype; 6 BEGIN 7  OPEN c_emp FOR 'select * from emp where deptno =:n' USING 30; 8  loop 9   fetch c_emp INTO v_emp;10    exit WHEN c_emp%notfound;11    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);12  END loop;13  close c_emp;14 END;15 /