Oracle的进一步了解
目录
一.PL/SQL编程
基本了解
概念
优点
语法结构
二.PL/SQL运算符
关系运算符
一般运算符
逻辑预算符
三.PL/SQL控制语句
条件控制
IF-THEN语句
IF-THEN-ELSIF语句
循环控制
LOOP死循环
WHILE-LOOP循环
FOR-LOOP循环:
异常
预定义异常
oracle自定义函数
函数
函数的调用
自定义函数
三.数据库对象
1.基本概念:
2.Oracle同义词
公用Oracle同义词
案例:#创建公有Oracle同义词的语法
3.Oracle序列
eg:创建序列
eg:使用序列
四.触发器
1.基本概念
2.触发器分类
3.触发器语法
4.触发器功能
一.PL/SQL编程
基本了解
概念
是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的扩展语言;
使用PL/SQL 可以编写具有很多高级功能的程序
可以在一定程度上避免了频繁于数据库的请求
优点
使SQL语句更具模块化程序的特点
具有更好的可移植性; 可以移植到另一个Oracle数据库中
减少了程序网络的交互(数据了访问), 提高程序性能
语法结构
PL/SQL中可以使用: select insert update delete…(SELECT 语句在PL/SQL中的写法稍微有改变,需要带上伪表)事务语句以及sql函数;增删改别忘了 COMMIT 提交事务
不允许直接使用:create deop alter 但可以通过动态SQL来执行它们
PL/SQL语句由三个部分组成:声明部分 执行部分 异常处理部分
declare-- declare 声明部分: variable_name [CONSTANT] type[(size)] [NOT NULL] [:=value]; -- variable_name:变量名称-- [CONSTANT] :可选表示是否为常量-- type :表示变量的数据类型-- [(size)] :可选,数据类型的长度-- [NOT NULL] :可选,该变量是否可以为空-- [:=value] :可选,使用 := 给对于对象赋值 初始值;--在此声明PL/SQL用到的变量,常量,类型,游标 以及局部的存储过程和函数;
begin-- begin~end 必须项,执行部分:-- 在此编写执行的过程 及 SQL语句,即程序的主要部分;exception-- exception 可选,指定出现错误时需要执行的操作(异常)
end;-- end: 表示Pl/sql块的结束,别忘了分号结尾;-- 是PL/SQL中的单行注释 /**/ 多行注释;
--变量名规范
-- 变量名首字母必须是英文字母
-- 其后可以是字母、数字或者特殊字符$、#和下划线
-- 变量名长度不超过30个字符
-- 变量名中不能有空格 不能是SQL保留字 不能用 - (减号)
-- 不区分大小写
二.PL/SQL运算符
关系运算符
<>, !=, ~=, ^= 不等于
其他与Java类同
一般运算符
:=赋值号
=>关系号
. . 范围运算符
︳︳字符连接符
逻辑预算符
iN 在一列值之间
其他与SQL server同
三.PL/SQL控制语句
控制结构共有三种类型:条件控制 循环控制 顺序控制
条件控制
IF-THEN语句
- IF 布尔表达式 THENPL/SQL和SQL执行语句END IF; -
IF-THEN-ELSIF语句
IF 布尔表达式
IF 布尔表达式1 THENPL/SQL和SQL执行语句1ELSIF 布尔表达式2 THEN --注意:是ELSIF而不是ELSEIFPL/SQL和SQL执行语句2ELSEPL/SQL和SQL执行语句3END IF;
CASE语句
类似于Java的Switch在Oracle 9i 后引入,依据表达式,选择相应的when子句执行
CASE WHEN 值1 THEN PL/SQL和SQL执行语句1;WHEN 值2 THEN PL/SQL和SQL执行语句2;.....WHEN 值n THEN PL/SQL和SQL执行语句n;[ELSE else_statements;] --可选:相当于default 都不符合则执行..END CASE;
循环控制
LOOP死循环
LOOPPL/SQL和SQL执行语句; END LOOP; --实现计数器功能,当计数器为10或者大于10时退出 DECLAREv_count integer := 1; --声明变量 BEGINLOOP --死循环开始v_count:=v_count+1; --变每次+1IF v_count>=10 THEN --判断变量 大于等于10 EXIT; --退出循环 END IF; --IF 结束END LOOP; --死循环结束 END; --PL/SQL块结束
WHILE-LOOP循环
WHILE 布尔表达式 LOOPPL/SQL和SQL执行语句; END LOOP;
FOR-LOOP循环:
FOR 变量名 in 最小值..最大值 loop 循环执行的语句; END LOOP; -- ..两点表示在其中范围~eg: 1..20 循环从1开始20结束; beginfor i in 1..20 loopinsert 表 value(i,值1,值2,值3);COMMIT; --提交事务~end loop; COMMIT; --或放在最后统一提交事务~-- 后面在加一个异常处理,如果出现异常 ROLLBACK; 回滚数据; end;
异常
在运行过程中出现的错误叫做异常
发生异常后, 语句将停止执行,PL/SQL引擎立即将控制权转到 PL/SQL的异常处理部分
注意事项
这里说的是 执行过程中的异常, 并不包含编译的异常…
异常处理exception 用来处理正常执行过程中未预料的事件…
两种比较经典的异常: 预定义异常 和 用户自定义异常
预定义异常
用户可以在 PL/SQL 块的声明部分定义异常,自定义的异常通过 RAISE语句 显式引发
RAISE_APPLICATION_ERROR 还可以重新定义异常错误消息,为应用程序提供一种与Oracle交互方法 语法: RAISE_APPLICATION_ERROR(err_number,err_message); err_number: 表示为用户异常标识指定的编号, 注意范围必须是 -20999~20000之间负整数’ err_message: 用户为异常指定的文本信息…长度可达 2049字节
oracle自定义函数
create or replace function 函数名(参数1 模式 参数类型) return 返回值类型 as 变量1 变量类型; 变量2 变量类型; begin 函数体; end 函数名;
注意事项:
参数的模式有3种:(如果没有注明, 参数默认的类型为 in.)
in: 为只读模式, 在函数中, 参数的值只能被引用, 不能被改变;
out: 为只写模式, 只能被赋值, 不能被引用;
in out: 可读可写.
as/is二选一,在这里没有区别。
可以不定义局部变量。
可以没有异常(exception)处理代码段。
eg:创建自定义函数maxvalue,用于比较两个数字的大小,返回较大值:
create or replace function maxvalue(val1 number,val2 number) return number asval number; -- 定义局部变量,存放返回值。 beginif (val1>val2) then -- 判断传入参数的大小。val:=val1; -- 赋值是":=",不是"="。elseval:=val2;end if; return val; -- 返回 end; /
函数
函数的调用
自定义函数的调用与Oracle数据库自带的函数调用的方法相同。
select f_name(123) from dual;
自定义函数
eg:定义一个函数,求1+2+3+……+100的和并返回。
create or replace function work4 (a number ,b number ) return number as sums number :=0; beginfor i in a..b loopsums:=sums+i; end loop; return sums;end;
eg:递归求出第21位 1,1,2,3,5,8,13,21...
create or replace function work3 (nums number) return number as results number :=0; begin if nums = 1 or nums =2 thenreturn 1;else return work3(nums-1)+work3(nums-2);end if ;end;select work3(21) from dual
三.数据库对象
1.基本概念:
数据库中的对象是我们进行数据管理的基本
Oracle数据库数据对象中最基本的是表和视图,其他还有约束、序列、函数、存储过程、包、触发器等。对数据库的操作可以基本归结为对数据对象的操作
2.Oracle同义词
同义词也是虚的一个逻辑对象,不会存储任何数据。本质上算是其他数据对象的一个别名。同时可以将同义词的权限分配给不同的用户,作为安全管理的一种方式。
Oracle同义词分类
公用Oracle同义词
由一个特殊的用户组Public所拥有。
顾名思义,数据库中所有的用户都可以使用公用同义词。
公用同义词往往用来标示一些比较普通的数据库对象,这些对象往往大家都需要引用。
私有Oracle同义词
它是跟公用同义词所对应,他是由创建他的用户所有。当然,这个同义词的创建者,可以通过授权控制其他用户是否有权使用属于自己的私有同义词。
案例:#创建私有同义词
eg:Oracle同义词创建及删除
create [or replace] sysnonym aa for scott.emp; #aa为名字,可自定义,执行如果出现权限不足错误,可以使用管理员给予权限 #给予权限:使用sys登录后,手动点击user找到scott用户,点击编辑,给系统权限加:create synonym--创建私有同义词 #查看同义词 select * from aa;--使用同义词得到emp表数据,后期有需求再用,先理解制作方式。
案例:#创建公有Oracle同义词的语法
create public synonym 同义词名称 for [username.]objectName;#会提示权限不足 #解决权限问题:使用sys登录后给予权限 grant create public synonym to scott; #撤销权限 revoke create public synonym from scott; #删除公有同义词 Drop public synonym 同义词名称
3.Oracle序列
序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。不占用磁盘空间,占用内存
其主要用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。
eg:创建序列
create sequence sequence_name //创建序列名称
[increment by n] //递增的序列值是 n 如果 n 是正数就递增,如果是负数就递减 默认是 1
[start with n] //开始的值,递增默认是 minvalue 递减是 maxvalue
[{maxvalue n | NOMAXVALUE}] //最大值
[{minvalue n | NOMINVALUE}] //最小值
[{cycle | nocycle}] //循环/不循环
[{cache n | nocache}];//分配并存入到内存中eg:使用序列
(序列创建后,可以使用序列的NEXTVAL来获取序列的下一个值,使用CURRVAL来查看当前值。第一次使用必须先使用NEXTVAL来产生一个值后才可以使用CURRVAL进行查看。)
#序列调用 产生一个新的序列 select seq_test.nextval from dual #查看当前序列的值 select seq_test.currval from dual #删除序列 drop sequence t1_seq;
nextval返回序列中下一个有效的值,任何用户都可以引用
currval
中存放序列的当前值,NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效
四.触发器
1.基本概念
触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行
2.触发器分类
DML触发器
系统事件触发器: [了解]
DDL触发器; [了解]
3.触发器语法
create [or replace] tigger 触发器名 触发时间 触发事件 on 表名 [for each row] beginpl/sql语句 end-- 触发器名- 触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。 -- 触发时间-- 指明触发器何时执行,该值可取:-- before-- 表示在数据库动作之前触发器执行;-- after-- 表示在数据库动作之后触发器执行。 -- 触发事件-- 指明哪些数据库动作会触发此触发器:-- insert-- 数据库插入会触发此触发器;-- update-- 数据库修改会触发此触发器;-- delete-- 数据库删除会触发此触发器。 -- 表名-- 数据库触发器所在的表。 -- for each row-- 对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。
4.触发器功能
允许/限制对表的修改
自动生成派生列,比如自增字段
强制数据一致性
提供审计和日志记录
防止无效的事务处理
启用复杂的业务逻辑
eg:创建一个触发器MyTrigger,它的作用是当表scott.dept中的deptno列的值发生变化时, --自动更新表scott.emp中的deptno列的值,从而保证数据的完整性
create or replace trigger MyTrigger
after
update
on scott.dept
for each row begin update scott.emp set deptno = :new.deptno where deptno = :old.deptno;end;select * from scott.emp
eg: 在scott.dept表上创建一个触发器,当删除该表中的记录时,可以同时删除EMP表中记录,保证参照完整性
create or replace trigger trigger65
after
delete on scott.dept
for each row begin delete scott.emp where deptno = :old.deptno;end;delete scott.dept where deptno=50;
Oracle的进一步了解相关推荐
- oracle 10g 新特性中文笔记
第三章 装载和卸载数据 目标 完成本课,您将会: *在不同的平台传输表空间 *理解数据泵的总体结构 *监控数据泵作业 *使用数据泵来进行导入和导出 *为数据的population创建外部表 *定义外表 ...
- PHP新手上路(十二)
11. 数据库连接 在上一节里,我们已经介绍了PHP与MySQL数据库的一些基本操作知识,在互联网中有关PHP与MySQL的教程也最多.MySQL是免费的,这一点也许就吸引了不少人.由于其广泛应用, ...
- update se_Java SE 7 Update 25 –发行说明进行了解释。
update se 昨天是CPU日. Oracle通过6月的Java重要补丁更新发布了Java SE更新25 . 在4月的最后一次重大更新之后,这是最后一次与Oracle其他所有Oracle产品都不适 ...
- moxy json介绍_MOXy作为您的JAX-RS JSON提供程序–服务器端
moxy json介绍 在之前的系列文章中,我介绍了如何利用EclipseLink JAXB(MOXy)创建RESTful数据访问服务. 在本文中,我将介绍在服务器端利用MOXy的新JSON绑定添加对 ...
- Java SE 7 Update 25 –发行说明进行了解释。
昨天是CPU日. Oracle通过6月的Java重要补丁更新发布了Java SE更新25 . 在4月的最后一次重大更新之后,这是与所有其他Oracle产品一起不符合Oracle关键补丁更新计划的最后一 ...
- MOXy作为您的JAX-RS JSON提供程序–服务器端
在以前的系列文章中,我介绍了如何利用EclipseLink JAXB(MOXy)创建RESTful数据访问服务. 在本文中,我将介绍在服务器端利用MOXy的新JSON绑定添加对基于JAXB映射的JSO ...
- Bridging the Gap between Training and Inference for Neural Machine Translation翻译
Bridging the Gap between Training and Inference for Neural Machine Translation 翻译 原文链接:https://arxiv ...
- 《道俗即诗》- 夕梦叙
<道俗即诗>- 夕梦叙 版权声明:夕梦叙-达叔原创,转载标明作者即可,请尊重! <道俗即诗>- 夕梦叙 如梦令-李清照 昨夜雨疏风骤,浓睡不消残酒. 试问卷帘人,却道海棠依旧. ...
- 开展性能测试必须知道的21件事:认清性能问题
近年来大家都开始关注移动应用性能管理和性能监测,我们找到一位国外资深的开发者对性能的相关理论,希望各位喜欢. 1. 公理化方法 当我在1989年加入 oracle 公司时,解决性能问题(人们通常说的 ...
最新文章
- 虚拟机win2003安装mysql教程_CentOS7.2虚拟机上安装MySQL 5.6.32的教程
- 离散数学及其应用上的一个问题
- flash as3与后台php交互用户注册例子,as3与PHP后台交互2
- tomcat temp 大量 upload 文件_问题:JavaWeb中实现文件上传的方式有哪些?
- Linux下testlink安装
- ubuntu安装使用latex和texmaker--PC端
- android密码输入框6,Android 6位支付密码 密码输入框 极简单的代码实现 看这篇就够了...
- 你知道3D打印SLA的优缺点吗?
- java英语apple_apple是什么意思_apple在线翻译_英语_读音_用法_例句_海词词典
- vue项目出现错误component lists rendered with v-for should have explicit keys
- 【定量分析、量化金融与统计学】R语言方差分析的outliers陷阱
- 有创意的思维导图要怎样绘制
- 1元体验京东云服务器
- 水仙花数(所有自幂数)的实现详解-C语言
- html表格打印填充分页,window.print()页面打印之表格内容分页填充进行分页打印
- Java实现Word转PDF方案选择
- Hibernate持久化对象生命周期之实战探索
- 【PM】【进度】:把握项目节奏的方法
- H3C SNMPv3 配置
- 古代名言名句 汉魏南北朝