0%

PLSQL(PLSQL语法+存储过程+触发器)

#web开发/czh_blog/数据库
2017年9月1日 上午10:36

这里知识理解一些概念,有一个基本的认识
知道ORACLE支持哪些功能,以后一个功能呢不好做的时候,来这里瞧瞧,看有没有正好能用上额特性

PLSQL中语法特别的地方

没有逻辑修饰符:|| &&
用这些代替:And or between
等号:是:= 不是=
没有:++ — —
|| 内容拼接 隐式转换成字符串连接

SQL的高级语言特性PLSQL

  1. 所谓的plsql其实就是:sql编程语言一样编程,有高级语言的特性
  2. If switch for loop
  3. Cursor游标 是专门用来解决表中多条数据的情况
    1. 这个高级语言中没有,是数据库语言中特有的
    2. 和loop连用
  4. 类似stl的数据类型
    1. Varray
    2. table
    3. record
  5. 自定义数据类型
    1. type
  6. 异常
    1. 支持自定义抛出异常
      1. 当在函数和存储过程中抛出异常时,可以在调用函数和存储过程的外面进行异常的处理
    2. 支持选择自己处理异常,和oracle系统处理异常
      1. 当没有写exception段时,默认就是让oracle处理异常
  7. package
    1. 这个就是java中的类,不是java中的包
    2. 可以在package中和java一样定义变量,常量,函数(存储过程+函数)等等
    3. packages + package body
    4. 如何操作
      1. 不是java中的先new一个对象,然后用对象调用
      2. Sql中没有new对象,直接使用package名 点就行了

存储过程的构成

  1. 给PLSQL去了个名字方便调用
  2. 存储过程
  3. 传入参数
  4. 传出参数

为什么要封装成存储过程?

  1. 封装之后方便传入传出参数
  2. 匿名块只能在数据库环境中调用 存储过程可以被外界调用(比如JDBC)

函数与存储过程比较:

  1. 函数可以看做一类特殊的存储过程 没有输出参数 必有唯一返回值
  2. 删掉输出参数,添加返回值
  3. 存储过程可以完全的实现函数的功能

如何选择函数与存储过程

  1. 当PL-SQL需要嵌在SQL中使用时用函数
    1. 就像min() max() count()这些函数
  2. 当有多个返回值或者要被其它程序调用时用存储过程

既然利用PLSQL可以实现高级语言的特性,那么当我们实现一个功能的时候,有哪些不同的、或者值得注意的地方

需求:利用存储过程查询含有特定信息的学生id
思路:

  1. 也就是说这个参数可以是学生姓名,生日,电话号等等信息。在java中我们需要对这个特定信息进行判断,写上一堆if,但是在sql中我直接写在where语句中就行了,就省去了判断的过程
  2. 体现了sql的优势,对比与java语言

触发器

  1. 使用触发器的环境:
    1. 业务逻辑是多步骤的 而且可能从任意一个步骤执行 一般用触发器链
    2. 传进来的参数 是一行数据 一般用触发器
  2. 有了存储过程 为什么还要用触发器
    1. 存储过程需要特殊的调用方式
    2. A -> B -> c -> D->
      1. 连锁操作的业务逻辑 用触发器,JDBC只要正常的SQL语句
  3. 触发器要注意的地方
    1. 暂时用不到的触发器全部禁用
      1. 使用disable
    2. 避免逻辑死锁
      1. 一个trigger就是一个线程
      2. 那么,不说自己的创建的线程,光是系统中默认的操作表的线程就有可能和自己的一个trigger线程产生冲突
    3. 尽量避免update触发器中对本表的操作

Sequence 就像一个全局int型变量,他可以一直记录一个变量的值



百度


Mac下不用虚拟机一样可以使用PLSQL Developer - iCoding91 - CSDN博客

%符号 理解成“的”