记得先将显示输出打开 set serveroutput onweb
declare v_emp emp%rowtype; v_num int:=0;--用来控制输出,只输出5条 begin for r in (select * from emp order by sal desc)--这是隐式游标的用法,里面运用order by desc降序,asc升序 loop dbms_output.put_line(r.empno||' '||r.ename||' '||r.sal); v_num:=v_num+1; exit when v_num=5;--到达5条结束循环 end loop; end;
declare v_emp emp%rowtype; v_num int:=0; Cursor r is select * from emp order by sal desc;--定义游标 begin open r;--打开游标 fetch r into v_emp;--取数据 while r%found--若是结果集有数据,进入循环 loop dbms_output.put_line(v_emp.empno||' '||v_emp.ename||' '||v_emp.sal); fetch r into v_emp;--更新数据 v_num:=v_num+1; exit when v_num=5; end loop; end;
declare v_emp emp%rowtype; v_num int:=0; Cursor rs is select * from emp order by sal desc; begin for r in rs--游标跟for循环结合,自动打开游标,取数据,更新数据,关闭游标 loop dbms_output.put_line(r.empno||' '||r.ename||' '||r.sal); v_num:=v_num+1; exit when v_num=5; end loop; end;
declare v_empno emp.empno%type; v_ename emp.ename%type; begin v_empno:=#--由键盘输入编号 select ename into v_ename from emp where empno=v_empno;--取得数据 dbms_output.put_line(v_ename);--打印数据 exception --若是出现异常则执行 when NO_DATA_FOUND then --执行定义的异常 dbms_output.put_line('编号错误,没有找到相应的雇员!'); when others then --出现其余异常执行 dbms_output.put_line('发生其余错误'||' '||SQLCODE||' '||SQLERRM); end;
declare v_empno emp.empno%type; v_comm emp.comm%type; v_error exception;--定义异常 begin v_empno:=#--键盘输入数据 select comm into v_comm from emp where empno=v_empno;--获得数据 if v_comm=0 then--若是为0 异常生效 raise v_error; end if; exception when v_error then --执行自定义的异常 dbms_output.put_line('该员工的佣金为0'); end;