Oracle数据库入门

时间:2022-10-16 12:22:56

Oracle数据库基本概念

  1. PL/SQL( Procedural Language/SQL )是Oracle公司对关系型数据库的标准语言SQL的过程化语言扩展。

    PL/SQL拥有而SQL没有的特征:①变量定义;

                      ②控制结构;

                      ③自定义的子程序;

                      ④对象类型;

  2. PL/SQL块是组成PL/SQL程序的最基本单元。

    块:匿名块;

      命名块:子程序、 包、触发器(使用命名块可以实现模块化编程, 优化应用程序性能)

      匿名块代码放在客户端,命名块代码放在服务器端。

  3. PL/SQL块的编译过程:每一个匿名PL/SQL块执行时,代码被送到服务器上的PL/SQL引擎,这里PL/SQL块被编译。而命名PL/SQL块只在块创建或修改时被编译。

    编译过程包括语法检查、绑定、伪代码产生。命名PL/SQL块的成功编译并不保证代码将来能被成功执行。

    使用PL/SQL的好处:

        ①提高应用程序性能;

        ②提供模块化程序开发能力;

        ③具有良好的兼容性;

        ④允许定义标识符;

        ⑤提供了程序控制结构;

        ⑥提供了异常处理。  

  4. Oracle内存结构

      Oracle内存结构主要可以分为共享内存区和非共享内存区,共享内存区主要由SGA( System Global Area )组成,非共享内存区主要由PGA( Program Global Area )组成。

    Oracle数据库运行时会现在内存内规划一个固定区域,用来存储每个用户所需存取的数据,以及Oracle运行时必备的系统信息。我们称此区域为系统全局区,简称SGA。SGA包括几个重要的区域:数据库缓存区、重做日志缓冲区、共享池、其他区域(如 Large Pool等)。

    PGA用户存放服务器进程的数据和控制信息,它是独立于SGA的一块内存区域。当用户进程连接到Oracle服务器时,Oracle服务器会为每个服务器进程分配相应的PGA,当服务器进程时,Oracle会自动释放PGA所占用的内存空间。PGA由排序区、会话信息、游标状态、堆栈空间等4部分组成。

  5. 

   视图是从一个或多个表中通过查询语句生成的一种虚表,创建视图的语法:

   1 create or replace view view_name as sql语句;   

   同义词就是数据库对象的别名,创建同义词的语法:

   1 create public synonym 同义词名称  for 数据库对象名; -- 公有同义词

   1 create public 同义词名称  for 数据库对象名; -- 私有同义词

   序列是Oracle中的一种特殊对象,用于实现数据库表的主键列的自动增长,创建序列的语法:

   1 create sequence 序列名 increment by 增量种子数 start with 起始数字 maxvalue 最大值; 

PL/SQL编程基础

  1. PL/SQL块简介

    块是PL/SQL的基本程序单元,块的嵌套没有限制。PL/SQL由3个部分组成:定义部分、执行部分、异常处理部分。 

    create 

    /* 定义部分——定义常量、变量、复杂数据类型、游标、用户自定义异常 */

    begin

    /* 执行部分——PL/SQL语句和SQL语句  */

   exception

    /* 异常处理部分——处理运行错误  */

   end;

  2. PL/SQL块的类型

    根据需要实现的应用模块功能,可以将PL/SQL块分为匿名块、子程序、触发器。

      匿名块:动态构造,可以直接执行的块,匿名块既可以内嵌到应用程序,也可以在交互环境中直接使用。

      子程序:包括存储过程、函数、包。可以简化客户端程序的开发和维护,并且提高应用程序性能。

          过程:用于执行特定操作,既可以指定数据参数,也可以指定输出参数。

          函数:用于返回特定数据,在函数头部必须包含return语句。

          包:用于逻辑组合相关的过程和函数,它由包体和包规范2部分组成。

            包规范:只包含了过程和函数的说明,而没有过程的函数的实现代码。

            包:体用于实现包规范中的过程和函数。

      触发器:是指隐含执行的存储过程。当定义触发器是必须指定触发事件以及触发操作。

程序控制结构

条件控制: 

  if语句 eg:

 if 条件1 then sql 语句 elsif 条件2 then sql语句 else sql语句 end if; 

  case语句 eg: 

