#web开发/czh_blog/数据库
2017年9月1日 上午10:36
这里知识理解一些概念,有一个基本的认识
知道ORACLE支持哪些功能,以后一个功能呢不好做的时候,来这里瞧瞧,看有没有正好能用上额特性
PLSQL中语法特别的地方
没有逻辑修饰符:|| &&
用这些代替:And or between
等号:是:= 不是=
没有:++ — —
|| 内容拼接 隐式转换成字符串连接
SQL的高级语言特性PLSQL
- 所谓的plsql其实就是:sql编程语言一样编程,有高级语言的特性
- If switch for loop
- Cursor游标 是专门用来解决表中多条数据的情况
- 这个高级语言中没有,是数据库语言中特有的
- 和loop连用
- 类似stl的数据类型
- Varray
- table
- record
- 自定义数据类型
- type
- 异常
- 支持自定义抛出异常
- 当在函数和存储过程中抛出异常时,可以在调用函数和存储过程的外面进行异常的处理
- 支持选择自己处理异常,和oracle系统处理异常
- 当没有写exception段时,默认就是让oracle处理异常
- 支持自定义抛出异常
- package
- 这个就是java中的类,不是java中的包
- 可以在package中和java一样定义变量,常量,函数(存储过程+函数)等等
- packages + package body
- 如何操作
- 不是java中的先new一个对象,然后用对象调用
- Sql中没有new对象,直接使用package名 点就行了
存储过程的构成
- 给PLSQL去了个名字方便调用
- 存储过程
- 传入参数
- 传出参数
为什么要封装成存储过程?
- 封装之后方便传入传出参数
- 匿名块只能在数据库环境中调用 存储过程可以被外界调用(比如JDBC)
函数与存储过程比较:
- 函数可以看做一类特殊的存储过程 没有输出参数 必有唯一返回值
- 删掉输出参数,添加返回值
- 存储过程可以完全的实现函数的功能
如何选择函数与存储过程
- 当PL-SQL需要嵌在SQL中使用时用函数
- 就像min() max() count()这些函数
- 当有多个返回值或者要被其它程序调用时用存储过程
既然利用PLSQL可以实现高级语言的特性,那么当我们实现一个功能的时候,有哪些不同的、或者值得注意的地方
需求:利用存储过程查询含有特定信息的学生id
思路:
- 也就是说这个参数可以是学生姓名,生日,电话号等等信息。在java中我们需要对这个特定信息进行判断,写上一堆if,但是在sql中我直接写在where语句中就行了,就省去了判断的过程
- 体现了sql的优势,对比与java语言
触发器
- 使用触发器的环境:
- 业务逻辑是多步骤的 而且可能从任意一个步骤执行 一般用触发器链
- 传进来的参数 是一行数据 一般用触发器
- 有了存储过程 为什么还要用触发器
- 存储过程需要特殊的调用方式
- A -> B -> c -> D->
- 连锁操作的业务逻辑 用触发器,JDBC只要正常的SQL语句
- 触发器要注意的地方
- 暂时用不到的触发器全部禁用
- 使用disable
- 避免逻辑死锁
- 一个trigger就是一个线程
- 那么,不说自己的创建的线程,光是系统中默认的操作表的线程就有可能和自己的一个trigger线程产生冲突
- 尽量避免update触发器中对本表的操作
- 暂时用不到的触发器全部禁用
Sequence 就像一个全局int型变量,他可以一直记录一个变量的值
百度
Mac下不用虚拟机一样可以使用PLSQL Developer - iCoding91 - CSDN博客
%符号 理解成“的”