Oracle同义词
一、同义词的概念
同义词(synonym)就是数据库对象的别名,这里的数据库对象包括表、视图、序列、存储过程、包等。
同义词有两方面的意义:1)简化了数据库对象名称的书写;2)提高了数据库对象的安全性(因为只知道对象的别名,不知道它的真名)。
Oracle的dual虚表其实就是一个公用的同义词。
二、创建同义词
1、创建同义词的权限
用dba权限登录数据库,授于用户create synonym和create public synonym权限。
语法:
12grant create synonym to 用户名;grant create public synonym to 用户名;
示例:
2、创建synonym的命令
语法:
1create [public] synonym 同义词名 for [用户名.]数据库对象名;
说明:
public:同义词的类型,缺省是当前用户私有的,只有当前用户可以使用该同义词,如果加上public选项,表示公用同义词,所有的数据库用户都可以使用。
用户名:数据库对象所属的用户,缺省是当前用户。
数据对象名:常用的是表、视图和序列,其它的不常用。
...
Oracle数据库链路
一、数据库链路的概念
数据库链路(database link),简称dblink,它是一个通道,是本地数据库与远程数据库之间的通道,通过dblink,在本地数据库中可以直接访问远程数据库的对象。
dblink不是应用程序与数据库之间的通道,而是数据库之间的通道。
二、创建dblink
1、创建dblink的权限
用dba权限登录数据库,授于用户create database link和create public database link权限。
语法:
12grant create database link to 用户名;grant create public database link to 用户名;
示例:
2、创建dblink的命令
语法:
1234create [public] database link 数据库链路名称connect to 用户名identified by 密码using '远程数据库参数';
说明:
public:dblink的类型,缺省是当前用户私有的,只有当前用户可以使用该dblink,如果加上public选项,表示公用d ...
Oracle视图
一、视图的概念
视图是基于一个或者多个表上的预定义查询,这些表称为基表,从视图中查询数据的方法与从基表中查询数据的方法相同。视图是一个查看数据的窗口,是查询语句模板,视图本身没有数据,在数据库中只保存了视图的定义。
视图具有以下优点:
1)可以向数据访问者只开放访问视图的权限,屏蔽基表信息。
2)可以将复杂的查询语句保存为视图,简化了SQL语句的编写。
3)创建视图的时候,可以限制只访问基表中的部分列或者部分行的数据,这样可以实现一定的安全性。
4)简化用户权限的管理,只授予用户使用视图的权限。
5)从基表中按一定的业务逻辑抽出用户关心的部分数据创建视图,简化了业务逻辑。
二、创建视图
语法:
1234create [or replace] [{force|noforce}] view 视图名asselect查询语句[with read only]
语法解析:
or replace:如果视图已经存在,则替换旧视图。
force:即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用。
noforce:如果基表不存在,无法创建 ...
Oracle索引
对于初学者来说,在学习的过程中,创建表的数据量非常有限,感受不到索引的重要性,但是,我希望您把本章节的内容记在心里,等实际工作中遇到问题的时候能立即想到解决问题的方案。
总的来说,Oracle数据库非常强大,如果您的数据库性能较低或执行SQL语句的效率很低,最主要原因应该是索引设计不合理或使用索引不合理。
所谓的SQL优化,主要的内容就是如何设计索引和如何利用索引。
一、索引的概念
如果一本书只有几页,读者随便翻翻就能很快的找到具体的内容,根本不需要目录,如果一本书有几百页、几千页,没有目录,查找内容的将需要更长的时间,书越厚,耗时越长。
索引,即表的索引,它对表的重要性就像目录对书一样重要,索引可以大幅提升数据查找的效率。
1、索引的特点
1)索引是表的一部分,是可选的,表可以没有索引,就像书可以没有目录一样,数据库不做强制要求。
2)合理的索引可以提高数据查找的效率,减少磁盘I/O。
3)唯一索引可以约束表数据的完整性。
4)索引也是数据,需要存储空间。
5)数据库自动维护索引的内容,当对表的记录进行了增、删、改的操作时,数据库会自动更新索引。
6)索引虽然可以提高数据查找的效 ...
Oracle伪列
Oracle有两个常用的伪列rowid和rownum,对伪列的操作类似于表中的列,你可以对其进行查询操作,但是你却不能对其进行增加、修改或者是删除。
一、rowid伪列
1、rowid的原理
Oracle数据库表中的每一行在数据库中有一个存放的位置,即rowid(row identification),rowid的长度是10个字节,显示的结果是18字节的字符串,该值表明了行在Oracle数据库中存放的物理具体位置,是唯一的,Oracle内部通常使用它来访问数据。
我们从超女表中查询每行的rowid。
rowid虽然不是表的字段,但是,在Oracle数据库的内部,保存了每行数据的rowid。
rowid使用base64编码行的物理地址,编码字符包含A-Z, a-z, 0-9, +, 和/,由四部分组成:OOOOOOOFFFBBBBBBRRR,如下图:
1)对象编号:行所属数据库对象的编号,每个数据库对象在创建的时候都被分配一个唯一的编号,六位显示。
2)文件编号:行所在数据文件的编号,每一个文件标号也是唯一的,三位显示。
3)块编号:行所在数据文件的数据块的位置,六位显示。
4) ...
Oracle触发器
一、触发器的概念
触发器是Oracle数据库的对象,类似存储过程和函数。存储过程和函数需要用户显示调用才执行,而触发器是由一个事件来触发运行,当某个事件发生时会自动地隐式运行,不能被显示的调用。
触发器的本质是存储过程,发生特定事件时Oracle会执行触发器中的代码,它的组成可以分为三个部分:1)触发器执行的条件,即触发器被触发的事件;2)执行触发器的时间,发生事件之前(before)或发生事件之后(after);3)触发器要做的事情,就是触发器被触发以后具体想执行的任务(PL/SQL语句块)。
Oracle的触发器分为DML触发器、DDL触发器、替代触发器和系统触发器。
二、DML触发器
基于DML操作的触发器,细分又可以分为行触发器和语句触发器。
1、语句触发器
DML操作(insert、delete、update),不管SQL语句影响的记录是多少行,触发器只触发一次。
2、行级触发器
DML操作(insert、delete、update),SQL语句影响了多少行记录,触发器就触发多少次。
行级触发器用for each row关键字。
3、DML触发器语法
1234567 ...
Oracle存储过程
一、存储过程的概念
存储过程(stored procedure)是Oracle数据库中为了完成某功能的PL/SQL代码集,就像没有返回值的自定义函数。
二、存储过程的创建、调用和权限
1、创建存储过程
12345678910111213create or replace procedure 存储过程名(参数1 模式 数据类型,......)as/is -- 定义局部变量 变量1 数据类型; ......begin -- 实现存储过程功能的PL/SQL代码。 ...... exception -- 异常处理的PL/SQL代码。 ......end;/
1)参数的模式有三种:
in:只读模式,在函数中,参数只能被引用/读取,不能改变它的值。
out:只写模式,参数只能被赋值,不能被引用/读取。
in out:可读可写。
参数的模式可以不写,缺省为in,out和in out两种模式极少使用。
2)as/is二选一,在这里没有区别。
3)可以不定义局部变量。
4)可以没有异常(exception)处理代码段。
示例:
1)生成测试数据,脚本如下:
123456789101 ...
Oracle自定义函数
在Oracle数据库中,为了实现特定的功能,可以自定义函数,就像C/C++语言,除了系统的库函数,程序员还会编写很多自定义的函数。
一、函数的创建、调用和权限
1、创建函数
12345678910111213create or replace function 函数名(参数1 模式 数据类型,......) return 数据类型as -- 定义局部变量。 变量1 数据类型; ......begin -- 实现函数功能的PL/SQL代码。 ...... exception -- 异常处理的PL/SQL代码。 ......end;/
1)参数的模式有三种:
in:只读模式,在函数中,参数只能被引用/读取,不能改变它的值。
out:只写模式,参数只能被赋值,不能被引用/读取。
in out:可读可写。
参数的模式可以不写,缺省为in,out和in out两种模式极少使用。
2)as/is二选一,在这里没有区别。
3)可以不定义局部变量。
4)可以没有异常(exception)处理代码段。
示例,创建自定义函数maxvalue,用于比较两个数字的大小,返回较大值:
123 ...
Oracle常用函数
一、Oracle的函数
Oracle提供了很多函数用于数据的处理、统计和转换,这些函数增强了SQL语言的功能。
Oracle的函数分为单行函数、聚合函数和分析函数三大类。
1、单行函数
单行函数应用于SQL语句中时,只能输入一个数据,返回一个结果,常用的单行函数包括字符串函数、数字函数、日期函数、转换函数。
2、聚合函数
聚合函数应用于SQL语句中时,同时对多行数据进行操作,返回一个结果,例如求结果集的记录数、最小值、最大值、平均值、统计值等。
3、分析函数
分析函数用于计算基于分组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。
分析函数的应用场景比较少,概念难以理解,本文就不介绍了。
二、字符串函数
字符串函数接受字符串参数,参数可以是表中的列名,也可以是字符串表达式或字符串常量。
1、ASCII码转换ascii和chr
ascii(str):返回字符串str第一个字符的ASCII码值。
chr(ii):返回ASCII码为数字ii的字符。
2、字符串拼接concat
concat(str1,str2):把字符串str1和st ...
Oracle日期函数
Oracle采用date类型表示日期时间,这是一个7字节的固定宽度的数据类型,有7个属性,包括:世纪、世纪中哪一年、月份、月中的哪一天、小时、分钟和秒。本文中把date类型称为日期时间类型,简称日期。
对编程语言来说,日期是用字符串来显示和书写的,如果设置了NLS_DATE_FORMAT环境变量,Oracle可以自动的对日期和字符串进行转换,但是,程序员更多的是采用to_char和to_date两个函数对日期和字符串进行转换。
一、把日期转换为字符串
to_char函数把日期转换成字符串,一般用于 select 和 from 之间的字段列表中的日期输出,语法如下:
1to_char(日期,格式)
日期格式用字符串来表达,格式控制标识如下,加粗显示的是常用的格式:
d:一周中的星期几。
day:天的名字,使用空格填充到9个字符。
dd:月中的第几天。
ddd:年中的第几天。
dy:天的简写名。
iw:ISO标准的年中的第几周。
iyyy:ISO标准的四位年份。
yyyy:四位年份。
yyy,yy,y:年份的最后三位,两位,一位。
hh:小时,按12小时计。
hh24:小时,按24小时计 ...