第4章Oracle 在PL/SQL中更改数据和管理事物

DML操作的游标属性

游标:

       在Oracle中作为指针来引用该私有工作区
 隐式游标:
       执行一个SQL DML语句(insert、update、delete)以及返回单行的select into时,PL/SQL都会声明和管理一个隐式游标,这种类型的游标就称为隐式的游标。
隐式游标的属性:

         SQL%FOUND  ------如果记录成功获取,返回true;否则就返回false
                   例:
                          begin
                                  update emp set sal = 3100 where enpno = 7788;
                                   if sql%found then
                                         dbms_output.put_line('记录修改成功');
                                     end if ;
                           end;                                    
         SQL%NOTFOUTD -----如果记录获取失败,返回true;否则就返回false
                    例:
                           begin
                                   delete from emp where sal >= 2000;
                                     if SQL%FOUND then
                                       dbms_output.put_line('被开除的高薪员工有' || SQL%ROWCOUNT ||‘人’);
                                     end if;
                             end;
         SQL%ROWCOUNT-----返回从游标中获取的记录数、

2. DML语句的RETURNING字句

例:
      declare
                 v_name varchar(50);
      begin
                 for col in (select empno, ename from emp) loop;
                       update emp set ename = 'temp' where empno = col.empno
                  retuening ename into v_name;
                  dbms_output.put_line();
                 end loop;
      end;

3. 事物、事物的回滚与提交

1. 原子性
       事物不是一个可以分割的单元
 2. 一致性
       事物必须使系统从一个一致性状态变换到另一个一致性状态
3. 隔离性
       每个事物必须独立与其他事务执行
4.持久性
       确保事物完成后,对数据的修改是永久性的,即使接下来发生系统鼓掌也不会对其有任何影响

commit(提交) 、 rollback(回滚)
例:
declare
begin
update demp set name = ‘a’ where id = 1;
commit;
update demp set name = ‘b’ where id = 2;
rollback; – 程序执行到这里会清除前面没提交存在内存中的数据;
update demp set name = ‘c’ where id = 3;
commit;
end;

第3章oreaclePL/SQL程序结构控制

oreaclePL/SQL程序结构控制

总结:

PL/SQL程序流程的控制结构,包括条件控制,循环控制,顺序控制以及异常处理可以控制程序流程.
PL/SQL中的【条件控制】语句有IF语句、CASE语句、
PLSQL中的【循环控制】语句有LOOP语句、WHILE语句和FOR语句.
当PL/SQL中发生错误时、不管是系统错误、还是应用错误,都会抛出一个异常,此时当前PL/SQL块执行部分的处理就会终止,程序流程就会转到当前块的异常处理部分来处理异常. 异常处理完成后,程序就马上跳出PL/SQL块。
PL/SQL异常分为系统异常和自定义异常两只类型
异常处理的流程包括定义异常、抛出异常和处理异常三个步骤。
异常的定义可以通过exeception关键字定义,此外还可以通过:异常名exeception_int 和exeception关键字来定义
使用raise语句可以抛出自定义异常或系统异常.而使用Oreacle的内置过程处理抛出的异常,我们必须在异常处理部分编写异常处理器。
下面详细写下用法:
条件控制:
if 条件1 then
如果条件1为真就返回ture
elsif 条件2 then
如果条件1为假就执行条件2返回true
else
以上条件都不为真就执行else语句
end if;
CASE 语句和CASE表达式:
case
when 10 then
如果等于10的条件为真就是true
when 20 then
如果等于20的条件为真就是true
when 30 then
如果等于30的条件为真就是true
end case;
CASE第二中表达式:
case
when 10 then
else
如果条件10不成立就执行else中的语句
end;

循环控制:

基本循环
LOOP
v_int :=v_int+1;
exit when v_nt>15; 循环退出条件必须:exit when关键字
end loop;

while循环

只有条件为trun的时候才执行体内的语句
when 条件1 loop
条件为真的是才执行循环体内的语句
end loop;

for循环:

for i变量 in 1..100循环 loop
dbms_output.put_line(‘i’);
end loop;

异常处理:

定义异常
declare
v-info int exeception; 定义异常
v_info1 int exeception; 抛出异常
begin
raise v_info1 抛出
exception
when others then
dbms_out.put_line(‘定义的异常others异常的父类关键字’);
end;
exeption
when v_info1 then
dbms_out.put_line(‘抛出v_info1异常处理’);
end;

系统异常

人为抛出的系统异常raize_pplication_error关键字
declare
begin
if 条件1 then
raize_pplication_error(-20001,’该部门不存在!’);
end if;
end;

第2章PL/SQL编程基础


PL/SQL编程基础
PL/SQL简介

