首页 > 数据库 >Oracle存储过程及函数的练习题

Oracle存储过程及函数的练习题

时间:2022-11-17 13:03:42浏览次数:42  
标签:练习题 存储 end sal -- empno emp Oracle deptno


--存储过程、函数练习题

--(1)创建一个存储过程,以员工号为参数,输出该员工的工资
create or replace procedure p_sxt1(v_empno in emp.empno%type, v_sal out emp.sal%type) is
begin
select sal into v_sal from emp where empno = v_empno;
end;
--(1)执行
declare
v_empno emp.empno%type := 7369;
v_sal emp.sal%type;
begin
p_sxt1(v_empno,v_sal);
dbms_output.put_line(v_empno || ' 员工的工资为:' || v_sal);
end;


--(2)创建一个存储过程,以员工号为参数,修改该员工的工资。若该员工属于10号部门,
--则工资增加150;若属于20号部门,则工资增加200;若属于30号部门,则工资增加250;
--若属于其他部门,则增加300。
create or replace procedure p_sxt2(v_empno in emp.empno%type) is
v_deptno emp.deptno%type;
v_sal emp.sal%type;
begin
select deptno into v_deptno from emp where empno = v_empno;
select sal into v_sal from emp where empno = v_empno;
dbms_output.put_line(v_empno || ' 的部门是 ' || v_deptno || ' 修改前的工资是 ' || v_sal);

case v_deptno
when 10 then
update emp set sal = sal + 150 where empno = v_empno;
when 20 then
update emp set sal = sal + 200 where empno = v_empno;
when 30 then
update emp set sal = sal + 250 where empno = v_empno;
else
update emp set sal = sal + 300 where empno = v_empno;
end case;

select sal into v_sal from emp where empno = v_empno;
dbms_output.put_line(v_empno || ' 的部门是 ' || v_deptno || ' 修改后的工资是 ' || v_sal);
commit;
end;
--(2)执行
begin
p_sxt2(7369);
end;


--(3)创建一个存储过程,以员工号为参数,返回该员工的工作年限(以参数形式返回)。
create or replace procedure p_sxt3(v_empno in emp.empno%type, v_year out number) is
begin
select round((sysdate - hiredate)/365,1) into v_year from emp where empno = v_empno;
end;
--(3)执行
declare
v_empno emp.empno%type := 7369;
v_year number;
begin
p_sxt3(v_empno,v_year);
dbms_output.put_line(v_empno || ' 工作年限为 ' || v_year || '年');
end;


--(4)创建一个存储过程,以部门号为参数,输出入职日期最早的10个员工信息。
create or replace procedure p_sxt4(v_deptno emp.deptno%type) is
cursor c_emp is select * from emp where deptno = v_deptno order by hiredate;
v_times number := 0;
begin
for v_emp in c_emp loop
v_times := v_times + 1;
dbms_output.put_line(v_emp.empno || '**' || v_emp.ename || '**' || to_char(v_emp.hiredate,'yyyy-mm-dd'));
if v_times = 10 then
exit;
end if;
end loop;
end;
--(4)执行
begin
p_sxt4(20);
end;


--(5)创建一个函数,以员工号为参数,返回该员工的工资。
create or replace function f_sxt5(v_empno emp.empno%type) return emp.sal%type is
vr_sal emp.sal%type;
begin
select sal into vr_sal from emp where empno = v_empno;
return vr_sal;
end;
--(5)执行
select f_sxt5(7369)||'元' 工资 from dual;


--(6)创建一个函数,以部门号为参数,返回该部门的平均工资。
create or replace function f_sxt6(v_deptno emp.deptno%type) return emp.sal%type is
vr_sal emp.sal%type;
begin
select avg(sal) into vr_sal from emp where deptno = v_deptno;
return vr_sal;
end;
--(6)执行
select f_sxt6(20) 部门平均工资 from dual;


--(7)创建一个函数,以员工号为参数,返回该员工所在的部门的平均工资。
create or replace function f_sxt7(v_empno emp.empno%type) return emp.sal%type is
vr_sal emp.sal%type;
begin
select avg(sal) into vr_sal from emp where deptno = (select deptno from emp where empno = v_empno);
return vr_sal;
end;
--(7)执行
select f_sxt7(7369) from dual;


--(8)创建一个存储过程,以员工号和部门号作为参数,修改员工所在的部门为所输入的部门号。
--如果修改成功,则显示“员工由……号部门调入调入……号部门”;如果不存在该员工,则显示
--“员工号不存在,请输入正确的员工号。”;如果不存在该部门,则显示
--“该部门不存在,请输入正确的部门号。”。
create or replace procedure p_sxt14(v_empno in emp.empno%type, v_deptno in emp.deptno%type) is
vt_empno number := 0;
vt_deptno number := 0;
vm_deptno emp.deptno%type;
begin
select count(*) into vt_empno from emp where empno = v_empno;
select deptno into vm_deptno from emp where empno = v_empno;
select count(distinct deptno) into vt_deptno from emp where deptno = v_deptno;

