首页 / 财经 / 正文

oracle数据库教程(ORACLE数据库从陌生到精通的葵花宝典)

放大字体  缩小字体 来源:新东安电影院 2026-04-17 17:22  浏览次数:9

1.数据库安装 1

3.创建监听 10

5.创建用户 16

7.建表 19

9.简单查询 24

11.联合查询 39

13.decode函数 43

15.主键 52

17.数据字典 55

19.PL/SQL编程 61

19.2 helloworld 62

19.4变量的基础类型 63

19.6异常处理 65

1)%type 66

版本: 9i 10g 11g xe

安装时注意:管理员权限

1)开始菜单有功能键

计算机—》右键,管理—》服务和应用程序—》服务—》

选中程序—》右键,属性, 修改启动类型为手动,在需要的时候启动数据库

数据库: 数据存储仓库,将数据以文件形式,存储在磁盘上

图形化工具

建库:

口令,统一使用 admin

oralce中主要的文件类型

数据文件: .dbf --》存储的数据的文件

创建成功之后,口令管理,可以看到这个库默认的所有用户

解锁,密码使用admin ,原始密码tiger

连接数据库:

连接成功

3.创建监听

ORA-12541 : oracle的错误码

网络配置助手

监听配置好之后,重新连接数据库:

4.工具介绍

连接方式:

2)Plsql

配置数据库选项(Database的下拉菜单)

3)sqlDeveloper

新建连接:

1.创建表空间

2.创建用户

没有权限

单独权限太多,赋角色给用户,oracle中,权限是按角色分组的

6.常用数据类型

varchar

nvarchar2

以上四种字符型的,分成2类

varchar类型:变长,长度会根据具体存储的数据长度,来动态分配存储空间。

2.不同之处:varchar2对于所有的字符都是2个长度存储,varchar中文2个长度,英文1个长度。nvarchar2:对中文支持最好的!!存储,也是使用2(还是3)个长度存储,使用的Unicode编码方式存储。

blob,clob 大文本存储(比如,长度超过4000的)

int float double….

1) number(11)

2) number(10,2)

时间类型

create table table_name(

…..

需求:新建学生表 t_student ,列, t_id, t_stu_name, t_sex, t_create_time

命名规则:

表名,一般使用t_ 打头

主键添加方式,或者是命令

对表数据做更新操作(update,delete,insert),一定要手动提交事务!!!

点击提交按钮,或者是执行commit命令。

1.

3.

4.点击“更多”

效果:

7.检查dragon用户中的表

注意和mysql数据库中不一样的使用方式

  • 需求1:查询年薪

  • 需求2:查询年薪+津贴年终奖

判断值是否为null,如果为null,则给0参与计算

如果值为null,那么使用替换值代替

查询入职时间在1985年1月1号之后的

出错,比较符 “>”两边的类型不匹配

2)两边都是date

  • 需求4: 将年薪使用千位分隔符表示

使用 to_char(值,格式)

  • 需求5: 查询员工编码和姓名, 效果为: 7789_jones,7789’jones

字符串连接符: ||

  • 需求6: 查询员工表中的部门,去重

  • 需求7: 查询姓名中有M的;查询姓名中第二个字母为M的;查询姓名中含有%的

10.常用函数

多行函数:处理多条数据得到结果, 比如avg(), max(),sum()

需求1: 查询员工名称的第二个字母含有’a’或’A’

需求3:查询平均工资,采用四舍五入 ,保留4位有效数字

mod(被除数,除数)

分组函数一定是配合多行函数使用

sql语句中关键字位置

from …..

left join…

where …….

having…

需求6:查找所有员工中工资最高的员工信息

--查薪资为5000的用户信息

5000怎么来???

需求7:查找所有员工中工资最低的员工信息

count()

求和 sum()

需求10:查询部门平均工资大于2000的部门信息

需求12:查询职位是经理的员工

需求13:求出每个部门中工资最高的员工信息

有薪资的部门

需求15:求出员工及其经理人,根据部门、薪资排序

需求17: 平均薪资最高的部门编号,名称与薪资等级

--查平均薪资等级 最低的部门编号

--最低等级

select * from emp where deptno in(等级最低编号) or sal < 1000

查询员工信息,状态字段显示对应中文

11.联合查询

union all

union all

12.视图

将 查询语句的结果,作为一个临时表,并且给它个名字

使用:

--查询部门平均薪资等级最低的此部门的所有员工

1.简化sql语句

两个平台共享数据库的时候,

其他数据不可见。对数据有个保护的作用

比如: dragon用户中视图v_student可以给scott访问

2)使用dragon用户给scott用户赋权限

视图可以修改么???

但是!!!!!一般不会去修改视图!

13.decode函数

查询员工信息,状态字段显示对应中文

需求:

sql语句步骤

课后练习:

14.分页

oracle 伪列 rownum

使用伪列的问题:

使用伪列分页,每页显示3条数据

第二页: 伪列 between 4 and 6

使用排序的时候,一定要固定顺序

主键是怎么定义的?

整数类型:

2)自定义,比如deptno, 10,20,30…

1)有意义

身份证号

2)无意义

就是一个字符串

oracle sys_guid()

自增长?

oracle中没有

1,2,3,4.。。。。。。。。。

语法:

