oracle实验报告四
针对实验一中创建的表进行以下操作:
–1.创建一个视图,显示80后的员工信息
create view 八零后
as
select * from staff where 生日>=to_date('1980-01-01','yyyy-MM-dd');
select * from 八零后;
–2.创建一个名为‘检索信息’的存储过程,该存储过程完成检索指定员工号所参与的项目总数,其中员工号为输入参数,项目总数为输出参数
–调用‘检索信息’存储过程,完成检索1号员工参与的项目总数。
create or replace procedure 检索信息(v_员工编号 员工参加项目.员工编号%type)
as
p_count varchar2(20);
begin
select count(*) into p_count from 员工参加项目 where 员工编号=v_员工编号;
DBMS_OUTPUT.PUT_LINE('项目总数:'||p_count);
end 检索信息;
begin
检索信息(&员工编号:);
end;
–3.创建一个触发器,该触发器完成当项目结束时,将预算加1000,并将新的预算和旧预算输出
create trigger 预算增加
after insert on project
for each row
when(trunc(sysdate)>=trunc(new.xend))
begin
for v_vk in yusuan
预算:=预算+1000;
loop
DBMS_OUTPUT.put_line('项目编号:'||v_vk.项目编号);
DBMS_OUTPUT.put_line('旧预算:'||v_vk.预算);
DBMS_OUTPUT.put_line('新的预算:'||v_vk.新预算);
end loop;
end 预算增加;
–4.使用PL/SQL完成:将员工薪资小于5000的员工薪资加薪15%,薪资大于5000小于8000的加薪10%,
–大于8000的加薪5%,并将员工编号,员工姓名和加薪后的薪资输出
declare
cursor 薪资 is select * from staff;
begin
update staff set salary=1.15*salary where salary<=5000;
update staff set salary=1.1*salary where salary>5000 and salary<=8000;
update staff set salary=1.05*salary where salary>5000 and salary>8000;
for v_vk in 薪资
loop
DBMS_OUTPUT.put_line('员工编号:'||v_vk.员工编号);
DBMS_OUTPUT.put_line('员工姓名:'||v_vk.姓名);
DBMS_OUTPUT.put_line('薪资:'||v_vk.salary);
end loop;
end;
–5.使用显示游标循环输出项目编号,项目名称,预算
declare
cursor project1 is select * from project;
begin
for v_vk in project1
loop
DBMS_OUTPUT.put_line('项目编号:'||v_vk.项目编号);
DBMS_OUTPUT.put_line('项目名称:'||v_vk.项目名称);
DBMS_OUTPUT.put_line('预算:'||v_vk.预算);
end loop;
end;
–6.使用带参游标完成:输入员工编号,查询显示出员工编号,姓名,年龄
declare
cursor search(v_员工编号 staff.员工编号%type) is select * from staff where 员工编号=v_员工编号;
begin
for v_vk in search(&员工编号:)
loop
DBMS_OUTPUT.put_line('员工编号:'||v_vk.员工编号);
DBMS_OUTPUT.put_line('员工姓名:'||v_vk.姓名);
DBMS_OUTPUT.put_line('年龄:'||trunc
(months_between(to_date('2020-07-15','yyyy-mm-dd'),v_vk.生日)/12));
end loop;
end;