iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Oracle存储过程中Procedure简单分析
  • 476
分享到

Oracle存储过程中Procedure简单分析

2024-04-02 19:04:59 476人浏览 薄情痞子
摘要

今天就跟大家聊聊有关oracle存储过程中Procedure简单分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 这

今天就跟大家聊聊有关oracle存储过程中Procedure简单分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

这里我们来讨论存储过程的一些高级选项:cursor游标
游标是sql的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据的io交换会降低效率,影响速度。这也是引入游标概念的一个原因。


cursor游标可以分为三种类型:隐式cursor、显式cursor和动态(ref) cursor
1、首先介绍一下隐式cursor
对于select…into…语句,一次只能从数据库中获取到一条数据,对于这种类型的DML Sql语句,就是隐式Cursor。例如:Select / Update / Insert/ Delete操作。 
作用:可以通过隐式cursor的属性来了解操作的状态和结果,从而达到流程的控制。Cursor的属性包含: 
SQL%ROWCOUNT 整型 代表DML语句成功执行的数据行数 
SQL%FOUND 布尔型 值为TRUE代表插入、删除、更新或单行查询操作成功 
SQL%NOTFOUND 布尔型 与SQL%FOUND属性返回值相反 
SQL%ISOPEN 布尔型 DML执行过程中为真,结束后为假 
隐式Cursor是系统自动打开和关闭Cursor. 


下面举个例子:
create or replace procedure Obj_up as
begin
  update obj set object_name = 'MyMarry' where object_id = '3';
  if SQL%Found then 
    dbms_output.put_line('Object_name is updated successfully!');
    commit;
  else
    dbms_output.put_line('Object_name is updated failed!');
  end if;
end;
执行这个存储过程
begin
  -- Call the procedure
  obj_up;
end;


2、然后介绍一下显式cursor
对于从数据库中提取多行数据,就需要使用显式Cursor。显式Cursor的属性包含: 
游标的属性 返回值类型意义
%ROWCOUNT 整型 获得FETCH语句返回的数据行数 
%FOUND 布尔型 最近的FETCH语句返回一行数据则为真,否则为假 
%NOTFOUND 布尔型 与%FOUND属性返回值相反 
%ISOPEN 布尔型 游标已经打开时值为真,否则为假


对于显式游标的运用分为四个步骤: 
定义游标—Cursor [Cursor Name] IS
打开游标—Open [Cursor Name]
操作数据—Fetch [Cursor name]
关闭游标—Close [Cursor Name]这个步骤不要遗漏。 

下面举个例子:
create or replace procedure proc_salary is
  --定义变量
  v_empno emp.empno%TYPE;
  v_ename emp.ename%TYPE;
  v_sal   emp.sal%TYPE;
  --定义游标
  CURSOR emp_cursor IS
    SELECT empno, ename, sal from emp;
BEGIN
  --循环开始
  LOOP
    IF NOT emp_cursor%ISOPEN THEN
      OPEN emp_cursor;
    END IF;  
    FETCH emp_cursor
      INTO v_empno, v_ename, v_sal;
    --退出循环的条件
    EXIT WHEN emp_cursor%NOTFOUND OR emp_cursor%NOTFOUND IS NULL;
    dbms_output.put_line('emp no ' || v_empno || ' name is ' || v_ename || 'salary is ' ||
                         v_sal);
  END LOOP;
END;
/
执行
begin
  proc_salary;
end;

3、最后介绍一下动态cursor
静态游标在执行前就能确定对应查询语句,最多只是传递一些查询参数而已,所以比较容易处理。动态游标是在执行前查询SQL是动态拼接的,不确定具体查询那些表和条件。
与隐式Cursor,显式Cursor的区别,Ref Cursor是可以通过在运行期间传递参数来获取数据结果集。而另外两种Cursor,是静态的,在编译期间就决定数据结果集。 
Ref cursor的使用
Type [Cursor type name] is ref cursor 
Define 动态的Sql语句 
Open cursor 
操作数据—Fetch [Cursor name] 
Close Cursor 

下面举个例子
动态SQL作为游标执行的语句,定义时仅说明类型,打开时指定SQL.循环处理是采用loop,所以需要手动结束。

create or replace PROCEDURE PX_VARIFY_ZRP_EXT_MATCH(V_TABLE_NAME IN VARCHAR2,
                                                    V_IMPORT_ID  IN VARCHAR2) AS
  V_SQL  VARCHAR2(1024);
  VU_SQL VARCHAR2(1024);
  TYPE CV_PERSONS IS REF CURSOR;
  CV_PERSON CV_PERSONS;
  V_ID      NAT_PERSON_INFO.ID%TYPE; -- ID    
  V_ID_TYPE NAT_PERSON_INFO.ID_TYPE%TYPE; -- 证件类型  
  V_ID_CODE NAT_PERSON_INFO.ID_CODE%TYPE; -- 证件号码  
  V_PERSON_ID VARCHAR2(36); -- 返回主体ID  
  V_CNT       NUMBER(5, 0); -- 符合条件记录数  