if vt_empno = 0 then
dbms_output.put_line('员工号不存在,请输入正确的员工号。');
end if;
if vt_deptno = 0 then
dbms_output.put_line('该部门不存在,请输入正确的部门号。');
end if;

if vt_empno = 1 and vt_deptno = 1 then
dbms_output.put_line('员工由 ' || vm_deptno || ' 号部门调入调入 ' || v_deptno || ' 号部门');
update emp set deptno = v_deptno where empno = v_empno;
commit;
end if;
end;
--(8)执行
begin
p_sxt14(7369,30);
end;


--(9)创建一个存储过程,以一个整数为参数,输入工资最高的前几个(参数值)员工的信息。
create or replace procedure p_sxt15(v_number in number) is
cursor c_emp is select * from emp order by sal desc;
v_n number := 0;
begin
for v_emp in c_emp loop
v_n := v_n + 1;
dbms_output.put_line(v_n || ' - ' || v_emp.ename || ' - ' || v_emp.sal);
if v_n = v_number then
exit;
end if;
end loop;
end;
--(9)执行
begin
p_sxt15(5);
end;


--(10)创建一个存储过程,以两个整数为参数,输出工资排序在两个参数之间的员工信息。
create or replace procedure p_sxt16(v_up in number,v_down in number) is
cursor c_emp is select * from emp order by sal desc;
v_n number := 0;
begin
for v_emp in c_emp loop
v_n := v_n + 1;
if v_n >= v_up and v_n <= v_down then
dbms_output.put_line(v_n || ' - ' || v_emp.ename || ' - ' || v_emp.sal);
end if;
end loop;
end;
--(10)执行
begin
p_sxt16(2,3);
end;





标签:练习题,存储,end,sal,--,empno,emp,Oracle,deptno
From: https://blog.51cto.com/yuzhyn/5860728

相关文章

  • Oracle常用数据字典表
      Oracle常用数据字典表   查看当前用户的缺省表空间SQL>selectusername,default_tablespacefromuser_users; 查看当前用户的......
  • Oracle 12C卸载图文教程
    第一步:找到自己的Oracle安装目录。我的目录是:D:\app\u01\product\12.1.0\dbhome_1\deinstall,第二步:1、然后点击bat文件。出现如下等待画面。2、耐心等待一段时间,出现如下画......
  • 使用存储过程备份数据库
    数据库备份脚本:CREATEPROCEDURE[dbo].[SP_BackupDB](@BackPathNVARCHAR(200),--备份路径,如:D:\Backup\@BackDbNameNVARCHAR(50),......
  • 12_Kafka高级_文件存储
    实际上能看到的就是topicName+partitionID这个文件。这个文件下有两个东西很重要。.log结尾的文件是真正存储数据的。.index是存放索引的。先看看.log文件:默认会存储7......
  • Oracle通过本地DBLINK访问远程函数
     SELECT SCOTT.PKG_UTIL.FUNC_GET_BASE_RATE@DBLINK(T.BUSI_DT,DECODE(T.RATE_CODE,'OD_LPR','LPR','PBOC......
  • 强烈推荐!老板再也不用担心我的数据存储了-搭建GFS
    理论优点:分布式卷具有更好的性能、高扩展性以及可靠性,而且无元服务器(存放所有目录的结构,类似书的目录,方便找到所需数据在哪个节点),某种类型的分布式卷不但支持高扩展而且,具备......
  • 如何获得Oracle当前日期的年或月的第一天和最后一天
     1.当前日期的年份第一天和最后一天第一天selecttrunc(sysdate,'y')FROMDUAL;selecttrunc(sysdate,'yy')FROMDUAL;selecttrunc(sysdate,'yyy')FROMDUAL;s......
  • 使用mongodb存储fluentd 事件,报错Mongo::Auth::Unauthorized error="User admin (mech
    一、问题描述 使用fluentd的mongodb插件,将nginx的日志,存储到mongodb数据库中,配置如下: <source>@typetailpath/var/log/nginx/access.logpos_file/var/......
  • Oracle Autoupgrade 工具介绍、使用
        Autoupgrade是oracle提供的专门用于数据库版本升级工具,通过一条命令和一个配置文件允许dba升级一个或者多个数据库而无需人工干预。    Autoupgrade是ja......
  • 云存储技术
    一、什么是云存储云存储就是把存储放在云上二、云存储的架构三、云存储的关键技术1、存储虚拟化技术将异构的存储映射为统一的结构2、分布式存储块存储:SAN,就是......