关于存储过程中SQL语句IN条件传参注意说

2023-10-27

背景说明:

在数据库操作中我们经常会用到查询语句,在一些情况下,需要使用到IN条件,正常的查询中IN需要注意的是最好in中的参数不能超过1000个,超过1000的时候oracle会抛出异常。这个如何处理先不提,这次要说的是,如果在存储过程中使用到了IN条件,而参数是由外部传进来的情况下,需要注意一下传参的处理方式。
正常情况下我们拼接条件会写成,(‘张三’,‘李四’,‘王五’),但是对于存储过程的入参来说,这个oracle会看成一个字符串,会变成(’“张三”,“李四”,“王五”’),而到了sql语句中也就变成了:

and name in ('"张三","李四","王五"') and

所以这种方式传进来是不符合我们的初衷的。所以我们要对参数进行一个处理。注意到,只要把in中的条件返回一个字符串拆分后的结果集就行了,然而Oracle中并没有直接的split函数,所以我们必须想办法自定义一个过程或者函数来实现split(字符串分割),下面看一下具体实现。

创建SPLIT函数

首先需要创建一个Oracle类型(Type):

CREATE OR REPLACE TYPE strsplit_type IS TABLE OF VARCHAR2 (4000);

接下来就是实现SPLIT函数(通过管道):

create or replace function strsplit(p_value varchar2, p_split varchar2 := ',')
return strsplit_type
pipelined is
  v_idx       integer;
  v_str       varchar2(1000);
  v_strs_last varchar2(4000) := p_value;
begin
  loop
    v_idx := instr(v_strs_last, p_split);
    exit when v_idx = 0;
    v_str       := substr(v_strs_last, 1, v_idx - 1);
    v_strs_last := substr(v_strs_last, v_idx + 1);
    pipe row(v_str);
  end loop;
  pipe row(v_strs_last);
  return;
end strsplit;

之后修改一下过程中的语句即可:

and name in(select * from table(strsplit(param)));

param参数格式为(‘张三,李四,王五’),这样传输即可。

