Oracle SQL 创建一个简单的存储过程procedure
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的更多相关文章
- mysql 如何创建一个简单的存储过程
1 用mysql客户端登入2 选择数据库 mysql>use test3 查询当前数据库有哪些存储过程 mysql>show procedure status where Db='test ...
- SQL点滴28—一个简单的存储过程
原文:SQL点滴28-一个简单的存储过程 在表中写入一条数据同事要向另外一个表中写入信息,所以会使用到事务.实际使用的时候还会一次向一个表中吸入多条数据,下面的存储过程,将字符串拆分成数组然后写入到表 ...
- 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二)(代码篇)
这篇是上一篇的延续: 用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 源代码在github上可以下载,地址:https://github.com/guoxia ...
- 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型
第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...
- 用django创建一个简单的sns
用django创建一个简单的sns 1.首先创建一个工程newsns django-admin.py startproject newsns 在工程目录下新建一个文件夹templates,在该文件夹下 ...
- 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(三)(错误整理篇)
使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二) 以上两篇已经把流 ...
- 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一)
梳理下使用spring+springMVC+mybatis 整合后的一个简单实例:输入用户的 ID,之后显示用户的信息(此次由于篇幅问题,会分几次进行说明,此次是工程的创建,逆向生成文件以及这个简单查 ...
- 如何创建一个简单的Visual Studio Code扩展
注:本文提到的代码示例下载地址>How to create a simple extension for VS Code VS Code 是微软推出的一款轻量级的代码编辑器,免费,开源,支持多种 ...
- 如何创建一个简单的C++同步锁框架(译)
翻译自codeproject上面的一篇文章,题目是:如何创建一个简单的c++同步锁框架 目录 介绍 背景 临界区 & 互斥 & 信号 临界区 互斥 信号 更多信息 建立锁框架的目的 B ...
- Windows 8.1 应用再出发 (WinJS) - 创建一个简单项目
前面几篇我们介绍了如何利用 C# + XAML 完成Windows Store App 功能的实现,接下来的几篇我们来看看如何利用 Html + WinJS 来完成这些功能. 本篇我们使用WinJS ...
随机推荐
- puppeteer 提交 gitee - win10 (放弃,改成手点)async.series
puppeteer 提交 gitee 需求 不想每次都登录到gitee上点击发布,想自动点击. 用puppeteer 模拟下 现在是win10环境,安装比较费尽 npm i puppeteer 这里用 ...
- C++学习笔记之高级语法
目录 高级语法 面向对象--类 对象的属性 运算符重载 拷贝构造函数 IO缓存 头文件的重复包含问题 深拷贝与浅拷贝 面向对象三大特性 高级语法 面向对象--类 C++使用struct.class来定 ...
- 日常办公——Word中重复标题的设置
在Word中,遇到表格分页时,可以设置重复标题,如下图所示:
- c语言中静态链接库的创建和使用
静态链接库的创建 静态链接库其实就相当于压缩包,其内部可以包含多个源文件.但需要注意的是,并非任何一个源文件都可以被加工成静态链接库,其至少需要满足以下 2 个条件: 源文件中只提供可以重复使用的代码 ...
- 视野修炼-技术周刊第76期 | Rolldown 开源
欢迎来到第 76 期的[视野修炼 - 技术周刊],下面是本期的精选内容简介 强烈推荐 Rolldown 开源 - Rollup 的锈化版 前端调试工具超全汇总 开源工具&技术资讯 OhMyLi ...
- 基于proteus的4019的移位设计
基于proteus的4019的移位设计 1.实验原理 4019是一个基于CMOS的数字集成芯片,具有数据选择和逻辑门或两种工作状态.这里利用数据选择的切换,实现数据的左移和右移操作.简而言之就是左移使 ...
- C++中std::function常见用法
C++标准库中的std::function是一个通用的函数封装,可以用来存储.复制.调用任何可调用对象(函数.函数指针.成员函数指针.lambda表达式等).以下是std::function的一些常见 ...
- c语言的printf常用的一些转换说明符及其含义
整数类型: %d: 十进制整数 (decimal: 十进制的) %u: 无符号整数 (unsigned: 无符号的) %i: 十进制整数 (integer: 整数) %o: 八进制数 (octal: ...
- #分块,可撤销并查集#洛谷 5443 [APIO2019]桥梁
题目 分析 最直接的做法就是在线一边修改边权,询问直接全部重排, 然后用可撤销并查集维护连通块大小,这样时间复杂度为 \(O(qm)\) 同样尽量让大部分的边不需要修改边权,那么每 \(B\) 个操作 ...
- #数学期望,状压dp,记忆化搜索#nssl 1468 V
分析 赛时写了个\(O(n!)\)的纯暴力,其实我现在才发现\(O(n!)\)的暴力一般都能用\(O(n2^n)\)的状压dp解决 但是其实不是每个状态都能被访问到,所以若\(n\)过大,用\(map ...