Oracle数据库综合试题
表结构说明:
create table employee
(
id number(10) not null, -- 员工工号
salary number(10,2) default 0 not null, --薪水
name varchar2(24) not null --姓名
);
--开启控制台输出
set serverout on;
1.创建序列seq_employee,该序列每次取的时候它会自动增加,从1开始计数,不设最大值,并且一直累加,不循环。
-- Create sequence
createsequenceSEQ_EMPLOYEE
minvalue1
maxvalue9999999999999999999999999999
startwith1
incrementby1
cache20;
1. 写一个PL/SQL块,插入表user.employee中100条数据。插入该表中字段id用序列seq_employee实现,薪水和姓名字段可以任意填写。
declare
inumber;
begin
foriin1..100
loop
insertintoemployeevalues(seq_employee.nextval,1950+i,'匿名'||to_char(i));
commit;
endloop;
end;
/
3.写一个语句块,在语句块中定义一个显式游标,按id升序排列,打印表employee中前十条数据。
declare
--定义一个显式游标,按id升序排列
cursorcisselectid,salary,namefrom(select*fromemployeeorderbyid)whererownum<11;
v_record c%rowtype;
begin
openc;
loop
fetchcintov_record;
exitwhenc%notfound;
dbms_output.put_line(to_char(v_record.id)||','||to_char(v_record.salary)||','||v_record.name);
endloop;
closec;
end;
/
4.创建存储过程p_employee,输入员工薪水范围,返回员工工号、姓名、薪水结果集,结果集按员工薪水升序排列。
createorreplaceprocedurep_employee(iminsalaryinnumber,imaxsalaryinnumber)
is
begin
forxin(selectid,salary,namefrom(select*fromemployeewheresalarybetweeniminsalaryandimaxsalary)orderbysalary)
loop
dbms_output.put_line(to_char(x.id)||to_char(x.salary)||x.name);
endloop;
end;
/
--调用存储过程
callp_employee(1951,1956);
execp_employee(1951,1952);
5.创建函数f_employee实现更新员工薪水的功能,将薪水低于2000且姓王的员工薪水加5%,其他不变,更新成功则返回0,否则返回1。
createorreplacefunctionf_employeereturnnumber
is
begin
updateemployeesetsalary=salary+salary*0.05wheresalary<2000andnamelike'王%';
commit;
ifsql%rowcount=0then
return1;
else
return0;
endif;
end;
/
6.写一个匿名语句块,用于执行函数f_employee,并打印执行该函数的结果。
declareanumber;
begin
a:=f_employee();
dbms_output.put_line(to_char(a));
end;
/
7.创建存储过程p_create_emp,用于判断表employee是否存在,如果存在则删除该表。
createorreplaceprocedurep_create_emp
is
v_countnumber;
begin
selectcount(*)intov_countfromuser_tableswheretable_name='EMPLOYEE';
ifv_count=0then
return;
else
executeimmediate'drop table employee';
endif;
end;
/
8.写一个匿名语句块,用于执行存储过程p_create_emp。
exec p_create_emp;