--存储过程、函数练习题--(1)创建一个存储过程,以员工号为参数,输出该员工的工资
create or replace procedure p_sxt1(v_empno in emp.empno%type, v_sal out emp.sal%type) is
beginselect sal into v_sal from emp where empno = v_empno;
end;
--(1)执行
declarev_empno emp.empno%type := 7369;v_sal emp.sal%type;
beginp_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) isv_deptno emp.deptno%type;v_sal emp.sal%type;
beginselect 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_deptnowhen 10 thenupdate emp set sal = sal + 150 where empno = v_empno;when 20 thenupdate emp set sal = sal + 200 where empno = v_empno;when 30 thenupdate emp set sal = sal + 250 where empno = v_empno;elseupdate 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)执行
beginp_sxt2(7369);
end;--(3)创建一个存储过程,以员工号为参数,返回该员工的工作年限(以参数形式返回)。
create or replace procedure p_sxt3(v_empno in emp.empno%type, v_year out number) is
beginselect round((sysdate - hiredate)/365,1) into v_year from emp where empno = v_empno;
end;
--(3)执行
declarev_empno emp.empno%type := 7369;v_year number;
beginp_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) iscursor c_emp is select * from emp where deptno = v_deptno order by hiredate;v_times number := 0;
beginfor v_emp in c_emp loopv_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 thenexit;end if;end loop;
end;
--(4)执行
beginp_sxt4(20);
end;--(5)创建一个函数,以员工号为参数,返回该员工的工资。
create or replace function f_sxt5(v_empno emp.empno%type) return emp.sal%type isvr_sal emp.sal%type;
beginselect 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 isvr_sal emp.sal%type;
beginselect 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 isvr_sal emp.sal%type;
beginselect 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) isvt_empno number := 0;vt_deptno number := 0;vm_deptno emp.deptno%type;
beginselect 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 thendbms_output.put_line('员工号不存在,请输入正确的员工号。');end if;if vt_deptno = 0 thendbms_output.put_line('该部门不存在,请输入正确的部门号。');end if;if vt_empno = 1 and vt_deptno = 1 thendbms_output.put_line('员工由 ' || vm_deptno || ' 号部门调入调入 ' || v_deptno || ' 号部门');update emp set deptno = v_deptno where empno = v_empno;commit;end if;
end;
--(8)执行
beginp_sxt14(7369,30);
end;--(9)创建一个存储过程,以一个整数为参数,输入工资最高的前几个(参数值)员工的信息。
create or replace procedure p_sxt15(v_number in number) iscursor c_emp is select * from emp order by sal desc;v_n number := 0;
beginfor v_emp in c_emp loopv_n := v_n + 1;dbms_output.put_line(v_n || ' - ' || v_emp.ename || ' - ' || v_emp.sal);if v_n = v_number thenexit;end if;end loop;
end;
--(9)执行
beginp_sxt15(5);
end;--(10)创建一个存储过程,以两个整数为参数,输出工资排序在两个参数之间的员工信息。
create or replace procedure p_sxt16(v_up in number,v_down in number) iscursor c_emp is select * from emp order by sal desc;v_n number := 0;
beginfor v_emp in c_emp loopv_n := v_n + 1;if v_n >= v_up and v_n <= v_down thendbms_output.put_line(v_n || ' - ' || v_emp.ename || ' - ' || v_emp.sal);end if;end loop;
end;
--(10)执行
beginp_sxt16(2,3);
end;