THE END

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于存储过程中SQL语句IN条件传参注意说 的相关文章

  • 重写QTabWidget,在标签后面添加图标按钮

    原本的QTabWidget没有支持在标签后面添加自定义的按钮的方法 想在后面添加自定义的功能按钮需要重写QTabWidget类 自己实现按钮图标的重绘和鼠标点击判断等操作 1 使用到的主要事件函数 1 void paintEvent QPa
  • 钢条切割-递归,记忆性递归,dp

    钢条切割 方法1 递归 import java util Scanner public class Cutting public static int n 10 public static int p 1 5 8 16 10 17 17 2
  • CBU计算机硕士申请难度,电脑开机后CBU百分只百是什么问题

    公告 为响应国家净网行动 部分内容已经删除 感谢读者理解 话题 电脑开机后CBU百分只百是什么问题回答 有几点建议供您参考 一 使用360 优化大师等工具 将系统启动项进行优化 尽量不要自启动不常用的进程 如果不会就选择 一键优化 二 使用
  • assert_param的应用

    在STM32的固件库 到处都可以见到assert param 的使用 一开始见到这玩意就被打蒙了 不晓得它存在的价值 各种查询 理解综合如下 如果打开任何一个例程中的stm32f10x conf h文件 就可以看到实际上assert par
  • 记一次部署发现r2dbc连接数据库问题

    1 背景 a 项目使用R2DBC连接数据库 b 项目在自己搭建环境部署 各种组件使用自己的镜像 没有问题 在客户现场部署 mysql等使用客户服务 发现启动成功后隔几分钟数据库连接被断开 访问数据库报连接超时 2 最终原因 客户数据库服务的
  • go 入门学习 go 语言变量声明方式

    什么是变量 在编程语言中 为了方便操作内存特定位置的数据 我们用一个特定的名字与位于特定位置的内存块绑定在一起 这个名字被称为变量 动静态语言的区别 静态语言有别于动态语言的一个重要特征 变量声明 比如PHP 动态 解释性语言 不必须设定变
  • Unity 透视镜效果 shader模板测试实现 shader学习杂记(一)

    1 透视镜效果示例 场景中创建了三个物体 一个方块 一堵墙 一个球体 然后创建三个材质球 三个初始的shader 将三个shader分别拖给三个材质球 再把材质球拖给三个物体 给这三个物体红色 蓝色 绿色 便于观察 看一下以红色方块为透视镜
  • 成功简易编译cgal

    以前从csdn上下载的cgal 发现下载不了了 索性进行自己编译 用vcpkg 但是编译boost时中间报错 浪费大量时间 从网上查看 很多人都是源码开始编译 这是劝退的节奏么 感谢博主 CGAL编译与配置 尘埃1206的博客 CSDN博客
  • cocos2d-x for android:CCSprite 精灵动画

    setUniformsForBuiltins nodeToParentTransform kmGLGetMatrix KM GL PROJECTION matrixP kmGLGetMatrix KM GL MODELVIEW matrix
  • 数学 {罗尔中值定理}

    数学 罗尔中值定理 罗尔中值定理 定义 条件 函数满足 C a b C a b C a b
  • 面试官:Java为什么只有值传递?

    面试官爱问的一个基础问题 Java是值传递还是引用传递 想必大家都对这个问题都有自己的看法 那到底事实是怎样的 我们又该如何回答面试官这个问题呢 今天咱们就来好好分析一波 值传递 引用传递 首先 我们得先知道什么叫值传递 什么叫引用传递 知
  • Git第十八讲 Git常见问题解决

    Git常见问题解决 在使用 Git 进行版本控制时 你可能会遇到一些常见问题和错误 本文将介绍一些常见问题 并提供解决方案 以帮助你更好地使用 Git 1 Git 报错和常见问题解决方案 Git 在使用过程中可能会产生各种报错信息 这些错误
  • 刷脸支付全国范围火爆招募合伙人

    出门不带钱 买任何东西都靠手机的生活已经完全颠覆了我们对社会生活的认知 而这样改变仅仅出现3年之久 往前追溯 我们会发现 眼下的信息技术进步呈爆炸式递增的态势 刷脸支付技术的出现与应用 更是将信息生活的便捷度提升到了一个更高的档次上 除了让
  • 524. Longest Word in Dictionary through Deleting

    Given a string and a string dictionary find the longest string in the dictionary that can be formed by deleting some cha
  • [pcl::VoxelGrid::applyFilter] Leaf size is too small for the input dataset 报错解决,亲测可行

    pcl VoxelGrid applyFilter Leaf size is too small for the input dataset 报错解决 亲测可行 1 报错日志 Python pcl 点云下采样时报错如下 pcl VoxelG
  • Android 通过WebService进行网络编程,使用工具类轻松实现

    相信大家在平常的开发中 对网络的操作用到HTTP协议比较多 通过我们使用Get或者Post的方法调用一个数据接口 然后服务器给我们返回JSON格式的数据 我们解析JSON数据然后展现给用户 相信很多人很喜欢服务器给我们返回JSON数据格式
  • 软件测试/测试开发丨利用ChatGPT自动生成测试用例思维导图

    点此获取更多相关资料 简介 思维导图是一种用图形方式表示思维和概念之间关系的工具 有些公司会使用思维导图编写测试用例 这样做的优点是 1 可视化和结构化 2 易于理解 提高效率 而 ChatGPT 是无法直接生成 xmind 格式的文件的
  • webdriver.Chrome()报错:selenium.common.exceptions.WebDriverException: Message: 'chromedriver' ...

    使用selenium模块的webdriver打开谷歌浏览器的时候报错 源代码如下 from selenium import webdriver browser webdriver Chrome print type browser brow
  • 12-8 副作用与纯函数

    1 副作用 函数副作用 指当调用函数时 除了返回函数值之外 还对主调用函数产生附加的影响 例如修改全局变量 函数外的变量 或修改参数 表达式副作用 在表达式求值过程中 需要获取变量的值 但并不改变这些变量的值 这样的表达式称为无副作用的表达
  • 关于Visual Studio内登录microsoft账号白屏问题的解决办法

    如果连接常规Wi Fi无效的话可尝试以下方法 1 断开Wi Fi连接 关闭程序 2 打开手机热点 使电脑连接上 3 再次打开程序进行输入账号与密码的操作 4 此时尝试登录可有效避免白屏卡顿现象 亲测有效 PS 本人WiFi为中国电信 手机卡

