表变量可以用在 select 语句的 where 子句中吗?

2023-12-24

我有一个正在执行两步查询的存储过程。第一步是从表中收集 VARCHAR2 类型字符的列表,并将它们收集到表变量中,定义如下:

TYPE t_cids IS TABLE OF VARCHAR2(50) INDEX BY PLS_INTEGER;
v_cids t_cids;

所以基本上我有:

SELECT item BULK COLLECT INTO v_cids FROM table_one;

这在接下来的一段时间之前都可以正常工作。

现在我想在同一过程中另一个查询的 where 子句中使用该集合,如下所示:

SELECT * FROM table_two WHERE cid IN v_cids;

有没有办法做到这一点?我可以选择单个元素,但我想像使用常规表一样使用表变量。我尝试过使用嵌套选择的变体,但这似乎也不起作用。

多谢,

Zach


对于如何实现这一目标,您有多种选择。

如果您想使用集合,则可以使用 TABLE 函数从中进行选择,但您使用的集合类型变得很重要。

举个简单的例子,这将创建一个数字表的数据库类型:

CREATE TYPE number_tab AS TABLE OF NUMBER
/

类型已创建。

然后,下一个块填充集合并使用它作为表来执行基本选择,并将其连接到EMP表(有一些输出,以便您可以看到发生了什么):

DECLARE
   -- Create a variable and initialise it
   v_num_tab number_tab := number_tab();
   --
   -- This is a collection for showing the output
   TYPE v_emp_tabtype IS TABLE OF emp%ROWTYPE
        INDEX BY PLS_INTEGER;
   v_emp_tab v_emp_tabtype;
BEGIN
   -- Populate the number_tab collection
   v_num_tab.extend(2);
   v_num_tab(1) := 7788;
   v_num_tab(2) := 7902;
   --
   -- Show output to prove it is populated
   FOR i IN 1 .. v_num_tab.COUNT
   LOOP
      dbms_output.put_line(v_num_tab(i));
   END LOOP;
   --
   -- Perform a select using the collection as a table
   SELECT e.*
     BULK COLLECT INTO v_emp_tab
     FROM emp e
    INNER JOIN TABLE(v_num_tab) nt
       ON (e.empno = nt.column_value);
   --
   -- Display the select output
   FOR i IN 1 .. v_emp_tab.COUNT
   LOOP
      dbms_output.put_line(v_emp_tab(i).empno||' is a '||v_emp_tab(i).job);
   END LOOP;
END;

您可以从中看到数据库 TYPE 集合 (number_tab) 被视为表并且可以这样使用。

另一种选择是简单地加入您在示例中选择的两个表:

SELECT tt.*
  FROM table_two tt
 INNER JOIN table_one to
    ON (to.item = tt.cid);

还有其他方法可以做到这一点,但第一种可能最适合您的需求。

希望这可以帮助。

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

