将值数组发送到 Oracle 过程以在 WHERE IN 子句中使用

2023-12-10

我在Oracle中有一个存储过程,如下所示:

CREATE PROCEDURE MY_TEST_PROC(
  CUR OUT SYS_REFCURSOR,
  PARAM_THAT_WILL_BE _USED_INSIDE_WHERE_IN
)
AS
BEGIN
  OPEN CUR FOR 
    SELECT * 
      FROM MY_TABLE 
     WHERE COL1 IN (here I want to put values received from C#)
END;

在 ASP.NET 应用程序端,我有一个带有多个选项的选择元素。我想在 WHERE 子句中使用这些列表项。我知道我可以在存储过程中有一个 VARCHAR2 输入参数,从列表项中创建一个逗号分隔的字符串,然后将其发送到过程。这样做有两个问题:

  1. 我让我的网站容易受到 SQL 注入攻击
  2. 在我的存储过程中,我必须使用我想避免的 EXECUTE ('SELECT ...') 模式。

如何将这些列表项发送到存储过程并在 WHERE IN 子句中使用它们?我正在使用 ODP.NET,听说过 UDT,但不知道如何使用它。


一种方法可能是使用VARRAY为了PARAM_THAT_WILL_BE _USED_INSIDE_WHERE_IN 参数并按照描述使用它here
但我不确定如何从 c# 调用它。

另一种方法是将 varchar2 与 csv 一起使用,如您在问题中所述,但没有动态 sql,如下所示:

CREATE PROCEDURE MY_TEST_PROC(
  CUR OUT SYS_REFCURSOR,
  PARAM_THAT_WILL_BE varchar2)
AS
BEGIN
  OPEN CUR FOR 
    SELECT * 
      FROM MY_TABLE 
     WHERE COL1 IN (
        select regexp_substr(PARAM_THAT_WILL_BE, '[^,]+',1,level) p
          from dual t
       connect by level <= regexp_count(PARAM_THAT_WILL_BE, ',') + 1
)
END;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将值数组发送到 Oracle 过程以在 WHERE IN 子句中使用 的相关文章

随机推荐

  • 环境变量中的 Watson Conversation_Error

    我正在尝试从 GitHub 复制 Watson对话简单节点 js 应用程序 https github com watson developer cloud conversation simple 并在我的本地运行 我已经创建了服务密钥和设置
  • 在 Python 脚本中获取当前的 git 哈希值

    我想在 Python 脚本的输出中包含当前的 git 哈希 作为版本号生成该输出的代码 如何在 Python 脚本中访问当前的 git 哈希值 无需绕过从git命令自己 GitPython是一个非常好的方法来做到这一点和许多其他git东西
  • 如何创建一个仅引导用户在 Google Play 上下载完整版本的存根应用程序?

    只是想创建一个存根应用程序 该应用程序启动后除了引导用户在 Google Play 上下载完整版本之外什么也不做 我假设存根 apk 显然需要相同的包名称 使用相同的证书签名 但版本代码较低 一直只指向 Google Play 产品页面 这
  • ReportNG不提供任何报告

    我听说 ReportNG 创建的报告比 TestNG 的正常报告更好 我尝试创建 ReportNG 报告 但失败了 我正在使用 Eclipse 我已经下载了 ReportNG 并将reportng 1 1 3 jar 和velocity d
  • 如何从 U-Boot 启动裸板二进制文件?

    我们如何从 U Boot 启动独立的裸板二进制文件 不是使用 U Boot 环境运行的独立二进制文件 而不是 Linux 内核 我的要求是使用我的二进制文件重新初始化主板和驱动程序 我可以用我的二进制文件替换启动介质 此处为 NOR 闪存
  • 单击时更改 MenuItem 可见性

    我正试图隐藏一个MenuItem并在选择第一个时使另一个可见 每个 ID 为 pencil R id button routines edit check mark R id button routines edit done 这里是相关代
  • 使用 null 参数调用 super.onCreate() ?

    In onCreate Bundle bdl 我们必须通过以下方式调用它的超级构造函数super onCreate bdl 对于新创建的活动 我们得到了一个 null BundleonCreate Bundle bdl 所以当我们打电话时s
  • 如何配置任务以在 VSC IDE(版本 2.0.0)中启动 .ps1 脚本?

    我想使用 Visual Studio Code IDE VSC 在 MQL 而不是本机 MetaEditor IDE 中进行开发 如下所述 如何在 Visual Studio 中编码和编译 MQL5 我的问题涉及编译过程 其中包含调用 Po
  • 如何阻止 UIScrollView 吞咽触摸

    I have UIScrollView有很多子视图 当我滚动时 我想点击要拖动的子视图 有没有一种可能的方法可以使UIScrollView停止吞咽接触 或者 当您取消滚动时是否可以开始新的触摸 就像它滚动并且我点击它一样 子视图也会被点击
  • 使用 ansible 创建 jenkins 工作

    我正在开发一个项目 使用 ansible 在 centos7 上部署 jenkins CI 服务器 我在使用 ansible 从 xml 模板创建 jenkins 作业时遇到问题 到目前为止 一切工作正常 但现在我希望能够创建作业 并使用
  • 如何禁用在肥皂中编码的身体数据,改造请求

    我有一个请求数据 其中一个元素采用 xml 作为值 使用以下方式将数据发送到服务器时 Body我的内部 xml 正在被编码 html 编码 因为该服务在服务器端失败 如何禁用内部xml 正在编码 sample
  • MPMovieplayerController 在后台时不播放下一个 URL

    我正在开发一个 iOS 应用程序 在其中使用 MPMoviePlayerController 流式传输 mp3 文件 当一个文件的播放完成时 我获取下一个 url 并播放该文件 所有内容在前台都运行良好 但是当我将应用程序移动到后台时 当前
  • 根据政策列表进行授权

    我正在开发不同的应用程序 每个应用程序都有自己的角色成员 在 Startup cs 中 var c configuration GetSection nameof Configuration Get
  • R:将标签从矩阵添加到图形

    我正在使用 R 编程语言 我生成了这个随机网络图和矩阵 library tidyverse library visNetwork library htmlwidgets set seed 123 mat lt matrix runif 19
  • 卸载后如何打开网站?

    软件安装后我可以打开一个网站 如下所示 Run Filename http example com Flags shellexec runasoriginaluser 有没有办法在软件卸载后打开另一个网站 要在卸载完成后打开不可执行的文件
  • CPAN 将模块安装到 perl5 而不是 site_perl

    我正在尝试将一些 cpan 模块临时安装到自定义文件夹 tmp perl 中 所以我修改了构建安装基础 o conf mbuildpl arg install base tmp perl o conf makepl arg INSTALL
  • 从 C# 代码将数据插入 SQL Server

    我有一张桌子student id name 然后我有一个文本框 用于输入名称 当单击提交按钮时 它将数据插入数据库 那么我怎样才能只插入名称 而不插入id 因为id是自动递增的呢 我试过这个 insert into student id n
  • Maven 和 Eclipse 使用的 Checkstyle 配置

    我尝试在 Maven 和 Eclipse 中使用相同的 Checkstyle 配置文件 模块 SuppressionCommentFilter 在 Eclipse 中按预期工作 但 Maven 报告 不允许 TreeWalker 作为 Su
  • 具有相同内容的两个字符串何时(不)共享相同的内存?

    来自问题两个内容相同的字符串会存储在同一个内存位置吗 拥有Java代码 String s1 Java 该字符串是否会分配在同一内存位置 或多个 是否多次启动同一个程序并并行 同时 执行它 可能的答案 我目前是 C 开发人员 尽管在上个世纪是
  • 将值数组发送到 Oracle 过程以在 WHERE IN 子句中使用

    我在Oracle中有一个存储过程 如下所示 CREATE PROCEDURE MY TEST PROC CUR OUT SYS REFCURSOR PARAM THAT WILL BE USED INSIDE WHERE IN AS BEG