Oracle 简单的创建一个存储过程procedure

如果学过别的语言,例如java,c这些,那么其实很好理解,其实就是面向数据库的操作

简单的例子如下:

--创建或者重写存储过程
create or replace procedure test_procedure(
p_test1 Integer--输入参数
) as --游标,select不需要into,游标是位于内存的数据集,加快数据操作,可以提升sql执行效率
cursor maindata is
select a.test3,a.test4
from table2 a, table3 o
where a.test2 = o.test2; --定义不同类型的变量,需要什么就定义出什么,变量名最好有独特性
p_integer integer;
p_varchar2 varchar2(50);
p_number number(9, 6);
p_date date; begin --for循环,对select的结果进行行遍历,遍历每条记录,使用select不需要into
for fc in (select o.test2
from table1 o
where o.test1 = p_test1) loop --for循环,对游标进行展开
for fcc in maindata loop --普通的select要用into,要将数据存储在变量中进行操作,注意,只有单行数据,多行会报错
select t.num1
into p_number
from table4 t
where t.num1 = '1'; --插表,select不需要into,在存储过程没有结束前不会commit,也可以再后面加上commit提前commit结束事务
insert into table_log
(test1,test2,test3,num1)
(select fc.test2,
fcc.test3,
fcc.test4,
p_number
from dual); end loop;--结束循环 end loop; --if判断
if p_number > 0 then --打印数据在PL/SQL控制台
dbms_output.put_line('料号:' || sUserCode.itemcode || '组织:' ||sUserCode.invorgid); select it.num1
into p_number
from table4 it
where it.num1 = '2'; end if; --异常
exception
WHEN others THEN
rollback;
dbms_output.put_line('ERROR异常:' || SQLERRM); end;

游标的使用有很多种

常用的有两种,一种是例子中的使用for展开

另一种是OPEN CLOSE的形式展开

  OPEN maindata;
LOOP
FETCH maindata
INTO r;
EXIT WHEN maindata%notfound; XXX; END LOOP;
CLOSE c;

如果想把数据放在临时表中,在PL/SQL中,可以

--定义一个临时表
TYPE g_tbl IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER;
;
--定义一个变量
v_tbl g_tbl;
;
--for循环存数据
FOR r_v_tbl IN 游标或(select语句) LOOP
v_tbl(i) := r_v_tbl.value;
i := i + 1;
end loop;

Oracle SQL 创建一个简单的存储过程procedure的更多相关文章

  1. mysql 如何创建一个简单的存储过程

    1 用mysql客户端登入2 选择数据库 mysql>use test3 查询当前数据库有哪些存储过程 mysql>show procedure status where Db='test ...

  2. SQL点滴28—一个简单的存储过程

    原文:SQL点滴28-一个简单的存储过程 在表中写入一条数据同事要向另外一个表中写入信息,所以会使用到事务.实际使用的时候还会一次向一个表中吸入多条数据,下面的存储过程,将字符串拆分成数组然后写入到表 ...

  3. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二)(代码篇)

    这篇是上一篇的延续: 用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 源代码在github上可以下载,地址:https://github.com/guoxia ...

  4. 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型

    第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...

  5. 用django创建一个简单的sns

    用django创建一个简单的sns 1.首先创建一个工程newsns django-admin.py startproject newsns 在工程目录下新建一个文件夹templates,在该文件夹下 ...

  6. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(三)(错误整理篇)

    使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二) 以上两篇已经把流 ...

  7. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一)

    梳理下使用spring+springMVC+mybatis 整合后的一个简单实例:输入用户的 ID,之后显示用户的信息(此次由于篇幅问题,会分几次进行说明,此次是工程的创建,逆向生成文件以及这个简单查 ...

  8. 如何创建一个简单的Visual Studio Code扩展

    注:本文提到的代码示例下载地址>How to create a simple extension for VS Code VS Code 是微软推出的一款轻量级的代码编辑器,免费,开源,支持多种 ...

  9. 如何创建一个简单的C++同步锁框架(译)

    翻译自codeproject上面的一篇文章,题目是:如何创建一个简单的c++同步锁框架 目录 介绍 背景 临界区 & 互斥 & 信号 临界区 互斥 信号 更多信息 建立锁框架的目的 B ...

  10. Windows 8.1 应用再出发 (WinJS) - 创建一个简单项目

    前面几篇我们介绍了如何利用 C# + XAML 完成Windows Store App 功能的实现,接下来的几篇我们来看看如何利用 Html + WinJS 来完成这些功能. 本篇我们使用WinJS ...

随机推荐

  1. StatefulSet是怎样实现的

    StatefulSet是Kubernetes中用于管理有状态应用的标准实现.与Deployment不同,StatefulSet为每个Pod提供了一个唯一的.稳定的网络标识符,并且Pod的启动和停止顺序 ...

  2. 基于python的固定间隔时间执行实例解析

    一 概念 datetime的用法如下: import datetime. # 打印当前时间 time1 = datetime.datetime.now() print(time1) # 打印按指定格式 ...

  3. 面试官:小伙子,能聊明白JMM给你SSP!我:嘚吧嘚吧一万字,直接征服面试官!

    写在开头 面试官:小伙子,JMM了解吗? 我:JMM(Java Memory Model),Java内存模型呀,学过的! 面试官:那能给我详细的聊一聊吗,越详细越好! 我:嗯~,确定越详细越好?起码得 ...

  4. FLTK基于cmake编译以及使用(Windows、macOS以及Linux)

    最近因为一些学习的原因,需要使用一款跨平台的轻量级的GUI+图像绘制 C/C++库.经过一番调研以后,最终从GTK+.FLTK中选出了FLTK,跨平台.够轻量.本文将在Windows.macOS以及L ...

  5. 没想到三天10KStar的营销利器MediaCrawler开源作者已经删库了

    前言 一站式社交平台数据抓取利器,带你玩转小红书.抖音.快手.B站和微博数据分析 不经意间,来查看MediaCrawler仓库源码,发现作者已经删库了.看来是领奖了.才几天不到的时间Star数量已经直 ...

  6. 关于tomcat容器抛出的异常解决方案之一

    1,描述 问题类型:调试信息泄露 如: 现要求:前端页面不显示调试信息. 解决方案: 替换默认的tomcat <dependency> <groupId>org.springf ...

  7. SQL调优系列--数据严重倾斜的连接优化

    背景 对于两个大表关联的场景,如果过滤条件的列值,存在高度倾斜,可以考虑根据反向滤值,进行过滤操作,减少连接的CPU时间. 数据准备 -- 状态表 tp01_state 记录 大表tp01 记录的多种 ...

  8. NET Core使用Grpc通信(一):一元

    gRPC是一个现代的开源高性能远程过程调用(RPC)框架,它可以高效地连接数据中心内和跨数据中心的服务,支持负载平衡.跟踪.运行状况检查和身份验证. gRPC通过使用 Protocol Buffers ...

  9. 【已解决】linux环境jps命令不显示进程

    2021-09-28 10:26:42 问题描述: 输入jps后不显示进程 解决办法 1. cd /tmp/hsperfdata_root/ 2. ls 如果是空的 3. rm -rf hsperfd ...

  10. 攻防世界 Replace Reverse二星题

    解题过程中,虽然解出来了,但是磕磕绊绊犯了一些错误,记录一下 分析过程 PE查壳 有一个upx壳,最下面给了脱壳提示: upx.exe -d Replace.exe 脱壳结束,丢到IDA里,SHIF+ ...