《oracle的一些习题》由会员分享,可在线阅读,更多相关《oracle的一些习题(19页珍藏版)》请在金锄头文库上搜索。
1、求雇员的平均薪水,当薪水小于1000时,提示“薪水太低”,当薪水大于等于1000小于2000时,提示起步的薪水,当薪水大于等于2000时,提示已经步入软件行业中,使用CASE表达式来实现。set serveroutput ondeclare v_sal emp.sal%type; v_var varchar2(20);begin select avg(sal) into v_sal from emp; v_var := case when v_sal=1000 and v_sal3; end loop;end;for v_count in 1.3 loop insert into test(e
2、mpno,ename,job) values(v_empno+v_count),v_ename,v_job)创建表message,结构如下: results varchar2(10)使用for循环插入1到10(除了6和8)的数据到表中,在结束之前提交数据。create table message(results varchar2(10); begin for i in 1.10 loop if i=6 or i=8 then null; else insert into message values(i); end if; end loop; commit; end; select * fro
3、m message; begin for i in 1.10 loop; if i6 and i8 then insert into message values(i); end if; end loop; commit; end; 尽量不用goto语句;begin dbms_output.put_line(1); goto l_last_line; dbms_output.put_line(2); return; dbms_output.put_line(3);end; 第三章创建一个记录类型emp_record_type,它包含雇员的名字、薪水、工作岗位,声明一个该类型的变量emp_rec
4、ord,查询雇员编号是7788雇员的上述信息,并显示。declare type emp_record_type is recode (ename emp.ename%type, sal emp.sal%type, job varchar2(20); emp_record emp_record_type;begin select ename,job,sal into emp_record from emp where empno=7788; dbms_output.put_line(雇员名:=emp_record.ename;薪水:=sal);end; 第四章创建一个游标,查询雇员的名字和薪水,
5、当查询到某雇员的薪水大于3000元时,退出循环,并显示其对应的名字和薪水。set serveroutput ondeclare ename emp.ename%type; sal emp.sal%type; cursor emp_cursor is select ename,sal from emp;begin open emp_cursor; loop fetch emp_cursor into ename,sal; if(sal3000)then dbms_output.put_line(ename|sal); exit; end if; end loop; close emp_curso
6、r;end; 创建一个游标,查询薪水大于3000元的雇员名字和对应薪水,并显示其对应的 名字和薪水。set serveroutput ondeclare ename emp.ename%type; sal emp.sal%type; cursor emp_cursor is select ename,sal from emp where sal2000;begin if not emp_cursor%isopen then open emp_cursor; end if; loop fetch emp_cursor into ename,sal; exit when emp_cursor%no
7、tfound; dbms_output.put_line(ename|的薪水为|sal);end loop; close emp_cursor;end; 创建一个游标,查询雇员名字和对应薪水,当遇到雇员名是SCOTT的雇员时,退出游标的FOR循环,显示其对应的薪水,并显示其在游标中的位置。 declare cursor emp_cursor is select ename,sal from emp;begin for emp_record in emp_cursor loop if emp_record.ename=SCOTT then dbms_output.put_line(emp_rec
8、ord.ename|的薪水为|emp_record.sal); dbms_output.put_line(emp_cursor%rowcount); exit; end if; end loop;end; 不需声明的游标begin for emp_record in (select empno,ename from emp) loop if emp_record.ename=SCOTT then dbms_output.put_line(emp_record.empno); end if; end loop; end;带参数的游标declare cursor emp_cursor (p_dep
9、tno number,p_sal number) is select ename from emp where deptno=p_deptno and salp_sal;begin open emp_cursor(10,2000); close emp_cursor; open emp_cursor(20,4000);end; 在一个快中分别 显示薪水低于2000,在2000与4000之间,以及大于4000的雇员名。declare cursor emp_cursor (p_sal1 number,p_sal2 number) is select ename from emp where sal
10、p_sal1 and salp_sal2;begin for emp_record in emp_cursor(0,2000)loop dbms_output.put_line(薪水低于2000的用户是 :|emp_record.ename); end loop; dbms_output.put_line(=) ; for emp_record in emp_cursor(2000,4000)loop dbms_output.put_line(薪水大于2000低于4000的用户是:|emp_record.ename); end loop; dbms_output.put_line(=) ; f
11、or emp_record in emp_cursor(4000,100000)loop dbms_output.put_line(薪水大于4000的用户是 :|emp_record.ename); end loop;end;for update 子句declare cursor emp_cursor is select ename,sal from emp for update nowait;begin for emp_record in emp_cursor loop if(emp_record.ename=SCOTT)then update emp set sal=emp_record.sal+300 where ename=SCOTT; exit; end if; end loop;end;where current of子句declare cursor sal_cursor is select sal from emp where deptno=30 for update nowait;begin for emp_record in sal_cursor loop update emp set sal=emp_record.sal*1.10 where