专栏首页颍川Oracle存储过程

Oracle存储过程

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/wangtongxue123456/article/details/79681881

  • Orcle储存过程
    • 什么是储存过程
    • 创建和替换储存过程的语法
    • 存储函数
      • Out中使用光标

Orcle储存过程

什么是储存过程

  1. 什么是存储过程,什么是存储函数
    • 指储存在数据库中供所有用户程序调用的子程序叫做储存过程、储存函数
  2. 储存过程和存储函数比较
    • 相同点
      • 都是完成特定功能的程序
    • 区别
      • 是否用return语句返回值(储存函数可以用return)
  3. 怎么创建储存过程

创建和替换储存过程的语法

语法

create [or replace] PROCEDURE 过程名(参数列表) AS PLSQL 子程序体

实例

set serveroutput on
--第一个储存过程 :Hello Word
create or replace procedure sayehelloworld
as
--说明部分
/*
调用存储过程的两种方法
1.exec sayhelloworld()
2.
    begin
    sayehelloworld
    sayehelloworld
    end;
*/
begin
    DBMS_OUTPUT.PUT_LINE('Hello Word');
end;

带参数的储存过程

--创建带参数的储存过程
--给指定的员工涨100块钱
/**
如何调用
begin
    raisealary('a')
commit
end;
*/
create or replace procedure raisealary(eno in char)
as
--定义一个变量保存涨前的薪水
psal a.num%type;
begin
    --得到员工涨前的薪水
    select num into psal from a where id=eno;
    --给员工涨工资
    update a set num=num+100 where num=eno;
-- 一般不再储存过程中提交和回滚
--打印
DBMS_OUTPUT.PUT_LINE('涨前'||psal||'涨后'||psal+100);
end;

存储函数

函数 为一 命名的储存过程,可带参数,并返回一计算值。 函数和过程结构类似,但必须有一个return子句,用于返回函数值。 创建存储函数的语法

create [or replace] function 函数名(参数列表) 
return 函数值类型
AS
pl/sql 子程序体

in和out参数

一般来讲,存储过程和存储函数的区别在于储存函数可以有一个返回值;而存储过程没有返回值。 1、存储过程和存储函数都可以有out参数。2、存储过程和存储函数都可以有多个out参数哦。3、存储过程可以通过out参数来实现返回值。

什么时候用存储过程和存储函数

  • 原则
    • 如果只有一个返回值,用存储函数;否则,就用储存过程。

Out中使用光标

  • 实例
  • 包头
CREATE OR REPLACE 
PACKAGE QUERYCESHI AS 

  type numlistcursor is ref cursor;
  procedure finda(numlist out numlistcursor);

END QUERYCESHI;
  • 包体
CREATE OR REPLACE
PACKAGE BODY QUERYCESHI AS

  procedure finda(numlist out numlistcursor) AS
  BEGIN
    -- TODO: procedure QUERYCESHI.finda所需的实施
     open numlist for select * from A;
    NULL;
  END finda;

END QUERYCESHI;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Go基础语法(一)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    颍川
  • Java编程思想读书笔记--一切都是对象

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    颍川
  • Java数据结构与算法--简单排序

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    颍川
  • Hbase源码系列之源码前奏hbase:meta表相关详细介绍

    一,基本功能介绍 -root-表在HBase 0.9.6以后的版本被移除了。 Hbase 0.9.6以前,三个重要信息: 1,-root-表的位置存储在Zook...

    Spark学习技巧
  • Python开发【笔记】:从海量文件的目

    前言:平常在python中从文件夹中获取文件名的简单方法   os.system('ll /data/')   但是当文件夹中含有巨量文件时,这种方式完全是行不...

    用户2398817
  • 分布式系统CAP理论

    往期精选 在讨论常见架构前,先简单了解一下CAP理论: CAP是Consistency、Availablity和Partition-tolerance的缩写。分...

    企鹅号小编
  • 设计模式——抽象工厂模式

    ● 为创建一组相关或依赖的对象提供一个接口,而无需指定他们的具体类型。是工厂方法模式的升级版。

    蜻蜓队长
  • .net自定义错误页面实现升级篇

      在上一篇博文 “.net自定义错误页面实现” 中已经介绍了在.net中如何实现自定义错误页面实现(有需要者可以去上一篇博文了解),单纯按照上一篇博文那样设置...

    小小许
  • PySpark 通过Arrow加速

    PySpark是Spark 实现 Unify BigData && Machine Learning目标的基石之一。通过PySpark,我们可以用Python在...

    用户2936994
  • RetinaNet在航空图像行人检测中的应用

    航空图像中的目标检测是一个具有挑战性且有趣的问题。随着无人机成本的降低,航空影像数据量的激增,拥有能够从航空数据中提取有价值的信息的模型将非常有用。

    AI科技评论

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动