表变量可以用在 select 语句的 where 子句中吗? 的相关文章

  • Oracle使用with子句创建表

    我可以从使用形成的查询创建表吗with clause Sure CREATE TABLE t AS WITH some data AS SELECT 1 as some value FROM dual UNION ALL SELECT 2
  • 如何为 Weblogic 10.3.6 启用 Java 持久性 2.0

    我正在使用 eclipse 和 weblogic 服务器 为了将项目添加到 weblogic 服务器 它需要支持 Java Persistance 2 0 但是当尝试安装它时 我不断收到此消息 在 Weblogic Server 安装中启用
  • Oracle group by 中的字符串聚合

    我已经形成了一个大型查询 它使用以下数据条件获取大型数据集 Column1 Column2 M1 OTH M1 HHM M1 RES M2 HHM M2 RES M3 OTH M3 RES 我需要将其形成为 M1 OTH HHM RES M
  • 反转 ArrayList 最简单的方法是什么?

    反转这个ArrayList的最简单方法是什么 ArrayList
  • SQL*Loader - 如何忽略具有特定字符的某些行

    如果我有一个以下格式的 CSV 文件 fd sdf dsfds dsfd fd asdf dsfds dsfd fd sdf rdsfds dsfd fdd sdf dsfds fdsfd fd sdf dsfds dsfd fd sdf
  • Oracle - 仅当不存在时才创建索引

    有没有什么方法可以在oracle中创建索引 只有当它们不存在时 就像是 CREATE INDEX IF NOT EXISTS ord customer ix ON orders customer id 仅当索引不存在时添加索引 declar
  • oracle日期序列?

    我有一个 oracle 数据库 我需要一个包含 2 年所有日期的表 例如来自01 01 2011 to 01 01 2013 首先我想到了一个序列 但显然唯一支持的类型是数字 所以现在我正在寻找一种有效的方法来做到这一点 欢呼骗局 如果您想
  • 如何从 Oracle 中的 select 语句调用带有 Rowtype 参数的函数

    我有一个 oracle 函数 它有一个 in 参数 它是表的行类型 我需要从 select 语句将当前行传递给这个函数 以便它进行一些处理并返回一个值 是否有一个伪变量可以在 select 语句的上下文中使用 相当于触发器中的旧的和新的 我
  • 从 Oracle Varchar2 中查找并删除非 ASCII 字符

    我们目前正在将一个 Oracle 数据库迁移到 UTF8 并且发现一些记录接近 4000 字节 varchar 限制 当我们尝试迁移这些记录时 它们会失败 因为它们包含的字符变成了多字节 UF8 字符 我想要在 PL SQL 中做的是找到这
  • 如何比较表中最后一个和倒数第二个条目的值?

    我在 Oracle 中有一个名为quotes 的表 其中包含两列 date 和value 我想比较表中最后一个条目和倒数第二个条目的值 在此示例中 我想获取日期13 1 和 11 1在一行中以及每个日期的值之间的差异 10 5 5 报价表
  • 避免集合已修改错误

    Issue 我有以下代码 foreach var ItemA in GenericListInstanceB ItemA MethodThatCouldRemoveAnyItemInGenericListInstanceB 显然我得到一个错
  • 如何使用 Hibernate Session.doWork(...) 进行保存点/嵌套事务?

    我正在使用 JavaEE JPA 托管事务与 Oracle DB 和 Hibernate 并且需要实现某种嵌套事务 据我所知 此类事情不受开箱即用的支持 但我应该能够为此目的使用保存点 正如建议的https stackoverflow co
  • 如何在可能为空值的字段上创建唯一索引(Oracle 11g)?

    这是包含 3 列的示例表 ID UNIQUE VALUE UNIQUE GROUP ID 我希望可以允许以下记录 1 NULL NULL 2 NULL NULL or 3 NULL 7 4 123 7 or 注意 此条件不允许unique
  • 在流星收集加载时显示加载程序

    我有一个模板 task list 看起来像这样 each tasks gt task each Template task list tasks返回一个集合 在用户界面中 加载似乎需要一些时间 当集合正在加载时 我想显示一个加载指示器 关于
  • 以相反的顺序打印任何集合中的项目?

    我在 使用 Java 进行数据结构和问题解决 一书中遇到以下问题 编写一个例程 使用 Collections API 以相反的顺序打印任何 Collection 中的项目 不要使用 ListIterator 我不会把它放在这里 因为我想让有
  • 如何在 Oracle 上生成版本 4(随机)UUID?

    该博客解释说 输出sys guid 对于每个系统来说不是随机的 http feuerthoughts blogspot de 2006 02 watch out for sequential oracle guids html http f
  • Oracle - 获取星期几

    今天是星期二 为什么当我运行这个 SQL 语句时 它说今天不是星期二 SELECT CASE WHEN TO CHAR sysdate Day Tuesday THEN Its Tuesday ELSE Its Not Tuesday EN
  • 验证 sql/oracle 中的电子邮件/邮政编码字段

    对于以下方面的一些建议将不胜感激 是否可以通过 oracle 中的 sql 中的某种检查约束来验证电子邮件和邮政编码字段 或者我怀疑 pl sql 带有正则表达式的这种事情 Thanks 这是电子邮件地址的正则表达式语法 包括引号 a zA
  • Oracle 删除约束级联等效于 Sql Server

    在Oracle中 删除约束PK SAI我使用语法 ALTER TABLE SAISIE DROP CONSTRAINT PK SAI CASCADE SQL Server 中与此等效的是什么 您正在考虑与实际 DELETE 语句相关的 FO
  • Oracle 按月滚动或运行总计

    目标 每个月末所有报表的滚动 运行总计 Code select TRUNC ACTHX STMT HX STMT DATE MM AS MNTH COUNT ACTHX INVOICE as STMTS from ACTHX group b

