--存储过程范例:得到雇员表 emp 的记录数 begin
--说明:若过程中要向外抛异常,请使用 exception when others then raise; 这个抛出的异常在程序里是可以捕获的。
create or replace procedure getEmpCount AS
v_total number(10);
begin
select count(*) into v_total from emp;
dbms_output.put_line('雇员总人数为:'||v_total);
end;
--存储过程范例:得到雇员表 emp 的记录数 end
--函数范例,通过 id 得到雇员姓名 begin--
create or replace function get_name(p_id in number default 1) return varchar2 as
v_name varchar2(30);
begin
select name into v_name from emp where id = p_id;
return (v_name);
exception
when no_data_found then dbms_output.put_line('没有该ID:'||p_id);
return (null);
when too_many_rows then dbms_output.put_line('有重复的ID!');
return (null);
when others then dbms_output.put_line('发生其他错误!');
return (null);
end;
--函数范例,通过 id 得到雇员姓名 end--
--包范例:雇员表 emp 的增、删、改、查
--说明:包,分为包头(当做接口)和包体(当做实现类),外部只能调用到在包头中申明过的内容,包体内属于私有内容,外部(其它用户)是调用不到的--
--包头 begin--
create or replace package pkg_emp is
v_emp_count number(5);--雇员人数
procedure init(p_max number, p_min number);--初始化
procedure showEmps;--显示雇员列表
procedure insertEmp(p_id number, p_name varchar2, p_salary number);--插入雇员
procedure changeSalary(p_id number, p_salary number);
end pkg_emp;
--包头 end--
--包体 begin--
create or replace package body pkg_emp is
v_message varchar2(50);--显示信息
v_max_sal number(7);--工资上限
v_min_sal number(7);--工资下限
function exist(p_id number) return boolean;--判断雇员是否存在
procedure showMessage;--显示信息
--初始化--
procedure init(p_max number, p_min number) is begin
select count(*) into v_emp_count from emp;
v_max_sal := p_max;
v_min_sal := p_min;
v_message := '初始化过程已经完成!';
showMessage;
end init;
--显示雇员列表--
procedure showEmps is begin
dbms_output.put_line('ID 姓名 工资');
for v_emp in(select * from emp) loop
dbms_output.put_line(to_char(v_emp.id)||RPAD(v_emp.name,10,'')||to_char(v_emp.salary));
end loop;
dbms_output.put_line('雇员总人数'||v_emp_count);
end showEmps;
--插入雇员--
procedure insertEmp(p_id number, p_name varchar2, p_salary number) is begin
if not exist(p_id) then
insert into emp(id, name, salary) values(p_id, p_name, p_salary);
commit;
v_emp_count := v_emp_count + 1;
v_message := '雇员['||p_id||', '||p_name||', '||p_salary||']已插入!';
else
v_message := '雇员['||p_id||', '||p_name||', '||p_salary||']已存在,无法插入!';
end if;
showMessage;
exception
when others then
v_message := '雇员['||p_id||', '||p_name||', '||p_salary||']插入异常!';
showMessage;
end insertEmp;
--删除雇员--
procedure deleteEmp(p_id number) is begin
if exist(p_id) then
delete from emp where id = p_id;
commit;
v_emp_count := v_emp_count - 1;
v_message := '雇员['||p_id||']删除成功!';
else
v_message := '雇员['||p_id||']不存在,删除失败!';
end if;
showMessage;
exception
when others then
v_message := '雇员['||p_id||']删除异常!';
showMessage;
end deleteEmp;
--修改雇员工资--
procedure changeSalary(p_id number, p_salary number) is begin
if (p_salary > v_max_sal or p_salary < v_min_sal) then
v_message := '工资超出修改范围!';
elsif not exist(p_id) then
v_message := '雇员['||p_id||']不存在,无法修改!';
else
update emp set salary = p_salary where id = p_id;
commit;
v_message := '雇员['||p_id||']修改成功!';
end if;
showMessage;
exception
when others then
v_message := '雇员['||p_id||']修改异常!';
showMessage;
end changeSalary;
--显示信息--
procedure showMessage is begin
dbms_output.put_line('提示信息:'||v_message);
end showMessage;
--判断雇员是否存在--
function exist(p_id number) return boolean is
v_num number;--局部变量
begin
select count(*) into v_num from emp where id = p_id;
if v_num=1 then
return true;
else
return false;
end if;
end exist;
---------------
end pkg_emp;
--包体 end--
select * from emp;
delete from emp;
--调用调试--
begin
pkg_emp.init(p_max => 6000, p_min => 600);--包头初始化
end;
begin
pkg_emp.showEmps();--显示雇员列表
end;
begin
pkg_emp.insertEmp(p_id => 3, p_name => 'maot', p_salary => 5000 );--插入雇员
end;
begin
dbms_output.put_line('当前雇员总人数:'||maod.pkg_emp.v_emp_count);--通过全局变量 v_emp_count 查看雇员人数
end;
begin
maod.pkg_emp.deleteEmp(p_id => 1);--删除雇员
end;
begin
maod.pkg_emp.changeSalary(p_id => 1, p_salary => 5000);--修改雇员工资
end;
- oracle-游标-存储过程-函数-包
一.存储过程 不可以在insert,update,delete中直接使用,可以有return但代表的是退出过程 过程有三种类型:不返回值,可以返回多个值,参数有三种类型,分别如下: in:只输入,不返 ...
- oracle存储过程学习---包的概念
转自:http://www.iteye.com/topic/1111793 一.包的概念 类似于一个容器,能打包相应的Pl/SQL变量.常量.函数.过程.复合数据类型等元素到这个容器内.用来限制 ...
- oracle 存储过程(包)的写法和执行
--in 代表输入参数,out 代表输出参数create or replace procedure myproc(id in int, v_message out varchar2) is--定义临时 ...
- oracle存储过程函数
1.函数 create or replace function get_Destroy_no return varchar2 is Result varchar2(50);begin SELECT m ...
- Oracle存储过程(包:PACK_KPI_KERNEL For YS三度评价体系)
CREATE OR REPLACE PACKAGE PACK_KPI_KERNEL IS --定义多级数组 字符串 TYPE TSTRARRY ) INDEX BY BINARY_INTEGER; T ...
- Oracle存储过程 函数 计算使用资源
目录 存储过程与函数 存储过程的优势 存储过程 打印语句 选择语句 函数 计算使用资源 存储过程与函数 存储过程的优势 存储过程 /* 多行注释 */ -- 单行注释 //展示错误信息 show er ...
- hibernate调用oracle存储过程||函数
pakeage dao.Impl; //调用函数FUN_GET(); public String get(String Id,String Name){ return getSession().cre ...
- Oracle存储过程、包、方法使用总结
/** *@author:zhengwei *@date:2017-04-28 *@desc:存储过程用法总结 */ CREATE OR REPLACE PROCEDURE MYPROCEDURE(P ...
- oracle 存储过程和包的权限
GRANT CREATE ANY PROCEDURE TO MONKEY --創建,查看,替換的權限 GRANT EXECUTE ANY PROCEDURE TO MONKEY --執行和查看的權限 ...
- oracle 存储过程,存储函数,包,
http://heisetoufa.iteye.com/blog/366957 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过 ...
随机推荐
- Luogu P2290 [HNOI2004]树的计数 Prufer序列+组合数
最近碰了$prufer$ 序列和组合数..于是老师留了一道题:P2624 [HNOI2008]明明的烦恼 qwq要用高精... 于是我们有了弱化版:P2290 [HNOI2004]树的计数(考一样的可 ...
- java——模拟新浪微博用户注册
1.创建用户类,重写HashCode()和equals()方法: import java.util.*; public class User{ private String name; private ...
- linux下拼接字符串的代码
DATA_DIR=/home/liupan/.navinsight/gm result="" for i in $(ls -a $DATA_DIR) do if [ $i != & ...
- 一,JVM 自带命令行工具之JPS
jps:虚拟机进程状况工具 可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(main class,class()函数所在的类)的名称,以及这些进程的本地虚拟机的唯一ID. jps命令格式: jps ...
- Python Class __init__ __del__ 构造,析构过程解析【转】
转载自: http://blog.csdn.net/bbdxf/article/details/25774763 最近学习<Python参考手册>即<Learning Python& ...
- 牛客网Java刷题知识点之匿名对象
不多说,直接上干货! 匿名对象的两种用途: 1.当对象对方法仅进行一次调用的时候,就可以简化成匿名对象. 2.匿名对象可以作为实际参数进行传递. 匿名对象顾名思义就是没有名字的对象. new Car( ...
- 使用PHP导入Excel和导出数据为Excel文件
有时需要将Excel表格的数据导入到mysql数据库中,我们使用PHP的一个开源项目PHP-ExcelReader可以轻松实现Excel的导入.另外将mysql数据导出为Excel与本站上篇文章中导出 ...
- 为什么有人会觉得IT门槛低,工资高?
今天在高铁上,翻着逼乎,被一个话题勾住了,"为什么很多人会觉得IT门槛低?" 我一惊,还真是,身边朋友都觉得"IT赚的多","程序员工资高" ...
- kotlin查看编译后的Java代码
java学一下kotlin,由于用的是同样的jvm,那就说明他们的字节码文件应该是一样的,那么,如果我们能看到编译后的文件,那么学的更快了. 操作 1.打开一个.kt文件 2.在Android Stu ...
- Java实例学习——企业进销存管理系统(4)
Java实例学习——企业进销存管理系统(4) (本实例为书上实例,我所记录的是我的学习过程) 开始时间:2月12日 完成时间:暂未完成 2月18日——系统主窗体设计 只看了学习视频 2月19日—— 回 ...