PL/SQL块的基础结构:
declare
定义部分——定义常量、变量、复杂数据类型、游标、用户自定义异常
begin
执行部分– PL/SQL语句和SQL语句
exception
异常处理部分–处理运行错误
end
块结束标记
编写PL/SQL语句时,执行部分是必须的,而其它两个部分是可选的。
2、PL/SQL块的类型
a、匿名块
既可以内嵌到应用程序中,也可以在交互环境中直接使用
例 :
declare
v_name varchar2(50);
begin
dbms_output.put_line(‘wwww’);
end;
b、子程序
a.过程
例:
create or replace procedure pro_name is
v_name varchar2(50);
begin
dbms_output.put_line(‘过程’);
b.函数
例:
create or replace function fun_name return varchar2 as
v_name varchar2(50);
begin
v_funvar:= “函数变量”;
dbms_output.put_line(‘函数’);
return v_funvar;
```
c.包
/包规范/
create or replace package 包名is
/包方法定义/
procedure proc_name_sal_info(id in int);
end 包名;
/包体/
create or replace package body pack_info is
/包规范中定义的方法在包体中实现/
procedure proc_name_sal_info(id in int) is
type cur_name is ref cursor;
cur_info cur_name;
cur_name_sal emp%rowtype;
begin
open cur_info for select from emp where empno=id;
loop
fetch cur_info into cur_name_sal;
exit when cur_info%notfound;
dbms_output.put_line(‘ID:’||cur_name_sal.empno|| ‘姓名:’||cur_name_sal.ename ||’工资:’ ||cur_name_sal.sal);
end loop;
close cur_info;
end;
end pack_info;
/
call测试/
call pack_info.proc_name_sal_info(7369);
/
匿名块测试/
declare
begin
pack_info.proc_name_sal_info(7369);
end;
c、触发器
/
触发器*/
create or replace trigger 触发器名称
before insert on t_dempt – 在什么之前关键字before或之后关键字after on是哪张表表名
for each row –行级触发器默认不填是语句级触发器
begin
select id_seq.nextval into :new.id from dual;
end;
3.数据类型与变量

  1. 标量变量
    指只能存入单个数值的变量
    varchar2(n)、char(n)、number(m,n)(m表示精度,表示指定数子的总位数,n表示小数点后面数字的位数)、date
    2.使用%TYPE属性
    例:
        declare
        v_loc dept.loc%type;
        begin
         select loc into v_loc from dept where deptno = 10;
        dbms_output.put_line(v_loc);
        end;
    

第1章oreacle数据库基本概念

第一章oreacle数据库基本概念

  1. Oracle发展史
    1977年6月 SDL—-软件开发实验室
    1979年 SDL更名为RSI—-关系型有限公司
    1979年 发布第一个商用SQL关系型数据库管理系统(不稳定,缺少很多重要功能)
    1983年3月 Oracle 第3版 (具有了“可移植性”的功能)
    1984年10月 Oracle 第4版 (稳定性得到增强)
    1985年 Oracle 第5版 (可以在C/S模式下运行的RDBMS产品)
    1988年 Oracle 第6版 (BUG众多、不稳定、差点破产)
    1992年6月 Oracle 第7版 (真正出色的传品,取得重大成功,引入一种新的优化器)
    1997年6月 Oracle 第8版 (为支持INRERNET,网络计算机奠定了基础)
    1998年9月 Oracle 第8i版 (为数据库用户提供了全方位的JAVA支持)
    2001年6月 Oracle 第9i版(最重要应用集群服务器)
    2003年9月 Oracle 第10g (加入了网格计算的功能)
    2007年7月 Oracle 第11g (在性能、可升级性、可管理性以及可诊断性上有了提升)
    2.PL/SQL
    PL/SQL新功能
    1. 变量定义
    2. 控制结构
    3. 自定义的子程序
    4. 对象类型
      PL/SQL优点
      1、提高应用程序性能 ()
      2、提供模块化程序开发能力(可以将业务逻辑集成到PL/SQL命名块(存储工程、函数、触发器、包)中)
      3、具有良好的兼容性(不同的Oracle工具都可以用相同的PL/SQL脚本)
      4、允许定义标识符(可以在PL/SQL中定义变量、常量、游标、异常等各种标识符)
      5、提供了程序控制结构(可以在PL/SQL中使用选择语句、循环语句等结构化编程语言的控制结构)
      6、提供了异常处理(通过PL/SQL提供的异常处理机制,可以处理各种Oracle和PL/SQL异常)
  2. Oracle数据库体系架构
    指Oracle数据库管理系统的组成部分和这些组成部分之间的相互关系,包括内存结构、后台进程、物理与逻辑结构等。
    1、 Oracle内存结构

    1、共享内存区(主要由SGA (System Global Area)组成)
    SGA:(划定一个区域,存储每个用户所需要存取的数据,以及ORACLE运行时所必备的系统信息 此区域称为系统全局区)
        a、数据库缓存区 (database buffer cache)
           用来存放读取自数据文件的数据块副本,或者用户曾经处理过的数据
    
        b、重做日志缓冲区(redo log buffer)
          记录数据库内所有数据修改的内存区域
        c、共享池(shared pool)
           a、库缓存 (library cache)
           b、数据词典缓存(dictionary cache)
        d、其他区域
    
    2、非共享内存区(主要由PGA(Program Global Area)组成)
    PGA:(用户存放服务器进程的数据和控制信息)
        a、排序区(sort area)
           用于存放排序操作所产生的临时数据
         b、会话信息(session informatio)
           存放会话所具有的的权限、角色以及会话的性能统计信息
        c、游标状态(cursor state)
           运行SQL语句在共享池中为SQL语句分配上下文区,该上下文区的指针就是指游标
        d、堆栈空间(stack space)
           用户存放会话的变量信息
    
    1. Oracle 后台进程
      a、数据写进程(DBWR)
          将数据库缓存区内改动过的数据块写入到硬盘内的数据文件
      b、日志写进程(LGW仄R)
          将冲工作日志缓冲区中的更改写入重做日志文件
      c、系统监控(SMON)
           数据库不正常关闭,下一次开启数据库时由系统监控修复数据库
      d、进程监控(PMON) 
          进程失败时清理资源
      e、检查点进程(CKPT)
          告诉缓存中的更改永久的巨鹿在数据库中,更新控制文件和数据文件中的数据库状态信息
      f、归档进程(ARCH)
           把已满的日志组进行备份或归档
      
    2. Oracle逻辑和物理结构
      1. Oracle数据库逻辑结构
        a、表空间
        存放不同类型的数据与数据库对象
        
        b、块
        数据库中最小的存储单元
        
        c、段
        在数据表空间能划分出不同区域,存放不同数据,此区域就称为段
        
        d、区
        连续的数据块
        
        1. Oracle物理逻辑结构
          a、数据文件(data file)
          数据表、索引
          
          b、重做日志文件(redo log file)
          1. 联机重做日志文件
            数据库正常运行所必须的
          2. 归档重做日志文件
            只有在数据库运行在归档方式下才生成
            c、控制文件(control file)
            记录与描述数据库试题结构
            d、初始化参数文件(initialization parameter file)
            e、口令文件(password file)

序列的创建
create sequence 序列名 increment by 增加 start with 起始数字

MYSQL数据库总结篇

– 第一章
/
数据库分类
1 网状
2 层次
3 关系
4 对象
关系型数据库
表之间的关系: 1 一对一
2 一对多
3 多对多
SQL语句:1.DDL
2.DQL
3.DML
4,DCL
– 第二章
创建数据库、表
create database 库名
create table 表名
修改表名、删除列名、修改列名、添加列、备份
增加列 ALTER TABLE t_class ADD COLUMN 列名 类型 – column可省略
修改列 ALTER TABLE t_class CHANGE 列名 新列名 新列类型
删除列 ALTER TABLE t_class DROP COLUMN nam – column可省略
备份表 CREATE TABLE 新表名 SELECT
FROM 旧表名
数据类型
decimal(m,n) 总长度和小数点后长度
char 默认长度为1 最大长度为16
varchar()后面必须跟参数
– 第三章
数据完整性
1 实体完整性
2 域完整性
3 引用完整性
4 自定义完整性
constraint foreign key 列 references 列
必须申明表的类型 engine=innodb
还有字符的编码集 charset=’utf8‘;
– 第四章
添加、删除、修改
delete from 表名
truncate table 表名
– 第五章
select * from 表名
模糊查询 where like’_%’
and or not
在什么与什么之间 between and
in
运算符
order by 列名 asc
desc
limit
select distinct 列 from 表 去重复
AS
– 第六章
MAX() 求最大值
Min() 求最小值
count() 统计所有数据
sum() 求总和
avg() 求平均值
Group by 分组
having (having可以使用聚合函数的过滤条件 where不能使用聚合函数可以使用比较运算符===having和where都是过滤条件)
SQL执行顺序
select 1.from 某张表
2.where 进行条件筛选
3.group by 条件筛选完后进行那一列的分组
4.select 分组之后执行查询某张表某一列的数据
5.having 进行函数过滤进行条件
6.order by 进行排序操作
7.limit 返回这张表需要显示多少行
– 第七章
组合查询
子查询
union 两张表进行连接以列的形式显示数据
exists() 存在 结果为真就真,假为假
all() 满足所有数据
any() 满足任意数据
– 第八章
多表的连接
内连接:where
外连接: 表1 left join 表2 on 条件
表1 right join 表2 on 条件