Oracle存储过程及函数的练习题相关推荐

  1. oracle触发器函数,oracle 存储过程、函数和触发器用法实例详解

    本文实例讲述了oracle 存储过程.函数和触发器用法.分享给大家供大家参考,具体如下: 一.存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程.存储函数. 创建存储过程 用CR ...

  2. Oracle 存储过程,函数和包。

    1. 存储过程和函数 1.1 创建和删除存储过程             创建存储过程,需要有CREATE PROCEDURE 或 CREATE ANY PROCEDURE的系统权限. 基本语法如下: ...

  3. oracle存储过程与函数的区别及作用,Oracle存储过程与存储函数-入门

    文章思维导图 一. 存储过程和存储函数的定义 定义:存储在数据库中,供所有用户程序调用的子程序叫做存储过程/存储函数.复杂点的解释:存储过程(Stored Procedure),就是一组用于完成特定数 ...

  4. 用java调用oracle存储过程和函数

    创建测试用表: CREATE TABLE USER (    I_ID   VARCHAR(50) NOT NULL,    I_NAME VARCHAR(50) NOT NULL ); 一:无返回值 ...

  5. oracle存储过程语法和用法,oracle存储过程 语法 函数 总结

    对于oracle 存储过程是很优秀的一种脚本语言.下面是一些整理: 一,Plsql 调试存储过程: 1. 在oracle的 配置和移植工具 àNET MANAGER中配置连接 2. 在plsql中新建 ...

  6. oracle游标语法举例,PL/SQL语句块基本语法(ORACLE存储过程,函数,包,游标)

    1.PL/SQL语句块 PL/SQL语句块只适用于Oracle数据库,使用时临时保存在客户端,而不是保存在数据库. 基本语法: declare 变量声明.初始化 begin 业务处理.逻辑代码 exc ...

  7. Oracle - 存储过程、函数、包的使用练习-雇员

    --存储过程范例:得到雇员表 emp 的记录数 begin --说明:若过程中要向外抛异常,请使用 exception when others then raise; 这个抛出的异常在程序里是可以捕获 ...

  8. oracle存储过程隐式函数,Oracle存储过程,函数。

    --在应用程序中往往有些固定的数据库操作,我们常常为致谢固定的操作定义了一些存储过程.这些存储过程不仅 --可以简化客户端的应用程序的开发和维护.而且还可以提高应用的运行性能. -- 创建存储过程的语 ...

  9. oracle 存储过程和函数例子

    关于 游标 if,for 的例子 create or replace procedure peace_if is cursor var_c is select * from grade; begin ...

最新文章

  1. vue ui无效_vue开发中,父组件添加scoped之后。解决在父组件中无法修改子组件样式问题。...
  2. c++ sort 从大到小排序_C语言必学的12个排序算法:冒泡排序(第4篇)
  3. 【转】Info.plist中常用的key简介
  4. unity脚本运行顺序具体的解释
  5. 深度学习(六)——CNN进化史
  6. java 布局管理器_有时在Java中,一个布局管理器是不够的
  7. c语言乘法表只有结果,要求输出结果显示相乘的两数及乘积怎么做?
  8. C语言(CED)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。
  9. Netty线程模型和核心概念
  10. 最长回文子串——Manacher 算法​​​​​​​
  11. 第二节 中国的行政区划
  12. w讠ndows Boot Manager,Win10电脑无法开机提示Windows boot manager的解决方案
  13. 印象笔记Markdown样式美化
  14. 调用讯飞开放平台的语音转写api
  15. 缺少tlsys.conf文件
  16. 信息化和信息系统-PMP
  17. 网站头像html,分享一个非常强大的头像在线生成网站
  18. Django REST Framework中的Serializer relations
  19. 周周有惊喜奖,第三期开奖名单 --2007中国软件开发者大调查
  20. 华容道java代码解释_华容道代码解释

热门文章

  1. js 判断日期时间差
  2. 调用打开另外一个APK
  3. powerdns与nginx结合实现以域名和IP方式访问web服务器80端口时分别跳转到不同页面...
  4. [译]机器人操作系统简介:终极机器人应用框架(上)
  5. 设计模式2:工程模式(1)
  6. 清理vs工程文件(python2.7)
  7. linux --常用命令
  8. 用dw(dreamweaver)开发asp.net,连接数据库时出现“http错误500,服务器内部错误”的解决方法...
  9. 如何解决android studio的模拟器有密码的问题
  10. 2010年寒假学习心得