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

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;12345678910111213141516171819202122232425262728
复习内容

1、序列

mysql中有自增列;

oracle并没有自增列,如果用数字列当主键,序号自动生成:序列;

序列:一串数字的生成器;数字不会重复。

create sequence seq331
start with 1 --从1开始
increment by 1; --递增1123

使用:

select seq331.currval from dual; --必须先执行nextval才可以使用该属性
select seq331.nextval from dual; --生成一个数字

insert into bank(id,name,balance) values(seq331.nextval,'金莲',5000);
commit;12345

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

数学函数:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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;123456789

日期函数:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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');123456789101112131415161718192021222324252627

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:数据文件(数据表+数据)

# 总结