Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >oracle创建简单的存储过程

oracle创建简单的存储过程

原创
作者头像
bug专8
修改于 2021-01-14 02:51:16
修改于 2021-01-14 02:51:16
2.5K00
代码可运行
举报
运行总次数:0
代码可运行

创建基本的存储过程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create or replace procedure test1(
       param1 in number,    --传入参数1
       param2 in varchar2,    --传入参数2
       res out varchar2,    --返回参数
       ...      
) is
  cus_param1 number;      --自定义变量1
  cus_param2 varchar2(20);      --自定义变量2
begin
  null;      --处理逻辑的sql
end test1;

函数说明

create or replace procedure test1:创建一个名称为test1的存储过程, 如果存在就覆盖它;

is:关键词,表明后面将跟随一个PL/SQL体;

begin:关键词,表明PL/SQL体的开始;

null;:PL/SQL处理逻辑的sql,至少需要有一句。此处为null表示什么也不做;

end:关键词,表明PL/SQL体的结束;

参数说明

1、传入参数

param1 in numberparam2 in varchar2res out varchar2存储过程参数不带取值范围,类型可以使用任意Oracle中的合法类型;

in表示传入;

out表示输出;

2、变量

cus_param1 numbercus_param2 varchar2(20)变量带取值范围,类型可以使用任意Oracle中的合法类型;

创建带判断和事务的存储过程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create or replace procedure test2(bf_id in number,status in number,res out varchar2) is
  count_num number;
begin
  select count(*) into count_num from sft_sys_bfinfo where bfid=bf_id;
  if count_num > 0 then
    begin
     update sft_sys_bfinfo set tj_cfg=status where bfid=bf_id;
    end;
  end if;
  commit;
  res := '成功';
Exception
  When others then
    Dbms_output.Put_line(sqlerrm); --打印输出错误
    Rollback; --回滚事务
    dbms_output.put_line('存储过程执行异常,事物回滚!');
    res := '失败';
end test2;

变量赋值

1、通过select xxx into 变量赋值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select count(*) into count_num from sft_sys_bfinfo where bfid=bf_id;

2、通过变量:=xxx赋值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
res :='成功'

if判断

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if count_num > 0 then
   begin
    update sft_sys_bfinfo set tj_Cfg=status where bfid=bf_id;
   end;
end if;

提交事物,异常处理,事物回滚

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
commit;
代码语言:java
AI代码解释
复制
Exception
  When others then
    Dbms_output.Put_line(sqlerrm);          --打印输出错误
    Rollback;                               --回滚事务
    dbms_output.put_line('存储过程执行异常,事物回滚!');
    res := '失败';

注意,传入的参数不要和sql的属性名同名

1、错误,查询条件不生效

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select count(*) into count_num from sft_sys_bfinfo where bfid=bfid;

2、正确

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select count(*) into count_num from sft_sys_bfinfo where bfid=bf_id;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL和Oracle对比之存储过程(r5笔记第7天)
昨天晚上帮一个朋友处理了一个关于存储过程的问题,他需要迁移一些Oracle中的存储过程到MySQL中来,但是改了一部分的程序,发现MySQL中没法编译了,报了很多的错误。 这个问题也比较典型,自己就趁热打铁总结了一下。 因为隐私的关系还有代码长度的关系,我就不罗列代码了。 假设Oracle中的存储过程如下,我们需要改写为MySQL代码: set serveroutput on CREATE or replace PROCEDURE test_proc( in_value IN varchar2) as
jeanron100
2018/03/15
7620
Oracle PL/SQL入门语法点
PL_SQL:带有分支和循环,面向过程 匿名块: declare(可选,声明各种变量和游标的地方) begin(必要的,从此开始执行) exception(抓取到异常后执行的) end; [sql] view plaincopy set serveroutput on;(默认是关闭) --最简单的PL/SQL语句块 begin dbms_output.put_line('HelloWorld!'); end; --最简单的语句块 declare v_name varchar2(20); be
java干货
2021/02/19
4900
Oracle带输入输出参数存储过程(包括sql分页功能)
记录一下Oracle带输入输出参数存储过程(包括sql分页功能),免得以后忘记了又要到处去找。
星哥玩云
2022/08/17
7920
一个关于Definer和Invoker的权限问题
1. 用户user1定义的存储过程,即使用sys用户执行,需要参考user1权限?
bisal
2019/01/29
9080
【DB笔试面试466】存储过程或函数如何返回集合类型?
TABLE()函数可接受查询语句或游标作为输入参数,并可输出多行数据,称为表函数。所以,存储过程或函数返回集合类型主要采用的是表函数和PIPELINED函数(管道化表函数)及数组结合的方式。当然,也可以采用存储过程返回系统游标SYS_REFCURSOR或自定义游标的方式。
AiDBA宝典
2019/09/30
1.3K0
ORA-31623: a job is not attached to this session via the specified handle
    在使用Oracel Datapump API时碰到ORA-31623(a job is not attached to this session via the specified handle)错误,从故障描述来 看提示 job并没有成功附加到当前session指定的handle。该package的导入导出一直正常运行究竟是什么原因导致的呢?我们拭目以待......
