Oracle复习课

举报
tea_year 发表于 2021/12/23 01:10:28 2021/12/23
【摘要】 5-Oracle复习 回顾 1、定义过程: 实现往银行表中录入1条数据(输入参数),如果存在同名账号提示错误,否则录入,并输出表中的总条数(输出参数) --调用 begin sp...

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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。