提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、前置准备
- 1.创建表空间
- 2.创建用户
- 3.赋权
- 二、存储过程
- 1.创建数据表
- 2.创建存储过程
- 3.执行存储过程
- 4.带参执行
- 5.控制语句
- 总结
前言
这段时间实习,公司要使用存储过程,以前没接触过以为是啥高大上的技术,后来学习了一下,其实就是将一堆SQL命令打个包,下一次遇到类似的情况直接运行整个包也就是存储过程,然后就可以达到同样的效果。
一、前置准备
因为我是使用docker安装的数据库,频繁进行容器执行操作不符合容器隔离的理念,所以我使用dbeaver提供的SQL控制台进行SQL输入。所以下边的操作中增删改操作我用SQL完成,查询操作我是用可视化窗口完成。
1.创建表空间
这个表空间有点类似MYSQL中的database,主要就是在磁盘里划一块空间用作数据存储。
create tablespace
learn
datafile '/opt/oracle/dba/learn.dbf' size 128M;
这个命令的意思是,在 /opt/oracle/dba/ 中生成一个learn.dbf文件用来存储数据,占地128M,需要先确认这个目录是否存在,不存在是不用创建表空间的。
2.创建用户
我们为这次学习专门创建一个用户后边就不使用管理员用户登录了。
create user
learn identified by learn
default tablespace learn account unlock;
创建一个用户教learn 密码为learn 和表空间learn绑定。
3.赋权
我们将一些权限赋给新用户。
grant connect,resource,dba to learn;
之后可以用dbeaver使用learn用户连接一下,如果可以连接成功,那么就可以进行下一步了
二、存储过程
1.创建数据表
我们为测试创建一张数据表。
CREATE TABLE learn_info (
id varchar(255) NOT NULL,
name varchar(50) NOT NULL,
age number NULL
)
2.创建存储过程
固定写法如下。
create or replace procedure 存储过程名
as
begin
----------------------------
end;
我们写个简单的案例。
create or replace procedure learn1
as
begin
INSERT INTO learn_info values('1','zs','20');
end;
现在我们创建这个存储过程。直接将上边的代码扔到SQL终端运行即可。可以使用dbeaver查看。
然后鼠标右键测验一下能否正常运行。
如果执行成功,代表你的SQL可以正常执行。
3.执行存储过程
固定格式。你可以多执行几次。
declare
begin
learn1('2','lisi','30');
end;
4.带参执行
刚刚执行的SQL代码都是固定的,这种情况可以用于数据库的初始化,当添加增量数据就明显不能这样操作,我们希望将数据作为参数传入,每次插入的数据都不同。
创建新的存储过程
CREATE OR REPLACE PROCEDURE LEARN1
(id IN varchar2,name IN varchar2,age IN varchar2)
IS
BEGIN
INSERT INTO learn_info values(id,name,age);
END LEARN1;
这样我们就可以在运行存储过程是使用参数了。
运行存储过程
现在就可以将数据在执行存储过程的时候传入
5.控制语句
存储过程中不仅仅可以传入参数,还可以进行流程语句控制的编写。
编写存储过程。
CREATE OR REPLACE PROCEDURE LEARN2
IS
BEGIN
FOR I IN 1 .. 5 LOOP
IF I > 3 THEN
INSERT INTO learn_info VALUES('3','w5','35');
COMMIT;
ELSE
INSERT INTO learn_info VALUES('4','AZ','40');
COMMIT;
END IF;
END LOOP;
END LEARN2;
这边同时使用看for循环控制和if条件控制。
之后执行存储过程。
begin
learn2;
end;
总结
存储过程还可以和编程代码一样写比较复杂的逻辑,但是由于我最近并没有用到,所以咱是就记录这么多,以后用到了再补。