Leshami
2018/08/14
9420
使用DBMS_SHARED_POOL包将对象固定到共享池
--******************************************
Leshami
2018/08/14
1.1K0
oracle存储过程语法与使用
行1: CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它; 行2:   IS关键词表明后面将跟随一个PL/SQL体。 行3:   BEGIN关键词表明PL/SQL体的开始。 行4:   NULL PL/SQL语句表明什么事都不做,这句不能删去,因为PL/SQL体中至少需要有一句; 行5:   END关键词表明PL/SQL体的结束 2.SELECT INTO STATEMENT 将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条 记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND) 例子: BEGIN SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx; EXCEPTION WHEN NO_DATA_FOUND THEN xxxx; END; …
全栈程序员站长
2022/09/13
9310
Oracle PL/SQL中异常高级特性
  在OraclePL/SQL语句块中exception的异常处理部分是非常重要的组成部分,它决定了在PL/SQL语句块内部可执行部分在发生异常错误时,程序是友好地提示:程序遇到某些错误而无法执行,还是抛出一堆难以理解的Oracle内部错误码。
星哥玩云
2022/08/17
6970
Java程序员的日常——存储过程知识普及
存储过程是保存可以接受或返回用户提供参数的SQL语句集合。在日常的使用中,经常会遇到复杂的业务逻辑和对数据库的操作,使用存储过程可以进行封装。可以在数据库中定义子程序,然后把子程序存储在数据库服务器,之后通过名称调用。 特点 1 提高性能 存储过程是预先编译过,进行优化后,存储在SQL的内存中,使用的时候不需要重新编译,提高工作效率。 2 减少网络流量 存储过程的代码直接存储在数据库中,用户通过名称进行调用,减小网络流量,加快执行速度。如:百万以上的数据查询,存储过程分页要比其他方式的分页快得多 3
用户1154259
2018/01/17
1.6K0
day44_Oracle学习笔记_03
先去Oracle官网去下载最新版本的sqldeveloper,下载地址:https://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html 得到2个zip压缩包,如下图所示:
黑泽君
2018/10/11
1.8K0
day44_Oracle学习笔记_03
Oracle存储过程基本语法介绍
Oracle存储过程基本语法 存储过程    1 CREATE OR REPLACE PROCEDURE 存储过程名    2 IS    3 BEGIN    4 NULL;    5 END;  行1:    CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它;  行2:    IS关键词表明后面将跟随一个PL/SQL体。  行3:    BEGIN关键词表明PL/SQL体的开
用户1220053
2018/02/09
3.8K0
oracle存储过程相关整理
存储过程是 SQL, PL/SQL, Java 语句的组合, 它使你能将执行商业规则的代码从你的应用程序中移动到数据库。这样的结果就是,代码存储一次但是能够被多个程序使用。是存放在数据库服务器上的SQL语句块,其效率高于同等SQL语句6-10倍
全栈程序员站长
2022/09/07
8420
oracle存储过程相关整理
PL/SQL 编程(二)游标、存储过程、函数
游标--数据的缓存区 游标:类似集合,可以让用户像操作数组一样操作查询出来的数据集,实质上,它提供了一种从集合性质的结果中提取单条记录的手段。 可以将游标形象的看成一个变动的光标,他实质上是一个指针,在一段Oracle存放数据查询结果集或者数据操作结果集的内存中,这个指针可以指向结果集任何一条记录。 游标分静态游标和REF游标两类,静态游标包含显式游标和隐式游标。 显式游标: 在使用之前必须有明确的游标声明和定义,这样的游标定义会关联数据查询语句,通常会返回一行或多行。打开游标后,用户可以利用游标的位置对结
二十三年蝉
2018/02/28
3.8K0
Oracle存储过程(while循环、for循环、if判断、sql拼接、游标)
用户10358987
2024/04/23
7420
Oracle存储过程(while循环、for循环、if判断、sql拼接、游标)
DM达梦数据库存储过程
存储过程是数据库中一种重要的编程组件,它允许开发者编写可重复使用的SQL代码块,从而提高应用程序的性能和安全性。达梦数据库提供了强大且灵活的存储过程支持,使得开发者能够以更高效的方式管理和操作数据库资源。本文将深入探讨达梦数据库存储过程的结构、参数传递机制、变量声明与使用、异常处理策略,以及如何创建和调用存储过程,旨在为读者提供全面的理解和实战指导。
用户11147438
2024/07/02
1.1K0
PL/SQL --> 存储过程
存储过程子程序的一种类型,能够完成一些任务,作为schema对象存储于数据库。是一个有名字的PL/SQL代码块,支持接收或不接受参数
Leshami
2018/08/07
1.4K0
PL/SQL学习笔记_03_存储函数与存储过程
ORACLE 提供可以把 PL/SQL 程序存储在数据库中,并可以在任何地方来运行它。这样就叫存储过程或函数。
shirayner
2018/08/10
3940
存储过程常见语法
1、存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行
全栈程序员站长
2022/09/13
1.6K0
存储过程常见语法
Oracle 存储过程包(Package、Package Body)
在Oracle中使用存储过程可以声明单个存储过程,也可以使用包的方式一个存储过程包(PACKAGE)包含许多存储过程。
陈树义
2022/04/29
2.3K0
相关推荐
MySQL和Oracle对比之存储过程(r5笔记第7天)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验