create sequence 序列名;

序列使用:

逻辑上,是有关系,一般来说,序列和表是一 一对应的关系

其实就是表,告诉你当前用户中,有哪些表?有哪些序列?有哪些视图。。。。。

有多少个数据字典?

写的select 查询,如果数据量非常的大,比如有几百万,上千万的数据

比如:看小说,看到第50章,下一次再看的时候,是从第一章开始翻么?

数据库查询,比如查empno=7934,一般执行流程,数据库表所有数据,第一条拿出来,比较,

是—》返回查询结果

表中,需要所有的数据,全部一条一条比较。

索引:

2) where条件要有 带索引的列

查看sql语句的执行计划

SQLDevelop F10

走索引:

主键,唯一键,肯定是适合,值重复率低(主键、唯一建没有重复)

select * from emp where sex=1 and sal = 800

1) 索引是占用空间的

走索引: 列要有索引,第二个:where条件要有这个列,一般来说,满足这两个条件,sql语句就会走索引

2)隐式转换,不走索引

要使用索引,那就要给表创建函数索引

5)使用not in

1) 表中的主键,唯一建,系统会默认创建索引

3)函数索引

如果where条件不全:全表扫描

数据库事务隔离级别

可以查到别的事务未提交的数据,需要修改数据库的事务隔离级别

过程式的编程语言,是对sql语句的一种补充。比如sql中没有if,没有for

19.1 基础结构

--变量定义

--语句块

--异常处理

pl/sql工具

19.3变量的定义和赋值

常用类型

char 定长字符

date 时间

binary_integer

19.5动态赋值

输出员工编号为7369的员工姓名

使用into关键字进行动态赋值,查询的数据有且只能有一条

19.6异常处理

1)日志

语法: 变量名 表名.列名%type

2) %rowtype

语法

属性1 类型,

属性3 类型

变量名 recode_name;

类似于java中的数组类型

String[] int[]

type 类型名称 is table of 存储的元素类型 index by binary_integer;

变量名 自定义数组类型名称;

使用%type

给整个数组赋值—》失败

需求:查询指定员工的薪资,如果薪资 》2500,输出“过年可以相亲了”

if 条件 then

end if;

if else分支

if 条件 then

else

end if;

多重if

if 条件 then

elsif 条件 then

elsif 条件 then

elsif 条件 then

else

end if;

需求:查询指定员工的薪资,如果薪资 》2500,输出“过年可以相亲了”,

薪资在1500以下的,输出“多多加班了啊”

for、while、doWhile

需求: 计算1+2+3+。。。+100的和

1)loop循环(doWhile)

--循环体

exit when 条件;

end loop;

2)while循环

while 条件 loop

--循环体

输出1~10

19.10 游标

a) 定义一个游标

c)打开游标,加载数据到内存中

e)关闭游标,清理数据,释放内存

2) 游标循环

1. loop循环游标

2)while循环游标

使用while循环时,用的是c%found判断的

所以:当使用c%found判断时,一定要保证,指针已经指向了第一条数据

总结:

游标%notfound : 游标指针当前指向位置,没有数据,返回true

3)for循环游标

输出 平均薪资大于2500 的部门的 所有员工姓名。

需求:升级

输出研发部的所有员工。。。----》定义新游标。。。

select deptno,empno,ename from emp where deptno=?

1)定义带参游标

is sql语句

需求:

1) 输出所有员工的部门名称,姓名,薪资,薪资等级

--+1000

+500

+ 200

4) 游标批量取值

limit  一次取多少条

19.11 pl/sql中执行sql语句

2)sql语句转换成字符串,使用execute immdiate 命令执行

2.DML语句(数据操纵语句,select,update,delete)转换字符串,使用命令执行

字符串需要单引号

pl/sql中也可以使用占位符

有名字,并且可以存储在数据库的PL/SQL语句块

20.1存储过程语法

1.使用declare调用

一般来说,只要有定时任务,或者说,只要有存储过程,数据库中,都会有一个日志表,一般来说是整个项目通用,也有个别功能频繁用到的,会单独一张日志表

id, proc_name, status, bz , create_time

status: 状态,开始,结束 ,异常

调用:

20.5存储过程返回值

存储过程定义,没有return,通过参数的in/out类型来返回

需求:查询出每个用户的编号和薪资,以及每个用户需要缴纳的个税

定义一个税收的函数

存储过程,函数的区别

都是为了实现某个功能的pl/sql语句块

不同点:

2)返回值方式,函数是通过return返回,存储过程是通过参数传递的

项目中的定时任务,一般有三种

比如磁盘清理,日志文件备份,比如过期的上传文件的删除。。。磁盘大小监控

比如数据处理; 文件的操作,比如系统之间的文件同步

数据处理,比如系统之间的数据同步,比如状态:比如零点判断,红包如果是前一天的,状态变为不可用

查看系统中所有的定时任务

创建一个定时任务

暂停定时任务

启用

sys.dbms_job.broken(1,false);

打赏
0相关评论
热门搜索排行
精彩图片
友情链接
声明:本站信息均由用户注册后自行发布,本站不承担任何法律责任。如有侵权请告知立立即做删除处理。
违法不良信息举报邮箱:115904045
头条快讯网 版权所有
中国互联网举报中心