Oracle存储过程

news2024/9/20 22:37:28

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、前置准备
    • 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;

在这里插入图片描述


总结

存储过程还可以和编程代码一样写比较复杂的逻辑,但是由于我最近并没有用到,所以咱是就记录这么多,以后用到了再补。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1794756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

.NET AI如何从0开始?

你是否在思考如何利用AI为您公司的产品增加智能方向的业务扩展? 或者你是否有思考过怎么去利用AI减少部分工作量? 如果你有类似于上面的问题,想要学习AI,并且您是一名.NET开发工程师,或您是一名弃暗投明的Java转.NET…

六月的魔力:揭秘2024年加密市场与Reflection的创新与收益

回想过去加密货币市场的沉浮,一年中市场的阶段性牛市大多发生在下半年,六月似乎是一个神奇的时间节点。每年六月一到,加密货币市场仿佛突然被按下启动按钮,沉寂的土狗开始扶苏,经过半年准备的各大项目方开始蠢蠢欲动。…

城市之旅:使用 LLM 和 Elasticsearch 简化地理空间搜索(一)

作者:来自 Elastic Philipp Kahr, Valentin Crettaz 这篇博文的本地部署实践 Jupyter notebook 请详细阅读文章 “城市之旅:使用 LLM 和 Elasticsearch 简化地理空间搜索(二)”。 探索如何从自然语言提问创建地理空间搜索。在下…

15- Redis 中的 整数集合 数据结构

整数集合是 Set 对象的底层实现之一。当一个 Set 对象只包含整数值元素,并且元素数量不大时,就会使用整数集合这个数据结构作为底层实现。 1. 整数集合结构设计 整数集合本质上是一块连续内存空间,它的结构定义如下: typedef s…

​在 The Sandbox 元宇宙的 CU 超商中寻找Milk币!

CU(韩国领先的便利店)和 MiL.k(基于区块链的忠诚度整合平台)合作在 The Sandbox 推出了首款元宇宙游戏,通过独家活动在 Web2 和 Web3 之间建立联系。 在元宇宙中玩转 “Play CU X MiL.k” 体验 通过引人入胜的游戏内容…

uniapp小程序多线程 Worker 实战【2024】

需求 最近遇到个小程序异步解码的需求,采用了WebAssembly,涉及大量的计算。由于小程序的双线程模型只有一个线程处理数据,因此智能寻求其它的解决方案。查看小程序的文档,发现小程序还提供一个异步线程的Worker方案,可…

暗黑系短视频:成都鼎茂宏升文化传媒公司

暗黑系短视频:探索未知的视觉艺术 在短视频盛行的今天,各种风格和主题的作品层出不穷,其中,暗黑系短视频以其独特的魅力和深度,成都鼎茂宏升文化传媒公司吸引了众多观众的关注。这类视频往往带有一种神秘、压抑的氛围…

李良济中医课堂,助力市民健康,传播中医药文化,坚守初心扬国粹!

为了更好地传承并发扬中医文化,传播健康理念,提高民众预防疾病的意识,让广大市民感受到中医药就在我身边。 李良济中医课堂,积极走进老年大学,青年夜校,同时主动加入萌趣中草药的活动等,为市民群…

小程序集arcgis地图显示自定义坐标的功能实现记录!(学习笔记)

最近再做一个新能源回收项目,项目中有个根据回收点坐标数据显示区域内回收点位置,点击图标直接导航到该位置,及分布的需求,研究了一下,实现效果如下,实现起来很简单,代码及效果 回收点位置及分…

在编程Python的时候发生ModuleNotFoundError: No module named distutils报错怎么办

1.先查看Python版本 首先我们先去打开终端就是先widr再输入cmd 然后进去在输入Python -V要注意大小写 我的版本是3.9.7版本但是我使用的PyCharm 是 2021.1.1 x64版本没有办法主动去识别因为这个版太低了你的Python版本很高所以无法识别 2.解决方法 只需要把你的Python现版…

使用手机小程序给证件照换底色

临时遇到一个需求,需要给证件照换底色。原始图像如下 最终需要换成红底的。 本次使用一款小程序"泰世茂证件照",打开该小程序,如下图所示 单击开始制作,然后选择二寸红底,如下图所示 然后单击相…

UI 自动化中的分层设计

以前的设计 在过去 UI 自动化测试领域有一个规范的设计模式是 page object 模式。 意思是测试用例不会直接定位页面元素, 而是把每一个页面封装成一个类。 在这个类中封装页面元素。 然后测试用例调用 page 类来操作页面元素完成测试用例。如下图: 以前…

前端面试题(二)答案版

面试形式:线上面试(不露脸):时长40分钟 面试评价:由易到难,由细到全,比较不错 面试官:项目经理 面试官提问(面试题): 1、聊聊最近写的这个项目…

【Meetup】探索Apache SeaTunnel的二次开发与实战案例

在数据科技快速演进的今天,业务场景的复杂化和数据量的激增,推动了大数据技术的迅速发展,在众多开源大数据处理工具中,Apache SeaTunnel以其强大的数据集成能力,成为众多企业的首选。 但随着应用深入,企业面…

32个小众搜索网站,相信一定有你想要的

首先问你一个问题,你平时都会用什么搜索引擎来进行搜索? 下面我将推荐32个小众搜索网站,相信一定会有你想要的。 1、多吉搜索 首先对因为拒绝商业化黑客攻击、不可抗力而停止服务的多吉搜索表示哀悼,这款由个人开发的小众搜索引…

Flutter基础 -- Flutter布局练习(小项目)

目录 1. Splash 布局(第一页) 1.1 目标 1.2 当前效果图 1.3 创建 Splash 界面 1.4 设置 MaterialApp 1.5 设置 Splash 背景色 1.6 布局 Splash 界面 1.7 总结 2. Splash 圆角图片 2.1 目标 2.2 当前效果图 2.3 蓝湖下载图片 2.4 图片导入项…

QT 信号和槽 一对多关联示例,一个信号,多个槽函数响应,一个信号源如何绑定多个槽函数

在窗体里放置一个单行文本编辑控件(QLineEdit)、一个标签控件(QLabel)和一个文本浏览控件(QTextBrowser),在单行文 本编辑控件里的文本被编辑时,标签控件和文本浏览控件都会同步显示…

OpenMV学习笔记4——二维码识别

一、示例程序 按照下图顺序点击,即可打开官方在IDE中准备好的二维码实例程序: # QRCode Example # # This example shows the power of the OpenMV Cam to detect QR Codes # using lens correction (see the qrcodes_with_lens_corr.py script for hig…

【Vue】项目目录介绍和运行流程

文章目录 一、项目目录介绍二、public/index.html三、src/main.js四、运行流程 一、项目目录介绍 虽然脚手架中的文件有很多,目前咱们只需认识三个文件即可,这三个文件就决定了我们项目的运行 main.js 入口文件App.vue App根组件index.html 模板文件 我…

如何实现vue项目不同屏幕适配(2024最新)

文章目录 1.下载插件,修改px单位为rem单位2.配置vue.config.js(如下图位置所示)3.屏幕自适应4.项目实际使用 1.下载插件,修改px单位为rem单位 npm i postcss-plugin-px2rem2.配置vue.config.js(如下图位置所示) 注意在根目录下,如果没有该文…