BEGIN
  V_SQL := 'SELECT ID,ID_TYPE,ID_CODE ';
  V_SQL := V_SQL || ' FROM ' || V_TABLE_NAME;
  V_SQL := V_SQL || ' WHERE IMPORT_ID = ' || V_IMPORT_ID;
  OPEN CV_PERSON FOR V_SQL;
  LOOP
    FETCH CV_PERSON
      INTO V_ID, V_ID_TYPE, V_ID_CODE;
    EXIT WHEN CV_PERSON%NOTFOUND;
    PX_VARIFY_ZRP_IDS_ATOM(V_ID_TYPE, V_ID_CODE, V_PERSON_ID, V_CNT);
    IF V_CNT = 1 AND V_PERSON_ID IS NOT NULL THEN
      VU_SQL := 'UPDATE ' || V_TABLE_NAME || ' SET PERSON_ID = ''' ||
                V_PERSON_ID || ''' WHERE ID = ''' || V_ID || '''';
    END IF;
    IF V_CNT = 0 AND V_PERSON_ID IS NULL THEN
      VU_SQL := 'UPDATE ' || V_TABLE_NAME ||
                ' SET IMPORT_CHECK_FLAG = ''0'' , ';
      VU_SQL := VU_SQL || ' CHECK_ERR_MSG = CHECK_ERR_MSG || ' ||
                ''' 验证规则代码:1001;错误描述:未找到对应自然人信息.''';
      VU_SQL := VU_SQL || ' WHERE ID = ''' || V_ID || '''';
    END IF;
    DBMS_OUTPUT.PUT_LINE(VU_SQL);
    execute immediate VU_SQL;
  END LOOP;
执行
begin
  PX_VARIFY_ZRP_EXT_MATCH;
end;

看完上述内容,你们对Oracle存储过程中Procedure简单分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网数据库频道,感谢大家的支持。

您可能感兴趣的文档:

--结束END--

本文标题: Oracle存储过程中Procedure简单分析

本文链接: https://www.lsjlt.com/news/65710.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle存储过程中Procedure简单分析
    今天就跟大家聊聊有关Oracle存储过程中Procedure简单分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 这...
    99+
    2022-10-19
  • Oracle存储过程Procedure分析
    本篇内容介绍了“Oracle存储过程Procedure分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我...
    99+
    2022-10-19
  • Oracle存储过程Procedure简单介绍(第一部分)
    我们都知道SQL语言是没有判断和过程控制语句的,而PL/SQL又很好的补充了SQL语言这方面的不足。而存储过程也是一种PL/SQL块,但是存储过程又跟传统的PL/SQL块不一样,存储过程是以命名的方式存储于...
    99+
    2022-10-18
  • Oracle procedure存储过程是什么
    Oracle存储过程是一种在数据库中存储的可重复使用的程序单元。它可以接受参数并执行一系列的数据库操作,比如查询、插入、更新和删除数...
    99+
    2023-10-23
    Oracle
  • oracle PL/SQL与存储过程分析
    本篇内容介绍了“oracle PL/SQL与存储过程分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!PL...
    99+
    2022-10-18
  • 分析Oracle存储过程中的out参数
    本篇内容主要讲解“分析Oracle存储过程中的out参数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“分析Oracle存储过程中的out参数”吧!一、什么是存储...
    99+
    2022-10-18
  • Oracle中命名块之存储过程的示例分析
    这篇文章将为大家详细讲解有关Oracle中命名块之存储过程的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、匿名块和命名块◆PL/SQL块分为良好总:命名块和匿...
    99+
    2022-10-18
  • sql存储过程几个简单例子
    1. 创建一个简单的存储过程,返回所有顾客的数量:```sqlCREATE PROCEDURE GetCustomerCountAS...
    99+
    2023-09-22
    SQL
  • mysql存储过程举例分析
    这篇文章主要讲解了“mysql存储过程举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql存储过程举例分析”吧!(1).格式MySQL存储过程创...
    99+
    2022-10-19
  • PostgreSQL存储过程源码分析
    这篇文章主要介绍了PostgreSQL存储过程源码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PostgreSQL存储过程源码分析文章都会有所收获,下面我们一起来看看吧。游标PL/pgSQL 游标允许我们...
    99+
    2023-07-05
  • mysql中存储过程的示例分析
    这篇文章主要介绍了mysql中存储过程的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在mysql中,存储过程是一组为了完成特定功能...
    99+
    2022-10-18
  • 简单点,学习的方式简单点~(函数存储过程)
    一个很熟悉的词语函数,最早接触于函数是数学课,万分没想到它在以后的学习中越来越重要。编程语言都会单独给函数开一章节来详细介绍,可见在编程语言中的地位杠杠的!那么函数真的很难学吗?起码对于编程来说(源码除外)...
    99+
    2022-10-18
  • Mysql中调试存储过程最简单的方法
    以前同事告诉我用临时表插入变量数据来查看,但是这种方法过于麻烦,而且Mysql没有比较好的调试存储过程的工具。今天google了下发现可以用select + 变量名的方法来...
    99+
    2022-11-12
  • MySQL中存储过程和存储函数的示例分析
    这篇文章主要为大家展示了“MySQL中存储过程和存储函数的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL中存储过程和存储函数的示例分析”这篇文...
    99+
    2022-10-18
  • mysql存储过程与存储函数实例分析
    这篇文章主要介绍了mysql存储过程与存储函数实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql存储过程与存储函数实例分析文章都会有所收获,下面我们一起来看看吧。...
    99+
    2022-11-30
    mysql
  • mysql存储过程的案例分析
    这篇文章主要介绍mysql存储过程的案例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、什么是存储过程为以后的使用而保存的一条或多条MySQL语句的集合。存储过程思想上就是数据...
    99+
    2022-10-18
  • MySQL的存储过程实例分析
    今天小编给大家分享一下MySQL的存储过程实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2022-10-19
  • Sql Server存储过程实例分析
    今天小编给大家分享一下Sql Server存储过程实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。从存储过程...
    99+
    2023-06-30
  • Mybatis调用MySQL存储过程的简单实现
    1.存储过程的简介我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该...
    99+
    2023-05-31
    mybatis 调用 存储过程
  • ADO.NET存储过程调用举例分析
    这篇文章主要讲解了“ADO.NET存储过程调用举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ADO.NET存储过程调用举例分析”吧!此示例很简单,因为存储过程不需要任何输入参数。也就...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作