Oracle存储过程

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

文章目录

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

在这里插入图片描述


总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言中动态内存管理说明

C语言中为什么要有动态内存管理? 在我们如今的学习当中,学习过两种内存开辟的方式如下 int a0; int arr[10]{0}; 第一种直接定义一个变量,但是变量的大小由类型决定 …

关于计算机是如何工作的

计算机的发展历程 世界上的第一个计算机 冯诺依曼机构体系 1.存储器 (包括内存(存储空间小,访问速度快,成本高,掉电后数据丢失) 外存(硬盘,软盘,U盘,光盘)),存储空间小,访问速度慢,成本低,掉电后数据仍在 2.CPU(中央处理单元,计算机最核心的部分,用于算术运算和逻辑判断),…

苹果手机数据不见了怎么恢复?3个方法,搞定苹果手机数据恢复!

在许多错误的情况下,当你更新到最新的 iOS 版本或使用越狱来获得更多功能和权限、误删重要的手机文件时,苹果手机中的数据可能会丢失或被意外删除。一旦发现数据丢失,你就会查看 iTunes 备份或 iCloud 备份,并希望在其中恢复丢失的…

五个超实用的 ChatGPT-4o 提示词

GPT-4o 是 OpenAI 最近推出的最新人工智能模型,不仅具备大语言模型的能力,而且拥有多模态模型的看、读、说等能力,而且速度比 GPT-4 更快。下面我们就来介绍几个超实用的 GPT-4o 提示词,帮助大家更好地了解 GPT-4o 的功能和应用场…

深度学习框架-----Tensorflow2基础

一、基础概念 1、深度学习框架基础概念 深度学习框架的出现降低了入的槛。我们不在需要丛从复杂的神经网络和反向传播算法开始编代码,可以依据需要,使用已有的模型配置参数,而模型的参数自动训练得到。我们也可以在已有模型的基础上增加自定…

vue3使用codemirror-editor-vue3代码编辑器以及解决格式不对齐 整体左偏问题

一、使用 1.安装 npm install codemirror-editor-vue3 codemirror5.x -S npm install types/codemirror -D 2.使用 import Codemirror from codemirror-editor-vue3; import { formDesign } from //stores/formDesign; import codemirror/mode/javascript/javascript.js;…

LLama2源码分析——Rotary Position Embedding分析

参考:一文看懂 LLaMA 中的旋转式位置编码(Rotary Position Embedding) 原理推导参考自上文,以下结合huggingface代码分析公式计算过程 1 旋转角度计算 计算公式如下,其中d为词嵌入维度,这部分和论文原文…

微信小程序下载、安装教程-2024年6月6日

微信小程序下载、安装教程-2024年6月6日 一、下载二、安装 一、下载 链接:https://pan.baidu.com/s/1pThpJEtOik9sgOI0F3mr_Q?pwdi1p3 提取码:i1p3 –来自百度网盘超级会员V6的分享 本文是用的网盘下载,具体都差不多。 或者从微信小程序官…

数据分析第一天(pandas简单的对快餐店数据进行操作获得想要的信息,使用apply,groupby)

前言 数据保存在 https://github.com/harkbox/DataAnalyseStudy 数据名称:快餐数据.tsv (tsv是用\t作为字符分隔符的文件格式;csv是逗号) 因此可以用pandas的read_csv函数读取数据 1.读取数据 import pandas as pd import matp…

Vue3学习记录(第一天)

Vue3学习记录_第一天 背景说明记录Vue3实现响应式前端的反射前端对象的属性赋值Vue3响应式实现过程稿前端移除对象的属性 背景 本次学习主要是看视频学习, 没有跟练, 但是很多知识点感觉又容易忘记. 所以通过笔记的方式输出一下. 说明 估计只能自己看懂, 如果能提供一些其他…

【Python报错】已解决ModuleNotFoundError: No Module Named ‘openyxl’

成功解决“ModuleNotFoundError: No Module Named ‘openyxl’”错误的全面指南 在Python编程中,遇到ModuleNotFoundError: No Module Named openyxl这样的错误通常意味着Python解释器无法找到名为openyxl的模块。然而,这里存在一个常见的拼写错误&#…

解决CSDN 导入Markdown图片失效不显示问题

每次将MarkDown文件导入CSDN的时候,有些图片总是由于防盗链的问题导致图片加载不出来,还得手动再导一遍,极其不方便。所以我们能不能建立一个属于自己的图片服务器或者说在线图库呢,而且每次使用Typora插入图片的时候都会自动的上…

Docker自定义镜像实现(SpringBoot程序为例)

✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。🍎个人主页:Meteors.的博客💞当前专栏:知识备份✨特色专栏:知识分享&#x1f96…

华为HCIP-DATACOM 831最新题目

如图所示的网络,相邻的路由器之间使用直连接口建立EBGP邻居关系,AS号为6500x,其中X为路由器的编号。R1和R4均有到达192.168.1.0/24的静态路由,通过import方式引入BGP。在R3上配置EBGP负载分担的最大等价路由条数为8。缺省情况下&a…

搜索与图论:图中点的层次

搜索与图论&#xff1a;图中点的层次 题目描述参考代码 题目描述 输入样例 4 5 1 2 2 3 3 4 1 3 1 4输出样例 1参考代码 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 100010;int n, m; int h[N], e[N]…

VS2019 QT无法打开 源 文件 “QTcpSocket“

VS2019 QT无法打开 源 文件 "QTcpSocket" QT5.15.2_msvc2019_64 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E1696 无法打开 源 文件 "QTcpSocket" auto_pack_line_demo D:\vs_qt_project\auto_pack_line_de…

UE5刷植物悬空了

UE5系列文章目录 文章目录 UE5系列文章目录前言一、解决办法 前言 在Unreal Engine5.3中使用植物模式刷各种植物时&#xff0c;有时会发现有的植物要么悬空&#xff0c;要不有刷不上地板的情况。而且悬空的植物还不能接触到地面&#xff0c;感觉很奇怪&#xff0c;就像下图所示…

2024.6.9周报

目录 摘要 ABSTRACT 一、文献阅读 1、相关信息 2、摘要 3、文献解读 1、Introduction 2、文章主要贡献 3、模型架构 4、实验 4、结论 二、代码实现 总结 摘要 本周我阅读了一篇题目为《Unlocking the Potential of Transformers in Time Series Forecasting with …

三十四篇:办公效率革命:深入探索办公自动化系统的全面策略

办公效率革命&#xff1a;深入探索办公自动化系统的全面策略 1. 引言 1.1 办公自动化系统&#xff08;OAS&#xff09;的定义与关键作用 在当前的企业环境中&#xff0c;办公自动化系统&#xff08;Office Automation System, OAS&#xff09;已成为提高效率和执行力的关键技…

全面守护你的健康ZL-0891A小动物多参数监护仪

简单介绍&#xff1a; 12.1英寸彩色TFT显示&#xff0c;分辨率800X600,采用数字血氧DSP算法&#xff0c;低灌注&#xff0c;小动物多参数监护仪具有优良的抗运动性能;动物用血压算法&#xff0c;支持测量各种动物类型,特有的中英文语音报警;支持USB数据导出&#xff0c;可以在…