随机推荐

  • 怎样使用Cubase进行人声消除

    所谓分离伴奏 指的就是消除人声 通常在一首歌曲的音频文件中 混音师一般都会将人声放在声像位置的正中间再输出为一个立体声音频文件 一般情况下是这样 但不代表全是这样 因此 人声的波形在该立体声音频文件的左声道和右声道中应该是相同或相似的 所以
  • 不好意思, Maven 该换了!

    相信使用Java的同学都用过Maven 这是一个非常经典好用的项目构建工具 但是如果你经常使用Maven 可能会发现Maven有一些地方用的让人不太舒服 一来Maven的配置文件是XML格式的 假如你的项目依赖的包比较多 那么XML文件就会
  • SLAM代码(三维重建)

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net wendox article details 52719252 三维重建的一般步骤 特
  • 爬虫隐藏自身的ip并伪装成浏览器

    爬虫隐藏自身的ip并伪装成浏览器 使用代理访问 就是说使用代理 代理 访问url之后 再将网页的内容在传给本机的 使用代理访问 import urllib request import random url http www whatism
  • 堆排序【C语言】

    堆排序 基本思想 利用堆 小顶堆 进行排序的过程 首先把待排序序列 R1 R2 Rn 转换成一个堆 这时 根结点具有最小值 输出根结点 可以将其与堆数组中的末尾元素交换 此时末尾元素就是最小值 然后将剩下的n 1个结点重新调整为一个堆 反复
  • vue-element el-table 使用sortablejs拖拽排序

    需求描述 vue element admin开发过程中需要对el table行进行排序 即每一行可以上下移动 然后将排序后的数据传给后台更新数据 该表格无分页 问题分析 方法一 可以采用在每条数据中加两个上下移动的按钮 每次移动一行 该方法
  • 自制脚本语言(12) 作用域与符号表

    摘要 介绍了自制语言的编译器对符号表的处理 YF语言中 符号表的基本结构是hash表 每个AST 附带了3个hash表 变量表 类型表 函数表 例如
  • python Django项目点击run或debug时出现Type ‘manage.py help <subcommand>‘ for help on a specific subcommand.

    报错 D python3 7 python exe E code dailyfresh test1 test2 manage py Type manage py help
  • python requests cookies怎么转为_如何将requests.RequestsCookieJar转换为字符串

    新答案 好吧 所以我还是不知道你到底想达到什么目的 如果您想从requests RequestCookieJar对象中提取原始url 这样您就可以检查是否与给定的子域匹配 这是 据我所知 不可能的 不过 你也可以做些类似的事情 usr bi
  • Linux-线程的同步与互斥

    线程的同步与互斥 进程 线程间的互斥相关背景概念 互斥量 互斥量接口 互斥量的初始化 互斥量的销毁 加锁和解锁 改善抢票系统 互斥量原理 可重入与线程安全 重入和线程安全的概念 常见线程不安全情况 常见线程安全的情况 常见不可重入情况 常见
  • 【软件工程】-可行性研究报告

    GB8567 88 可行性研究报告 1引言 1 1编写目的 为了提高机房收费管理的灵活性和效率 减轻机房工作人员的工作负担 节约时间 对机房收费业务做到快速准确管理的目的 从而降低人力 经济的更各方面的消耗 本次编写主要是为了分析廊坊师范学
  • 电机速度曲线规划1:梯形速度曲线设计与实现

    电机驱动是很常见的应用 在很多系统中我们都会碰到需要改变电机的速度以实现相应的控制功能 这就涉及到电机速度曲线规划的问题 在这篇中我们就来简单讨论一下电机的梯形曲线规划的问题 1 基本原理 梯形速度曲线控制算法是工业控制领域应用最为广泛的加
  • 在vc下环境变量的设置

    Error spawning cl exe 编译出错 有人说是没有设置 include环境变量 下面介绍在vc下如何设置环境变量 1 Microsoft Visual Studio下面3个子文件夹 Common VC98 My Projec
  • 1.嵌入式控制器EC学习,编译环境搭建

    工欲善其事 必先利其器 在学习EC相关知识之前 首先需要完成EC代码编译环境的搭建 需要如下内容 Keil C51 用于EC中C代码的编译器环境 EC源代码 我们使用从网上可以下载到的 ITE V12 4 Update 版的代码为例进行学习
  • JavaBean,List,Map转成json格式

    普通JavaBean 以User为例 转成json格式 1 转成JSONArray类型 User user new User user setUsername cxl user setPassword 1234 JSONArray json
  • GORM 基础 -- Gen

    https gorm io gen github 1 GEN Guides GEN 友好和更安全的代码生成 1 1 概述 来自动态原始SQL的惯用和可重用API 100 类型安全的DAO API 不使用 interface Database
  • printf(“%d,%d\n“,i--,i++)

    sample cpp include
  • Windows 下创建定时任务执行Python脚本

    文章目录 一 环境 二 脚本 三 创建定时任务 1 打开 任务计划程序 2 打开 创建任务 窗口 3 创建任务一一常规 4 创建任务一一触发器 5 创建任务一一操作 6 创建任务一一条件 7 创建任务一一设置 8 完成任务创建 四 验证定时
  • 记录自己在结构光三维重建领域的学习过程(一)

    仿真数据集与真是数据集之间差异较大 二者的网络均不可完美预测另一种数据 寻找解决办法 首先确定是不是数据的问题 阅读论文 Light field structured light projection data generation wit
  • 关于存储过程中SQL语句IN条件传参注意说

    背景说明 在数据库操作中我们经常会用到查询语句 在一些情况下 需要使用到IN条件 正常的查询中IN需要注意的是最好in中的参数不能超过1000个 超过1000的时候oracle会抛出异常 这个如何处理先不提 这次要说的是 如果在存储过程中使