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. FreeRTOS教程3 中断管理

    1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) Keil µVision5 IDE(MDK-Arm) 野火DAP仿真器 XCO ...

  2. mikumikudance 和 pmxEditor 都可以打开 pmx

    mikumikudance 和 pmxEditor 都可以打开 pmx 模型下载 https://www.bilibili.com/blackboard/activity-5hkwDIRkBv.htm ...

  3. vue table 里面 slot 的模板复用 slot-scope template v-for

    vue table 里面 slot 的模板复用 slot-scope template v-for 需求 经常在table里面要有自定义列,但是会有相同的自定义列,这个时候又不想写很多一样的templ ...

  4. t w 不连读,只不过离得很近 twins twelve 单词发音

    t w 不连读,只不过离得很近 twins twelve

  5. C++标准库字符串流sstream

    sstream与strstream 在C++有两种字符串流,一种在<strstream>中定义,另一种在<sstream>中定义,两者的区别如下: strstream里包含st ...

  6. Github账号开启账号双重验证

    原文: Github开启双重验证 - Stars-One的杂货小窝 今天在浏览开源项目的时候,突然Github有个提示我要在9月18日前开启双重验证,说是不完成的话,到时候的Github账号会受到限制 ...

  7. PAT 甲级【1015 Reversible Primes】

    考察素数判断 考察进制转换 import java.io.IOException; import java.io.InputStreamReader; import java.io.StreamTok ...

  8. 记录--vue 拉伸指令

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在我们项目开发中,经常会有布局拉伸的需求,接下来 让我们一步步用 vue指令 实现这个需求 动手开发 在线体验 codesandbo ...

  9. Kubernetes客户端认证(三)—— Kubernetes使用CertificateSigningRequest方式签发客户端证书

    1.概述 在<Kubernetes客户端认证(一)-- 基于CA证书的双向认证方式>和<Kubernetes客户端认证(二)-- 基于ServiceAccount的JWTToken认 ...

  10. 微信小程序中rich-text文本溢出(三个...)

    小程序中当rich-text中数据较多时就会出现溢出的现象 如下 此时的页面效果并不是很理想 我们可以在数据中给个div <div style="overflow: hidden;wh ...