1 case selector
2     when expression1 then sequence_of_statement1;
3     when expression2 then sequence_of_statement2;
4     when expression3 then sequence_of_statement3;
5     ...
6     when expressionN then sequence_of_statementN;
7 end case;
1 case v_deptNo
2      when 10 then sequence_of_statement1;
3      when 20 then sequence_of_statement2;
4      when 30 then sequence_of_statement3; 
5 end case;

循环控制:

  基本循环:

1 loop
2     statement1;
3     exit[when condition];
4 end loop;

  while循环:

1 while condition loop
2     statement1;
3     statement2;
4     ...
5 end loop;

  for循环:

1 for counter in [reverse] lower_bound..upper.bound loop
2     statement1;
3     ...
4 end loop;

异常处理:

常见预定义异常: 

  ACCESS_INTO_NULL     未定义对象

  CASE_NOT_FOUND      CASE中若未包含相应的WHEN ,并且没有设置ELSE 时

  CURSER_ALREADY_OPEN       游标已经打开

  DUP_VAL_ON_INDEX         唯一索引对应的列上有重复的值

  INVALID_NUMBER         内嵌的SQL语句不能将字符转换为数字

  TOO_MANY_ROWS         执行select into 时,结果集超过一行

  ZERO_DIVIDE         除数为0  

  LOGIN_DENIED         PL/SQL 应用程序连接到oracle 数据库时,提供了不正确的用户名或密码

  NOT_LOGGED_ON         PL/SQL 应用程序在没有连接oralce 数据库的情况下访问数据

 在PL/SQl中更改数据和和管理事务

forall语句的语法:

 1 forall index in lower.bound..upper.bound sql语句; 

Oracle 将一组sql语句组成的一个逻辑工作单元看作是一个数据库事务。一个逻辑工作单元必须有四个属性,成为ACID(原子性、一致性、隔离性、持久性):

  基本事务处理包含如下几个方面:

    ① 开始事务;

    ② 执行SQL语句;

    ③ 提交事务;

    ④ 回滚事务(执行rollback语句)。

  事务的隔离级别:

    为提交读:最低的最危险的隔离级别,事务容易受脏读的影响

         脏读:是数据一致性问题中的一种,当一个事务读被其他事务更改但还没有提交数据时,就发生了脏读。

    提交读隔离级别:不会发生脏读,但不能防止不可重复读;

    可重复读隔离级别:同时防止脏读和不可重复读;,但可能发生幻读;

         幻读:是数据一致性问题中的一种,与可重复读类似但它考虑的是当前事务作用于某个表时,其他事务向该表中添加新纪录的情况。

    可串行化隔离级别:防止脏读、不可重复读、幻读,但性能低。

在PL/SQL使用游标获取

游标的状态可以由游标的属性来获取,游标属性以“%属性名”的形式加在游标名之后。

6个游标属性:

  %found、%notfound、%rowcount、%isopen、%bulk_rowcount、%bulk_exception

使用隐式游标: 1 select 列表列名 [bulk collection] into PL/SQL变量列表 2 ...select语句的其他部分... 

使用显式游标:步骤:声明、打开、提取记录、关闭

       1)声明:

1 cursor 游标名[ (游标参数列表) ] [ return 返回值规范 ]
2     is select 语句
3         [ for update [ of [列名列表] ] ];

       2) 打开游标:open  显示游标名(参数列表);

       3) 提取记录:fetch  游标名  into  记录或变量列表;

       4) 关闭显示游标:close 游标名;

开发PL/SQl子程序和包

子程序:是已命名的Pl/SQl块,可带参数并可在需要时随时调用。

子程序的优点:模块化、可重用性、可维护性。

    类型:过程:用于执行特定操作;

       函数:用于返回特定数据。

开发存储过程:

1 create or replace procedure procedure_name(argument1 [ model ] datatype1,argument2[ model datatype2, ...) 
2 is [as]
3 PL/SQL语句;

开发函数:

1 create or replace function function_name(argument1 [ model ] datatype1,argument2[ model datatype2, ...) 
2 return datatype
3 is | as
4 PL/SQl语句;

建立包规范:

1 create or replace package package_name
2 is | as
3   public type and item declarations
4   subprogram specifications
5 end package_name;

建立包体:

1 create or replace package body package_name
2  is | as
3    public type and item declarations
4    subprogram body
5  end package_name;

调用包组件:包名.组件名;

子程序重载:包名相同,参数列表不同

包的优点:

  ① 模块化;

  ② 更轻松的应用程序设计;

  ③ 信息隐藏;

  ④ 性能更佳。