随机推荐

  • 如何在Windows Azure云服务器上转发端口

    您好 我刚刚尝试了 Windows Azure 云服务器 下载并运行 apache 它可以在本地主机上运行 但无法从互联网访问 我应该端口转发做一些特别的事情才能使 cloudapp net 像 Web 服务器一样工作 我缺少什么 你究竟尝
  • 使用 Javascript 从 Google Analytics API 获取综合浏览量

    我在使用 JavaScript 从 Google Analytics API 获取数据时遇到问题 我似乎无法获取任何东西 但可以说它是一些基本的东西 比如页面浏览量 我在用分析 js https developers google com
  • 从轨道中的整数或小数中去除逗号

    整数或小数是否有等效的 gsub gsub 应该使用整数吗 基本上我只是想将十进制输入到 ruby 形式以及用户能够使用逗号的内容 例如 我希望用户能够输入 1 000 99 我尝试过使用 before save strip commas
  • SQL WHERE 条件不等于?

    是否可以否定 where 子句 e g DELETE FROM table WHERE id 2 你可以这样做 DELETE FROM table WHERE id NOT IN 2 OR DELETE FROM table WHERE i
  • 调整 Eigen::Ref 大小的解决方法

    我想使用 Eigen Ref 来使用 Eigen Matrix 参数来实现非模板函数 我的问题是 在这些函数中 我可能必须调整 Eigen Ref 引用的矩阵的大小 我知道 一般而言 不应调整 Eigen Ref 的大小 因为它可以映射到表
  • 如何水平对齐多个图像(连续)?

    如何水平对齐多个图像 它们不必适合宽度屏幕 相反 我想让它们超过后者的宽度 如果这有意义的话 我检查了类似问题的很多答案 但找不到任何可以解决我的问题的答案 Html div img src Content Images Personal
  • Crystal Report:“文件对于附件来说太大”错误

    我是水晶报表服务器的新手 我在这里解释错误的详细信息 我正在使用 SAP Business Objects CMC 为我的应用程序生成报告 下面是图像中的版本详细信息 当我尝试生成文件大小超过 1MB 的报告文件时 它会抛出以下错误 Err
  • 如何在 Facebook Marketing API 上检查营销活动的交付状态

    我正在用 Python 做一个关于这个的小应用程序 我使用的是 effective status 字段 但它仅显示它是否已暂停 我想检查活动是否正在运行 Thanks effective status 为您提供此活动的有效状态 对于 Cam
  • 在Python中创建一个螺旋数组?

    我和我的伙伴试图用 python 创建一个有趣的游戏 其中输入数组的元素以螺旋方式访问 我尝试了几种方法 如下所示 source https stackoverflow com a 398302 5717589 def spiral X Y
  • 通过 eclipse 插件访问项目构建路径

    我需要以编程方式检查项目的构建路径是否已包含指定的库 这是一个快速修复建议 以了解这是否已经 修复 并且不会成为问题 我可以访问当前的IInvocationContext 因此 在某些拐角处 到相应的IProject object 如何检查
  • 使用 Docker 的 artifacts-credprovider 和 VSS_NUGET_EXTERNAL_FEED_ENDPOINTS

    也许您可以帮助我使用私人 NuGet feed 进行身份验证 我已经花了一天时间研究不同的解决方案并注意到这个仓库 https github com microsoft artifacts credprovider 但我仍在努力完成它 我使
  • Perl 挑战 - 目录迭代器

    有时您会听到关于 Perl 的说法 可能有 6 种不同的方法来解决同一问题 优秀的 Perl 开发人员通常具有合理的见解 可以在各种可能的实现方法之间做出选择 举一个 Perl 问题的例子 一个简单的脚本 它递归地迭代目录结构 查找最近修改
  • 自定义验证器在 FormView 中工作吗?

    我通过谷歌搜索发现很多人都在为这个问题苦苦挣扎 但我仍然没有找到正确的答案 https i stack imgur com 15jen png https i stack imgur com 15jen png 我有一个表单视图 需要检查语
  • Django ORM 中 ImageField 的默认图像

    我正在使用一个ImageField将个人资料图片存储在我的模型上 如果没有定义图像 如何设置它返回默认图像 我还没有尝试过这个 但我相对确定您可以将其设置为您所在领域的默认值 pic models ImageField upload to
  • 是否有适用于 Delphi-XE 的 LockBox 版本

    在哪里可以找到适用于 Delphi XE 的 LockBox 版本 有 Delphi 2010 版本可用Songbeamer com http www songbeamer com delphi 根据我将 Abbrvia 移植到 Delph
  • 如何生成给定集合的幂集?

    我正在为面试而学习 我在网上的 数学 类别下偶然发现了这个问题 生成给定集合的幂集 int A 1 2 3 4 5 int N 5 int Total 1 lt lt N for int i 0 i lt Total i for int j
  • DataGridView 在最后一行之后显示一些额外的空间

    我有一个Panel我在其上放置了一个控件DataGridView控件 显示来自 SQL Server 的数据 它工作得很好 除了当我将滚动条移动到底部时出现不必要的空间 我缩短了高度 但空间仍然存在 My DataGridView以编程方式
  • (sql) 当数据类型为文本时如何使用 count() 方法?

    select count category from list where category like action 上面是我想要运行的查询 但是 当我运行该查询时 我得到 数据类型错误 有没有其他方法count 或者 我该如何使用coun
  • 寻找将变量插入对象(如果不为空)的简写

    我经常有几个命名变量 如果它们不为空或未定义 我想将它们放入一个对象中 JavaScript 有几个很好的构建对象的快捷方式 所以我想一定有一个适合这个用例的快捷方式 我通常会做这样的事情 但它是如此冗长 function foo a b
  • 表变量可以用在 select 语句的 where 子句中吗?

    我有一个正在执行两步查询的存储过程 第一步是从表中收集 VARCHAR2 类型字符的列表 并将它们收集到表变量中 定义如下 TYPE t cids IS TABLE OF VARCHAR2 50 INDEX BY PLS INTEGER v