1.1.创建一个过程,能向dept表中添加一个新记录。(in参数)

创建过程
create or replace procedure insert_dept
( num_dept in number, var_ename in varchar2, var_loc in varchar2 ) is
begin
insert into dept
values(num_dept,var_ename,var_loc);
commit;
end insert_dept;
/
调用
begin
insert_dept(79,'技术部','武汉');
end;
/

2.从scott.emp表中查询给定职工

(提示:使用&来输入员工编号)的职工姓名和工资。(要求:利用out模式的参数将值传给调用者。)

创建过程
create or replace procedure select_emp(
num_empno in emp.empno%type,
name out emp.ename%type,
salary out emp.sal%type) is
begin
select ename,sal into name,salary from emp where empno = num_empno;
exception
when no_data_found then
    dbms_output.put_line('该部门不存在');
end select_emp;
/
调用
declare
var_name emp.ename%type,
var_salary emp.sal%type) is
begin
select_emp(&员工编号,var_ename,var_salary);
if var_ename is not null then
dbms_output.put_line(var_ename||' '||var_salary);
end if;
end;
/

3.创建一个过程,在执行调用过程时,可随机输入emp表中某个雇员的姓名,

根据雇员的姓名,返回该雇员的薪水值,并输出。(out参数)。

创建过程
create or replace procedure select_emp2(
name in emp.ename%type,
salary out emp.sal%type) is
begin
select sal into salary from emp where ename = name;
exception 
when no_data_found then
salary:=0;
end select_emp2;
/
调用
declare
var_sal number(5);
begin
select_emp2('&员工姓名',var_sal);
dbms_output.put_line(var_sal);
end;
/

4.编写过程,实现交换两个变量的值的功能。并输出交换前和交换后的两个值。(in out参数)

创建过程
create or replace procedure swap(
num1 in out number,
num2 in out number)
is z number(5);
begin
z:=num1;
num1:=num2;
num2:=z;
end swap;
/
调用
declare
x number:=10;
y number:=20;
begin
dbms_output.put_line('交换前x和y的值是:'||x||'  '||y);
swap(x,y);
dbms_output.put_line('交换后x和y的值是:'||x||'  '||y);
END;
/

5.创建存储过程,根据员工编号删除scott.emp表中的相关记录。

(提示:由调用语句提供的员工编号来删除记录,要求员工编号可随机输入。)

创建过程
create or replace procedure delete_emp(id dept.empno%type) is
begin
Delete from dept where empno = id;
end delete_emp;
/
调用
execute delete_emp('&员工编号');

6. 创建存储过程:输入部门编号,

输出scott.emp表中该部门所有职工的员工编号、姓名、工作岗位。

