将字符串数组传递给过程并在 WHERE 子句中使用 IN

2024-03-29

我想将字符串列表传递给过程并在 select 语句的 WHERE 子句中使用它,但我不知道如何执行此操作。

我声明了以下嵌套表:

TYPE t_strarray IS TABLE OF VARCHAR2(30);

该过程如下所示:

PROCEDURE getstuff(p_list IN t_strarray, io_cursor OUT t_cursor)
   IS    
   BEGIN
        OPEN io_cursor FOR
            SELECT * FROM mytable 
            WHERE mytable.field1 in (select * from table(p_list)); 
   END;

如何才能做到这一点?


您的数组需要是直接在 SQL 中创建的 SQL 对象类型,而不是在包中声明的 PLSQL 类型:

SQL> CREATE OR REPLACE TYPE t_strarray IS TABLE OF VARCHAR2(30);
  2  /
Type created.

SQL> CREATE TABLE mytable (field1 VARCHAR2(30));
Table created.

SQL> INSERT INTO mytable VALUES ('A');
1 row created.

SQL> INSERT INTO mytable VALUES ('D');
1 row created.

SQL> CREATE OR REPLACE PROCEDURE getstuff(p_list IN t_strarray,
  2                                       io_cursor OUT SYS_REFCURSOR) IS
  3  BEGIN
  4     OPEN io_cursor FOR
  5        SELECT *
  6          FROM mytable
  7         WHERE mytable.field1 IN (SELECT COLUMN_VALUE FROM TABLE(p_list));
  8  END;
  9  /
Procedure created.

SQL> VARIABLE cc REFCURSOR;
SQL> EXEC getstuff (t_strarray('A', 'B', 'C'), :cc);    
PL/SQL procedure successfully completed.

SQL> print cc

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

