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);