(提示:查询结果是多行,需使用游标,需把游标的定义像变量那样在过程或函数里定义,

所以游标的定义要放在如下位置:

create or replace procedure 过程名(参数)is
  游标的定义;
begin
end;
/ 创建过程
create or replace procedure selcet_curemp( 
id in emp.deptno%type) is
cursor c1 is select * from emp where deptno = id;
begin
for rec in c1 loop
dbms_output.put_line(rec.empno||' '||rec.empno||' '||rec.job);
end loop;
end;
/
执行存储过程
execute selcet_curemp(10);

7.编写一个过程,指定一个员工编号与一个工资增加的百分比,

使emp表中将该员工的工资(sal)增加输入的百分比。

创建过程

create or replace procedure up_sal( id in number, parsent in float) is
begin
update emp set sal = sal + sal*parsent where empno = id;
end;
/ begin
up_sal(1234,0.5);
end;
/

8.创建函数,从scott.emp表中查询指定员工编号的职工的工资

create or replace function select_sal(id emp.empno%type) return emp.sal%type is salary emp.sal%type;
begin
select sal into salary from emp where empno = id;
return salary;
end;
/ 调用函数有以下四种方式:
方式一:使用变量接收返回值
VAR salary NUMBER;
EXEC :salary:=select_sal(7369);
PRINT salary;
方式二:在SQL语句中直接调用函数
SELECT select_sal(7369) FROM DUAL;
方式三:使用DBMS_OUTPUT调用函数
EXEC dbms_output.put_line('工资是:'|| select_sal(7369));
方式四:在匿名PL/SQL块中调用函数(推荐使用该种方式-方便好记)
begin
dbms_output.put_line('工资是:'|| select_sal(7369));
end;
/

9.创建函数,返回scott.emp表中指定职工的工资和姓名。

(提示:返回值是两个,可用return返回一个,另一个用out参数带回)

create or replace function select_sal_name(id in emp.empno%type,v_name out emp.ename%type) 
return emp.sal%type is salary emp.sal%type;
begin
select sal,ename into salary,v_name from emp where empno = id;
return salary;
end;
/ declare
var_name emp.ename%type;
var_sal emp.sal%type;
begin
var_sal:=select_sal_name(7369,var_name);
dbms_output.put_line(var_name||'的工资为'||var_sal);
end;
/

10. 创建函数,根据给定的部门编号(提示: 利用&)计算该部门所有职工的平均工资。

create or replace function avg_sal(id emp.deptno%type) return number is
avgsal number(7,2);
begin
select avg(sal) into avgsal from emp where deptno = id;
return avgsal;
end;
/ begin
dbms_output.put_line(avg_sal(&deptno));
end;
/

11.创建函数,将scott.emp表中工资低于平均工资的职工工资加上200,并返回修改了工资的总人数.

create or replace function fun2 return number is
 begin
 update emp set sal=sal+200 where sal<(select avg(sal)  from emp);
 return sql%rowcount;
 end;
 / begin
dbms_output.put_line(fun2);
end; 
/

12.创建一个函数,仅有一个形参,它接收调用函数中传递过来的实参--部门号,

函数的返回值为该部门的一整条记录信息(注意:此处能够接收一整条记录的变量该怎么定义?)。要求在调用函数中输出该部门的部门名称与位置。

create or replace function find_dept(dept_no number) return dept%rowtype
is
v_dept dept%rowtype;
begin
select * into v_dept from dept where deptno = dept_no;
return v_dept;
end;
/ declare
v_dept dept%rowtype;
begin
v_dept:=find_dept(30);
dbms_output.put_line(v_dept.dname||'---'||v_dept.loc);
end;
/

Oracle存储过程练习题的更多相关文章

  1. oracle 存储过程

    来自:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 I ...

  2. Oracle存储过程语法

    原文链接:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程  1 CREATE OR REPLACE PROCEDURE 存储过程名  ...

  3. ORACLE存储过程调用Web Service

    1. 概述 最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明.其他主流数据库,比如mysql和sq ...

  4. Oracle存储过程基本语法介绍

    Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...

  5. MyBatis调用Oracle存储过程

    MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...

  6. Oracle存储过程(转)

    Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...

  7. Oracle存储过程中异常Exception的捕捉和处理

    Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...

  8. Oracle存储过程动态创建临时表/存储过程执行权限问题--AUTHID CURRENT_USER

    关于Oracle存储过程执行权限问题的解决 http://blog.sina.com.cn/s/blog_6ceed3280101hvlo.html (2014-04-02 04:06:28) 转载▼ ...

  9. ORACLE存储过程学习

    存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE ...

随机推荐

  1. c++构造函数详解(转)

    c++构造函数的知识在各种c++教材上已有介绍,不过初学者往往不太注意观察和总结其中各种构造函数的特点和用法,故在此我根据自己的c++编程经验总结了一下c++中各种构造函数的特点,并附上例子,希望对初 ...

  2. 使用OrgChart插件生成家谱组织结构图

    1.orgchart插件: github地址:https://github.com/dabeng/OrgChart 2.前端代码: //1.加载树形数据:ajax请求获取json格式的数据(flag参 ...

  3. UE4 Navmesh 室内导航设置

    我用的UE版本是4.14.1   系统:win10 64 前不久给样板房里面做了一个扫地机器人,导航设置让我头大了很久,度娘也没有用,最后在谷哥上有所感悟,现在给出本人的设置过程和解决方案. 一开始拖 ...

  4. js中两个日期大小比较,获取当前日期,日期加减一天

    一.两个日期大小比较 1.日期参数格式:yyyy-mm-dd // a: 日期a, b: 日期b, flag: 返回的结果 function duibi(a, b,flag) { var arr = ...

  5. Swift_下标

    Swift_下标 点击查看源码 func testSubscripts() { //下标关键字subscript //array测试 struct TestArray { //内部数组 var arr ...

  6. 可能是catalan数吧

    What's the number of distinct BSTs containing nodes {1, 2, 3 ,4}? 包含节点{1,2,3,4}的不同二叉搜索树有多少棵? int Num ...

  7. tomcat启动startup.bat一闪而过【亲测有效】

    遇到很多次运行startup.bat后,一个窗口一闪而过的问题,但是从来没去纠正怎样修改配置才是正确的,现在从网上查阅的资料整理如下:tomcat在启动时,会读取环境变量的信息,需要一个CATALIN ...

  8. HDU 2065 "红色病毒"问题(生成函数)

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

  9. table表单制作个人简历

    应用table表单,编程个人简历表单,同时运用了跨行rowspan和跨列colspan. <!DOCTYPE html> <html> <head> <met ...

  10. Redis(八):Redis的复制(Master/Slave)

    Redis的复制(Master/Slave)目录导航: 是什么 能干嘛 怎么玩 复制原理 哨兵模式(sentinel) 复制的缺点 是什么 官网 行话:也就是我们所说的主从复制,主机数据更新后根据配置 ...