将字符串数组传递给过程并在 WHERE 子句中使用 IN 的相关文章

  • 从集合类型 Oracle 12c 插入表 - ORA-00902: 无效数据类型

    我正在使用 Oracle 12 1 我以为我可以查询 12c 中的表类型 当我尝试执行此包时 我收到错误 ORA 00902 无效数据类型 我什至尝试使用强制转换多重集 但仍然出现同样的错误 我知道我们可以在数据库级别创建对象然后查询 但我
  • SQLPLUS 保存到文件

    我必须为我的数据库类使用 SQLPLUS 我们的第一个作业是简单的保存 我按照说明进行操作 我正在使用 PuTTY 访问 sqlplus 在本练习中使用以下 SQL 命令 并尝试使用 SAVE 和 SPOOL 命令将 SQL 命令和输出保存
  • 正则表达式中 (*) 和 .* 有什么区别? [复制]

    这个问题在这里已经有答案了 是任意字符零次或多次 我试图找到以元音开头的单词 我用了 aeiou 它给了我所有以元音开头的单词 当我这样做时给出相同的结果 aeiou 现在我正在寻找以元音结尾的单词 我做到了 aeiou 它没有给出任何结果
  • 使用sql将行转换为列,反之亦然 - oracle

    我有这张表 create table history date check DATE type VARCHAR2 30 id type NUMBER total NUMBER 正在选择 select from history order b
  • Oracle PL/SQL 块的语法图是否错误?

    我怀疑 a 的语法图plsql block如中给出的Oracle 数据库 PL SQL 语言参考对于 Release 2 来说是错误的 以供参考 这是当前的链接 http download oracle com docs cd E11882
  • Oracle 中的 TO_Char 数字格式模型

    我不完全理解如何使用 to char 函数将数字转换为具有适当格式模型的字符串 实际数字具有以下格式 使用逗号作为小数点分隔符 始终为 5 个小数 整数最多可达 6 可能是无限的 但目前绝不会超过 6 数字可以是正数或负数 数字可以以 0
  • 了解 Mac 上的 Oracle Java

    我在 OS X 上使用 Java 很多很多年了 最近当 Apple 停止默认包含 Java 时 我放弃了操作系统并为我安装了它 当然是 Apple 的版本 现在我使用的是 OS X 10 8 并且需要安装 Java 7 因此我刚刚获得了 D
  • SQL 工作表未显示在 SQL Developer 中

    Suddenly SQL worksheet is not displaying in my SQL Developer When I click on Open SQL Worksheet or Alt F10 nothing will
  • 如何使用 Hibernate 3.3.2GA 将 TIMESTAMP WITH TIME ZONE 映射到 Java 数据类型?

    如何映射 Oracle 列类型TIMESTAMP WITH TIME ZONE http download oracle com docs cd B19306 01 server 102 b14225 ch4datetime htm i10
  • 获取 Oracle JDBC 连接上的 MySQL 错误堆栈跟踪

    我在使用连接字符串进行 Oracle JDBC 连接时遇到非常奇怪的错误 我将用户名指定为 sys 应该是 sys as sysdba 理想情况下 它应该来自 ojdbc6 jar 但就我而言 它来自 mysql connector jav
  • 创建每 5 分钟刷新一次的物化视图

    我创建了一个每 5 分钟刷新一次的物化视图 但是当我在物化视图上插入并执行选择时 我会得到相同的旧数据吗 需要手动刷新吗 CREATE MATERIALIZED VIEW MVW TEST REFRESH FORCE ON DEMAND S
  • PL/SQL 触发器问题

    我正在尝试编写一个触发器来填充包含员工更新工资信息的表 我现在遇到一个无法解决的问题 这是要填充的表 drop table SalUpdates cascade constraints create table SalUpdates Sal
  • 无效号码错误!似乎无法绕过它

    Oracle 10g 数据库 我有一张桌子叫s contact 这个表有一个字段叫做person uid This person uid字段是 varchar2 但包含某些行的有效数字和其他行的无效数字 例如 一行可能有一个person u
  • 将行连接成 CLOB

    关于这个主题有很多类似的问题 但我找不到任何解决方案来考虑最终结果对于 varchar2 来说太大的任何问题 所以我想做的就是改变这一点 Column1 Column2 1 Hello 1 world 1 please help 2 Tha
  • 具有多个数据源的 Tomcat 6/7 JNDI

    当有多个时
  • 哪一个代表null? undef 或空字符串

    我想插入null在表的一列中 哪一个代表null undef或空字符串 应该使用哪一种 为什么 我知道关于defined我可以检查一下 但我更多的是从数据库的角度来看 代表哪一个null更合适吗 Update 我在用DBI module D
  • 通过一个表中的列更新另一表中的列

    我有两张桌子 A 和 B 两者都有一个共同的列 name 并通过列 id 相互链接 表A中的 name 列是空的 而表B中有数据 我的任务是用相应的id填充从表B到表A的该列中的所有数据 我正在使用以下查询 UPDATE A SET A n
  • oracle中是否有相当于concat_ws的东西?

    我有大量的列试图聚合在一起 其中大多数都有 NULL 值 我想分隔确实以 出现的值但我在oracle中找不到有效的方法来做到这一点 CONCAT WS 正是我所需要的 因为它不会在 NULL 值之间添加分隔符 但 Oracle 不支持这一点
  • 在 Oracle 临时表上放置索引安全吗?

    我读过 不应分析临时表 因为它会破坏其他表的统计信息 指数怎么样 如果我在程序运行期间在表上放置索引 使用该表的其他程序会受到该索引的影响吗 索引是否会影响我的进程以及使用该表的所有其他进程 或者它会单独影响我的过程吗 所有的回复都不是权威
  • oracle 数据透视表中的列

    示例选择 select from select 1 cnt 2 sm 55 name 12 month 2011 year 12 2011 mnth txt from dual union all select 1 cnt 2 sm 54

