package程序包和程序体

package---包头
package body---包体

dbms_output.put_line();
上面的输出语句就是一个程序包加存储过程
dbms_output是包的名字, 调用里面的某个方法

包头的语法:
create or replace package 包头名 as
变量的说明...
存储过程或者函数的声明(不需要写实现的代码块)
end;

声明了一个包头, 就要有一个包体与之对应, 去实现包头中写明的存储过程或者函数

包体的语法:
create or replace package body 包体名(这里的这个包体名要和上面定义的包头名字一模一样) as
存储过程或者函数的实现...
end;

调用过程:
declare

begin
包头名.存储过程名或者函数名
end;

代码示例:

create or replace package print_stu is

       TYPE stucursor IS REF CURSOR;
       
       --CURSOR ss IS SELECT.........
       
       PROCEDURE aaaaa(snum IN NUMBER);
       PROCEDURE put_stuinfo(sclass IN NUMBER, stuinfo OUT stucursor);
       
end print_stu;
/
create or replace package body print_stu is

       PROCEDURE aaaaa(snum IN NUMBER) AS
         s_name student.sname%TYPE;
         BEGIN
           SELECT s.sname INTO s_name FROM student s WHERE s.sno=snum;
           dbms_output.put_line(s_name);
         END;
         
       PROCEDURE put_stuinfo(sclass IN NUMBER, stuinfo OUT stucursor) AS
         BEGIN
                 OPEN stuinfo FOR SELECT * FROM student s WHERE s.class=sclass;
         END;
end print_stu;
/

 


oracle三大范式
范式: 就是一个设计数据库定义的一个规则, 为什么叫范式, 因为想出来的这个人姓范

三大范式, 灵活运用, 人的思想是活的
一范式
1, 不存在冗余数据
同一个表中的记录不能有重复----所以主键(必须有)
2, 每个字段必须是不可再分的信息(列不可再分)
根据具体情况, 比如一个身份证号, 保存了许多信息, 但实际上把身份证号整个保存下来就可以了, 这个时候没必要再分了
另一种情况, 需要存两个同样类型的数据, 也是根据具体情况, 再细分
信息的冗余另一种情况:
一个字段是年龄, 一个字段是生日, 信息内容的冗余
二范式(前提: 首先符合第一范式):
消除部分依赖
主要是针对多对多关联的表

第三范式(前提: 首先满足第二范式):
消除传递依赖
主要是针对于 一对多的关系
数据库建表三大范式
1 数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、 删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不 需要的冗余信息。

2 第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型 、日期型等。
3 第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些 字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。
4 第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段ss对任一候选关键字段的传递函数依赖则符合第三范式。所 谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依 赖关系: s 关键字段 → 非关键字段x → 非关键字段y

 

以上为三大范式官方版

以下为自己的理解:
三大范式:
第二范式,消除部分依赖。。
理解:假如一个表有一个联合主键,拿其中一列当作外键连接其他表,而这一列不能独自决定这个表,所以会依赖另外一个主键来决定这个表,为了消除这种部分依赖,用中间表连接。
第三范式,消除传递依赖。。 连接 依赖 主键1外键 依赖 主键2
理解:假如一个表有一个主键,用另外一个表非主键作为外键连接,并不能决定另外一个表,还要依赖另一个表的主键来决定,这样就会出现 连接 依赖 非主键外键 依赖 外表主键
为了消除传递依赖,所以用另外一个表的主键作为外键连接。

posted on 2017-07-03 08:47  缘来狠狂  阅读(163)  评论(0编辑  收藏  举报