Oracle 遍历变量游标

news2024/12/28 20:46:47

背景

        由于我们的数据库系统中的游标特别多,DBA让我们优化,减少游标的使用。

  • 电脑系统:windows
  • 数据库:Oracle
  • 数据库图形化界面工具:Toad,DBeaver(我測試的時候用的)
  • 记录日期:2023-09-04

具体实现

        在我目前所了解到的数据库中能够实现遍历的有游标(CURSOR)、FOR循环两种方式,不过都要跟loop...end loop;联合使用。

        我这里都用了匿名函数,这些都是可以直接执行的,DBeaver可通過【Ctrl+Shift+O 或者,您可以通过单击“查看服务器输出”】

游标
  • 优点
    • 可随时打开关闭使用,可全局可局部
  • 缺点
    • 查询了多少变量,就要承接多少
-- 這是一個匿名循環,可以直接執行

DECLARE
    var_text   VARCHAR(100);
    var_value1 VARCHAR(100);
    var_value2 VARCHAR(100);

    CURSOR GET_VALUE IS
        SELECT 'value1', 'value2' FROM dual
        UNION ALL
        SELECT 'value11', 'value22' FROM dual;

BEGIN
    OPEN GET_VALUE;

    DBMS_OUTPUT.PUT_LINE('CURSOR循環開始');

    LOOP
        BEGIN
            FETCH GET_VALUE INTO var_value1, var_value2;

            EXIT WHEN GET_VALUE%NOTFOUND;
            -- var_text:=var_text||''''||var_value1||'''';
            var_text := var_value1;
            DBMS_OUTPUT.PUT_LINE(var_value1);

            /*
             * 
             * 具體實現
             * 
             */
        END;
    END LOOP;

    CLOSE GET_VALUE;
END;
FOR
  • 优点 
    • 类似代码中的foreach(x in collection)循环,取用也与foreach一样,取用方便
  • 缺点
    • 主要用于局部
    • 像from dual这种的要给定栏位,不然会报错,如果是你自己建的表,一般就不会报错
-- 循环
DECLARE
    var_text   VARCHAR(100);
    var_value1 VARCHAR(100);
    var_value2 VARCHAR(100);
BEGIN
    DBMS_OUTPUT.PUT_LINE('FOR循环开始');
    
    FOR x IN (
        SELECT 'value1' value1, 'value2' value2, 'value3', 'value4', 'value5' FROM dual
        UNION ALL
        SELECT 'value111', 'value222', 'value333', 'value444', 'value555' FROM dual
        UNION ALL
        SELECT 'value911', 'value922', 'value933', 'value944', 'value955' FROM dual
    )
    LOOP
        var_value1 := x.value1;
        var_value2 := x.value2;
        
        DBMS_OUTPUT.PUT_LINE(var_value1);
        
        EXIT WHEN var_value2 = 'value222';
        -- IF var_value1 LIKE 'US%' THEN
        -- CONTINUE;
    END LOOP;
END;

总结

        那些优缺点都是我自己用的时候感觉的,这些东西其实有时候也看你如何使用,也有可能是我还没发现好的用法,仅供大家参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/972520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

macbookpro怎么删除软件没有鼠标

macbookpro怎么删除软件没有鼠标,macbookpro触摸板可以替代鼠标进行操作。左右键功能与鼠标相同,可用于执行删除操作。此外,还可以利用键盘上的Delete键来删除选中的文件。 删除软件方法 方法1、打开应用程序,键盘按住control,加点…

解决微信小程序recycle-view使用百分比单位控制宽高时出现的内容溢出问题

recycle-view是微信小程序官方推出的一个经过优化的长列表组件,但是在使用百分比单位控制高宽时有个内容溢出问题,虽然它提供了height和width的参数可以设置宽高,但每次写列表都需要去js里获取宽高并设置是较为麻烦的,所以现在来着…

Vue 3 基础(二)基础 1

API 参考 1、创建一个 Vue 应用 1.1 应用实例 每个 Vue 应用都是通过 createApp 函数创建一个新的 应用实例: import { createApp } from vueconst app createApp({/* 根组件选项 */ })1.2 根组件 我们传入 createApp 的对象实际上是一个组件,每个…

uni-app 之 图片

uni-app 之 图片 获取图片 v-bind 动态绑定 image.png <template><view><view>--- 获取图片1 ---<image src"../../static/img/tabbar_home1.png"></image></view><view>--- 获取图片2 v-bind 动态绑定---<image v-bi…

SolVES4.1学习1——安装与使用教程

1、下载并安装 SolVES 4版本是QGIS插件&#xff0c;但实际使用过程中发现在最新版的QGIS安装该插件过程中&#xff0c;会报错或异常。因此需安装特定版本的软件。共需安装如下图软件及Java环境等。 根据官方文档安装好后&#xff0c;可以进行相关操作。 2、设置QGIS环境 QG…

AutoSAR配置与实践(基础篇)3.7 BSW的WatchDog功能(下)

AutoSAR配置与实践(基础篇)3.7 BSW的WatchDog功能(下) BSW的WatchDog功能(下)一、WDG和其他模块交互BSW的WatchDog功能(下) ->返回总目录<- 一、WDG和其他模块交互 模块交互 看门狗模块由WdgM统一管理,这里围绕WdgM模块分析与其他模块交互。通过交互的说明,可以…

