--建立包规范
create or replace package emp_package
is
g_deptno number(3) := 30; --全局变量
procedure add_employee( --过程
eno in number,
name in varchar2,
salary in number,
dno in number default g_deptno
);
procedure fire_employee(eno in number); --过程
function get_sal(eno in number) return number; --函数
end emp_package;
/
--建立包体
create or replace package body emp_package
is
function validate_deptno(v_deptno in number) --私有函数,外界不能调用
return boolean
is
v_temp int;
begin
select 1 into v_temp from dept where deptno = v_deptno;
return true;
exception
when no_data_found then
return false;
end;
procedure add_employee( --过程
eno in number,
name in varchar2,
salary in number,
dno in number default g_deptno
) is
begin
if validate_deptno(dno) then --内部调用私有函数
insert into emp(empno,ename,sal,deptno) values(eno,name,salary,dno);
else
raise_application_error(-20010,'不存在该部门');
end if;
exception
when dup_val_on_index then
raise_application_error(-20011,'该雇员已存在');
end;
procedure fire_employee(eno in number) is --过程
begin
delete from emp where empno = eno;
if sql%notfound then
raise_application_error(-20012,'该雇员不存在');
end if;
end;
function get_sal(eno in number) return number
is
v_sal emp.sal%type;
begin
select sal into v_sal from emp where empno = eno;
return v_sal;
exception
when no_data_found then
raise_application_error(-20012,'该雇员不存在');
end;
end emp_package;
/
调用:
调用包变量:SQL> exec emp_package.g_deptno := 20;
调用包过程:SQL> exec emp_package.add_employee(1111,'lixin',2000);
调用包函数:
SQL> var salary number;
SQL> exec :salary := emp_package.get_sal(7788);
PL/SQL procedure successfully completed
salary
---------
3000
以其他身份调用包的公共组件:
SQL> exec lixin.emp_package.add_employee(1236,'lixin2',20);
远程调用包组件:
SQL> exec emp_package.add_employee@orcl(1236,'lixin2',20);
---------------------------------------------------------------------------------------------------
包纯度级别:
create or replace package my_package is
minsal number;
maxsal number;
function max_sal return number;
function min_sal return number;
pragma restrict_references(max_sal,wnps);
pragma restrict_references(min_sal,wnps);
end;
/
wnps:不能修改变量
wnds:不能修改数据库
rnds:不能读取数据库
rnps不能读取包变量
分享到:
相关推荐
Oracle中SQL以及PL/SQL复习专用 SQL复习专用
很全很系统的学习javaEE的好东西,快速复习javaEE。觉得好请帮顶一下
PL/SQL的基本语法、记录类型、流程控制、游标的使用、 异常处理机制、存储函数/存储过程、触发器。 为方便大家跟着我的笔记练习,为此提供数据库表文件给大家下载:点我下载 为了要有输出的结果,在写PL/SQL程序前都...
oracle PL/sql语言复习资料,很全的oracle函数,sql语句,以及游标,存储过程,触发器等复习资料.
pl/sql块习题,里面是关于数据库oracle的pl/sql块相关方面的习题,可以用来复习,pl/sql是数据库里面的重点内容
自考本科 一、单项选择题(本大题共20小题,每小题1分,共20分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.C++中注释“∥”的...的 复习资料
总共包括十五章的复习题: 第一章 Oracle 11g 介绍 第二章 ORACLE 11g 的体系结构 ...第十章 PL/SQL基础 第十一章 存储过程与函数 第十二章 触发器 第十三章 游标 第十四章 安全管理 第十五章 数据库备份与恢复
数据库知识点整理,包括数据库和表的创建,增删改查,子查询,关联查询,连接,交并差集,索引,序列,视图,...存储过程,触发器,PL/SQL的基本使用。 每个知识点都有基于ORACLE scott 账户下employee 表的实例代码。
PL/SQL以及DEVELOPER,而这将是一门新的课程。如果你是一名DBA, 请继续。 5、可以根据自己的实际情况,进行有选择的学习,也就是说下面的内 没有特别顺序要求。可以选择深入学习ORACLE的管理、备份与恢复、性能 ...
存储过程:由PL/SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,使用时只要调用即可。 动态参数与主变量的区别:动态参数的输入不是编译时完成绑定。而是通过 (prepare)语句准备主变量和执行...
18 Oracle:PL/SQL 6分 1 XML:xml作用,格式良好的xml 6分 2 XML:dom 7分 3 XML:外部dtd编写 6分 4 XML:dtd和schema的区别 7分 5 XML:db-》xml 6分 6 XML:schema-》xml 8分 7 XML:dtd中的细节 4分 8 XML:内部dtd编写...
50 pl/sql 51 Oracle数据库对象 52 提高数据库性能 53 hibernate总结 54 使用Spring容器管理JavaBean 55 Spring 数据访问支持 56-59 项目实战:JBOA办公自动化管理系统 60 Spring配置优化 61 web service 62-65 项目...
呕心沥血两个礼拜,记录oracle学习点点滴滴 代码经过自己验证 是学习和复习不可多得的好东西 倾情奉献
10.2.5 将子查询因子化应用到PL/SQL中 270 10.3 递归子查询 273 10.3.1 一个CONNECT BY的例子 274 10.3.2 使用RSF的例子 275 10.3.3 RSF的限制条件 276 10.3.4 与CONNECT BY的不同点 276 10.4 复制CONNECT BY...
最近开始学oracle,也不算开始学,以前也学过,只能叫复习了,在csdn上找了半天找到了这个东西,个人觉得还不错,循序渐进,讲知识很详细还有例子给你联系,只可惜是PPT的,PPT嘛,拿来演示还可以,给人看就太不方便了,于是个人...
)完成后,您将拥有三个装载数据的表: 县:2010 年人口普查 PL94 数据。 meat_poultry_inspect :美国农业部关于生产肉类和家禽的植物的数据。 acs_2012_stats :来自 2012 年美国社区调查的衍生数据。基础数学在...