随机推荐

  • SQL Server 排序规则

    我正在读的书上说 SQL Server 支持两种字符数据类型 常规和 Unicode 常规数据类型包括 CHAR 和 VARCHAR Unicode 数据类型包括 NCHAR 和 NVARCHAR 不同之处在于 常规字符每个字符使用一个字节
  • Sinatra 是多线程的吗?

    Sinatra 是多线程的吗 我在其他地方读到 sinatra 默认情况下是多线程的 这意味着什么 考虑这个例子 get multithread do t1 Thread new puts sleeping for 10 sec sleep
  • 与没有 Ajax 或 jQuery on Rails 的情况类似/不同

    我正在尝试实现一个简单的类似 不同函数 我在这里看到的所有示例似乎都适用于 ajax 或 jquery 我还是一个初学者 我也不完全理解 我只想要一个简单的解决方案 我的想法是 我有书 我有用户 用户可以喜欢书籍 所以我通过 Like 模型
  • Rstudio 和闪亮服务器代理设置

    我已经在我的 ubuntu14 上安装了 RStudio Server v0 98 507 和 Shiny Server v1 1 0 10000 我的 rstudio 代理设置已打开nginx 默认值 location rstudio r
  • Excel UDF 加权 RANDBETWEEN()

    好吧 不是真的RANDBETWEEN 我正在尝试创建一个 UDF 来返回数组中数字的索引 其中数字越大 被选择的可能性就越大 我知道如何将概率分配给工作表中的随机数 即使用MATCH 关于概率的总和 有很多东西可以解释这一点 但我想要一个
  • 如何在 php 上执行 SoapClient

    我是soapclient的新手 我尝试在网上做一些研究 也尝试在soap上编码 但似乎这对我来说仍然不起作用 只是徘徊在这里的任何人都可以指出 也许给我一些例子 我如何实际使用的soapclint从以下Web服务器获取反馈 POST web
  • 如何列出指向 git 中特定提交的所有标签

    我已经看到命令了git describe and git name rev但我还没有设法让他们列出多个标签 示例 我有 sha1 48eb354 并且我知道标签 A 和 B 指向它 所以我想要一个 git 命令git something 4
  • 使用 Facebook Graph API 获取纽约市的餐厅列表

    我想使用 Facebook Graph API 获取位于纽约的所有餐厅页面的列表 我已经下载了 PHP SDK 但现在我遇到了这个问题 我只需要餐厅页面的 ID
  • 将自定义对象从客户端 (Jquery) 发送到服务器 (WCF)

    如何将自定义对象从客户端 jquery 发送到服务器 WCF 服务 传递对象的方式是什么 下面是我的代码 当我在萤火虫中看到时 这就是我得到的 请查看屏幕截图 http img88 imageshack us img88 205 54211
  • 自定义图标标记有时无法在 React-Native 中的 MapBox-GL 中工作

    我正在尝试编辑地图标记 如下图所示 这是我创建标记的代码 const MapBoxComponent gt const markers useState title hello coordinates 108 24065199465605
  • 从 C++ 库调用方法时 WPF 中出现 StackOverFlowException

    我在 WPF 中使用 C 库 它是磁条读取器 写入器的 SDK 当我在 WPF 中调用它的方法之一时 10 秒后我收到 StackOverFlowException 从按钮单击事件调用的方法 DllImport MSR API dll st
  • unique.default(x) unique() 中的 R 错误仅适用于向量

    我创建了一个名为state从内置矩阵state x77有两个连续变量 人口和收入 和两个因子变量 地区和面积 我使用以下方法计算了按地区划分的平均收入tapply by aggregate and ave 查看返回对象的格式 但是调用ave
  • 像在facet_grid中一样在facet_wrap中设置“空间”

    我需要不同宽度的刻面 左图显示了实验的动态范围 右图显示了测试条件 有没有办法通过facet wrap同时获得免费的x和y尺度 在facet grid中这是可能的 但即使使用scale free 也有固定的y比例 facet wrap 允许
  • iPhone:配置文件每 2 个月过期一次?

    是我一个人的问题还是在开发人员门户上创建的配置文件每 2 个月过期一次 为什么这么疯狂 有没有办法创建一个在整个年度订阅期间持续的配置文件 我已经联系过Apple 但他们根本没有回复 苹果疯了吗 是的 配置配置文件的生命周期现在更短了 我不
  • 更改资源(如图标)不会重新编译 .qrc 文件

    我正在使用带有 QT Visual Studio 集成的 Visual Studio 2005 IDE QT版本是4 7 3 我有一个项目 其中在 QT 资源集合文件 qrc 中定义了一些资源 问题是每当我更改 qrc 引用的某些文件的内容
  • 首先合并实体时,为什么我会收到传递给合并的已删除实例

    我相信我想要删除的实体是托管实体 但是 无论如何 为什么合并它然后删除它会给我以下错误 已删除的实例传递给合并 有人在 stackoverflow 上说 如果它是托管实体 则应忽略合并 那么为什么这一点没有被忽视呢 我希望删除它的方式是这样
  • 在 django 1.2.1 中我怎样才能得到类似旧的 .as_sql 的东西? [复制]

    这个问题在这里已经有答案了 在过去版本的 django 中 您可以构造一个查询集 然后对其执行 as sql 以找出最终查询 在 Django 1 2 1 中 有一个函数 as sql 返回类似的内容 但不一样 在过去的版本中 qs Mod
  • java:与批处理服务器通信的最佳技术是什么?

    我有一个 WEB 应用程序 带有纯 Java servlet 它具有一些繁重的计算工作 具有数据库访问功能 可以在异步模式下完成 我计划使用专用服务器来执行此类批处理作业 并且我想知道使用哪些工具 技术 协议用于 WEB 服务器中的 ser
  • Android SearchView - 将图标移动到右侧(没有 ActionBar)

    我有一个像这样的 android SearchView
  • 将字符串数组传递给过程并在 WHERE 子句中使用 IN

    我想将字符串列表传递给过程并在 select 语句的 WHERE 子句中使用它 但我不知道如何执行此操作 我声明了以下嵌套表 TYPE t strarray IS TABLE OF VARCHAR2 30 该过程如下所示 PROCEDURE