Oracle复习课
5-Oracle复习
回顾
1、定义过程:
实现往银行表中录入1条数据(输入参数),如果存在同名账号提示错误,否则录入,并输出表中的总条数(输出参数)
--调用
begin
sp_zhuanzhang4(2,2000,'张三','李四');
end;
select * from bank;
create or replace procedure sp_addbank
(
vid in number,
vname in varchar2,
vmoney in number,
vcount out number
)
as
--声明变量
vcnt number(3);
begin
select count(*) into vcnt from bank where name=vname;
if vcnt>0 then
raise_application_error(-20001,'重名');
else
insert into bank(id,name,balance) values(100,vname,vmoney);
commit;
end if;
select count(*) into vcount from bank;
-- exception
-- when others then
-- dbms_output.put_line('错误');
end;
declare
vcount number(5);
begin
sp_addbank(100,'小白',5000,vcount);
dbms_output.put_line('结果是:'||vcount);
end;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
2、模拟转账:输入参数1:张三 转 李四 输入参数2:李四转 张三 ,转账的金额通过输入参数指定;
--测试
create or replace procedure sp_zhuanzhang4
(
flag in number,
money in number,
fromUser in varchar2,
toUser in varchar2
)
as
begin
if flag=1 then
update bank set balance=balance-money where name=fromUser;
update bank set balance=balance+money where name=toUser;
else
update bank set balance=balance-money where name=toUser;
update bank set balance=balance+money where name=fromUser;
end if;
commit;
exception
when others then
rollback;
end;
--调用
begin
sp_zhuanzhang4(2,2000,'张三','李四');
end;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
复习内容
1、序列
mysql中有自增列;
oracle并没有自增列,如果用数字列当主键,序号自动生成:序列;
序列:一串数字的生成器;数字不会重复。
create sequence seq331
start with 1 --从1开始
increment by 1; --递增1
- 1
- 2
- 3
使用:
select seq331.currval from dual; --必须先执行nextval才可以使用该属性
select seq331.nextval from dual; --生成一个数字
insert into bank(id,name,balance) values(seq331.nextval,'金莲',5000);
commit;
- 1
- 2
- 3
- 4
- 5
2、网络连接
监听:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vILuemWm-1601737262763)(5、Oracle复习.assets/image-20200918154308542.png)]
网络连接基本原理分析:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-APnt5BYA-1601737262770)(5、Oracle复习.assets/image-20200918154836456.png)]
3、常用函数
字符串函数:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-21yFjdqO-1601737262776)(5、Oracle复习.assets/image-20200918165524640.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AI2nVoLl-1601737262786)(5、Oracle复习.assets/image-20200918165545547.png)]
栗子:
select concat('我喜欢','运动') from dual;
declare
str varchar2(100);
begin
str:=concat('你喜欢','睡眠');
dbms_output.put_line(str);
end;
select concat(concat(ename,job),sal) 备注 from emp;
-- 首字母大写
select initcap(ename),initcap(job) from emp;
select ename, length(ename) 长度,lower(ename) 小写,upper(ename) 大写 from emp;
--左测填充
select lpad(ename,20,'*') from emp;
--默认删除左侧的空格,删除指定的左侧的字符:-
select ltrim(' 动漫'),ltrim('--------------动漫','-') from dual;
--默认字符串的位置从1开始:原始字符串,开始位置,截取的长度
select substr('我喜欢看动作片',2,2) 截取 from dual;
--替换 原字符串中 存在的字符
select replace(ename,'金莲','潘金莲') from emp;
update emp set ename=replace(ename,'郎','王');
select * from emp;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
数学函数:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G43ZF207-1601737262792)(5、Oracle复习.assets/image-20200918174123448.png)]
--ceil 向上取整:返回>=当前数字的最小整数
-- floor:向下取整 ,返回<=当前数字的最大整数
select ceil(3.99) ,floor(3.19) from dual;
--正数:对小数点之后进行操作
--负数:对小数点之前进行操作
--round:四舍五入,trunc:截取
select round(3.697,1),round(399.123,-1) from dual;
select trunc(3.697,2),trunc(399.123,-3) from dual;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
日期函数:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n4MCLUyd-1601737262795)(5、Oracle复习.assets/image-20200918174300344.png)]
--add_months(sysdate,-1):在指定的日期上增加指定的月份(正、负),返回的是日期类型
select sysdate,add_months(sysdate,-1) from dual;
--last_day:月份的最后一天
select last_day(sysdate) from dual;
--months_between('日期类型,'日期类型')
--to_date:将字符串 ---》日期类型
select to_date('2020-9-18','yyyy-MM-dd') from dual;
select months_between(sysdate,to_date('2020-8-18','yyyy-MM-dd')) from dual;
--截取到日期的某一位
select trunc(sysdate,'dd') from dual;
--to_char:将日期转成字符串
select to_char(sysdate,'yyyy-MM-dd') 日期转字符串 from dual;
select * from emp;
-- 查询入职时间超过一年的员工
select * from emp where months_between(sysdate,hiredate)>12;
-- 查询本年入职的员工
select hiredate,trunc(hiredate,'yyyy') from emp
where trunc(hiredate,'yyyy')=trunc(sysdate,'yyyy');
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
4、表空间
oracle数据库:
数据库实例:orcl: 物理文件+内存空间+进程
物理文件:.tcl:事务控制文件 .log:日志文件 .dbf:数据文件(数据表+数据)
select hiredate,trunc(hiredate,‘yyyy’) from emp
where trunc(hiredate,‘yyyy’)=trunc(sysdate,‘yyyy’);
## 4、表空间
oracle数据库:
数据库实例:orcl: 物理文件+内存空间+进程
物理文件:.tcl:事务控制文件 .log:日志文件 .dbf:数据文件(数据表+数据)
# 总结
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
文章来源: aaaedu.blog.csdn.net,作者:tea_year,版权归原作者所有,如需转载,请联系作者。
原文链接:aaaedu.blog.csdn.net/article/details/108914504
- 点赞
- 收藏
- 关注作者
评论(0)