css画箭头图标放标题前面,旋转,border的单个边框设置

CSS边框属性_css border dotted_小张biubiu的博客-CSDN博客 你还不知道css的旋转效果怎么实现&#xff1f;来这里看看吧_css旋转效果_我糖呢的博客-CSDN博客 .sub-title{position: relative;margin-left: 59px;& span{color: #1CDBFE;};& span::before{content: "…

MyBatis-Plus深入 —— 条件构造器与插件管理

前言 在前面的文章中&#xff0c;荔枝梳理了一个MyBatis-Plus的基本使用、配置和通用Service接口&#xff0c;我们发现在MyBatis-Plus的辅助增强下我们不再需要通过配置xml文件中的sql语句来实现基本的sql操作了&#xff0c;不愧是最佳搭档&#xff01;在这篇文章中&#xff0c…

ping: www.baidu.com: Name or service not known 写了DNS还是不行

环境描述&#xff1a;ESXI平台上&#xff0c;一台Centos7虚拟主机。 问题描述&#xff1a;平台上的其他的虚拟机可以正常ping通&#xff0c;就这台ping IP地址可以通&#xff0c;ping域名解析失败。 排查过程&#xff1a; 1、检查网卡配置文件和/etc/resolv.conf配置文件是否…

【综述+3D】基于NeRF的三维视觉2023年度进展报告(截止2023.06.10)

论文&#xff1a;2003.Representing Scenes as Neural Radiance Fields for View Synthesis 官方网站&#xff1a;https://www.matthewtancik.com/nerf 突破性后续改进&#xff1a; Instant Neural Graphics Primitives with a Multiresolution Hash Encoding | 展示官网&#…

K8S的介绍和架构

仅供入门 K8S的介绍和架构 一. 什么是kubernetes二、Kubernetes架构和组件 2.1 核心组件 2.1.1 Kubernetes Master控制组件&#xff0c;调度管理整个系统&#xff08;集群&#xff09;&#xff0c;包含如下组件: a、Kubernetes API Serverb、Kubernetes Schedulerc、Kubernet…

【前端】CSS-Grid网格布局

目录 一、grid布局是什么二、grid布局的属性三、容器属性1、display①、语句②、属性值 2、grid-template-columns属性、grid-template-rows属性①、定义②、属性值1&#xff09;、固定的列宽和行高2&#xff09;、repeat()函数3&#xff09;、auto-fill关键字4&#xff09;、f…

Vue指令之战:v-if vs. v-show -你应该使用哪一个?

在Vue.js中&#xff0c;条件渲染是一项常见任务&#xff0c;而v-if和v-show是两个最常用的指令。这两个指令在实现方式上有所不同&#xff0c;对于开发者来说选择正确的指令可能具有挑战性。本文将深入探讨Vue 2和Vue 3中的v-if和v-show指令的区别&#xff0c;并结合实际应用场…

Linux的命令

Linux的命令分为四个类型&#xff1a;文件操作命令、系统操作命令、文本处理命令和网络操作命令。下面简单介绍一下常用的Linux命令&#xff1a; 文件操作命令 ls&#xff1a;列出目录下的所有文件和目录。 cd&#xff1a;切换当前目录。 mkdir&#xff1a;创建一个新目录。…

<图像处理> 可分离滤波器核

可分离滤波器核 空间滤波器核是一个二维矩阵&#xff0c;若它能够表示为两个一维矩阵的乘积时&#xff0c;则表示该滤波器核是可分离的。 例如&#xff0c;一个3x3的核&#xff0c; w [ 1 1 1 1 1 1 1 1 1 ] w\begin{bmatrix} 1 & 1 & 1\\ 1 & 1& 1\\ 1 &am…

操作系统(OS)与系统进程

操作系统&#xff08;OS&#xff09;与系统进程 冯诺依曼体系结构操作系统(Operator System)进程基本概念进程的描述&#xff08;PCB&#xff09;查看进程通过系统调用获取进程标示符&#xff08;PID&#xff09;通过系统调用创建进程&#xff08;fork&#xff09;进程状态&…

安防监控/视频汇聚/云存储/AI智能视频融合平台页面新增地图展示功能

AI智能分析网关包含有20多种算法&#xff0c;包括人脸、人体、车辆、车牌、行为分析、烟火、入侵、聚集、安全帽、反光衣等等&#xff0c;可应用在安全生产、通用园区、智慧食安、智慧城管、智慧煤矿等场景中。将网关硬件结合我们的视频汇聚/安防监控/视频融合平台EasyCVR一起使…

使用Python进行健身手表数据分析

健身手表(Fitness Watch)数据分析涉及分析健身可穿戴设备或智能手表收集的数据&#xff0c;以深入了解用户的健康和活动模式。这些设备可以跟踪所走的步数、消耗的能量、步行速度等指标。本文将带您完成使用Python进行Fitness Watch数据分析的任务。 Fitness Watch数据分析是健…

QT多线程

1.QT4.7以前的版本-----线程处理方式 1. 出现的警告 直接使用从UI—>转到槽&#xff0c;就会出现警告 2. 出现的错误 error: invalid operands of types QTimer* and void (QTimer::*)(QTimer::QPrivateSignal) to binary operator& 错误:无效的操作数类型’QTimer…