ORACLE PL/SQL包(package)学习笔记
包由包规范和包体两部分组成。
1、包规范(Package Specification)
包规范,也叫做包头,包含了有关包的内容的信息。但是,它不包含任何过程的代码。
创建包头的语法一般如下
CREATE [OR REPLACE] PACKAGE package_name {IS | AS}
Procedure_name | function_name | variable_declaration | type_definition | exception_declaration | cursor_declaration
END [package_name];
声明包头还要遵循一些语法规则,如下:
包部件可以以任意次序出现。但是,对象必须在被引用之前进行声明。
所有类型的部件都没有必要都被使用。例如,包可以仅包含过程和函数规范,而没有声明异常处理或类型。
对于过程和函数的所有声明都必须是前向声明。
2、包主体(Package Body)
包主体和包头存储在不同的数据字典中。如果没有对包头进行成功的编译,就不可能对包主体编译成功。主体中包含了在包头中前向子程序声明相应的代码。
包主体是可选的。如果包头不包含任何过程或函数,那么包主体可以没有。这个技术对于声明全局变量是很有用的,因为包中的所有对象在包的外面是可见的。
包头中的所有前向声明必须在包主体中被更新。过程或函数的规范在包头和包主体中必须是相同的。这个规范包括子程序的名字、参数的名字以及参数的模式。
3、包和作用域
在包头中定义的任何对象都有一定的范围,在包以外通过使用包名称限定仍然可以使用这些对象。例如,可以像下面PL/SQL块那样调用InventoryOps.DeleteISBN过程。
BEGIN
InventoryOps.DeleteISBN(‘78824389’);
END;
包过程的调用与单独的过程调用相同,唯一的区别就是在包过程的前面添加了包名称前缀。包过程可以带有默认的参数,可以使用位置表示法或者名称表示法调用它们,就像单独的存储过程一样。
包头中的对象在包主体中可以直接使用,不需要附带包名前缀。
4、包子程序的重载
在包中,过程和函数是可以重载的。这也就意味着可以让多个过程或函数共用同一个名称,但是带有不同的参数。这是一个非常有用的功能特性,因为它让同一个操作可以执行在不同类型的对象上。
下面示例演示了包子程序的重载
CREATE OR REPLACE PACKAGE InventoryOps AS
…
-- Returns an array containing the books with the specified status.
PROCEDURE StatusList(p_Status IN
相关文档:
oracle表空间操作详解
1
2
3作者: 来源: 更新日期:2006-01-04
5
6
7建立表空间
8
9CREATE TABLESPACE data01
10DATAFILE '/ora ......
1. 当前系统日期、时间
select getdate()
2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值
例如:向日期加上2天
&nbs ......
1. 死锁原理
根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。
死锁的四个必要条件:
互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
请求与保持条件(Ho ......
一.按英文字母排序:
select * from table order by nlssort(name,'NLS_SORT=schinese_pinyin_M');
二. 写一个SQL语句,查询选修了5门课程的学生学号和姓名(9分钟)
答:SQL语句如下:
select stu.sno, stu.sname
from student stu
where (select count(*) from s ......
问题:假设有张学生成绩表(tb)如下:
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
想变成(得到如下结果):
姓名 语文 数学 物理
---- ---- --- ......