当前位置: 首页 > 面试题库 >

在Oracle的过程中重用选择查询

幸鸿轩
2023-03-14
问题内容

我将如何存储select语句的结果,以便可以将结果与in子句重用于其他查询?这是一些伪代码:

declare
  ids <type?>;
begin
  ids := select id from table_with_ids;
  select * from table1 where id in (ids);
  html" target="_blank">select * from table2 where id in (ids);
end;

…或者如果我只是将子查询放在两个select语句中,优化器是否会为我执行此操作?

编辑:这是有关我的表结构的更多信息。

基本上,table1是一个标准表,其id是主键。而table2具有3列主键,其中id是这些列之一。在我的情况下,table2中的ID将显示在三行中。


问题答案:

您可以使用SQL表对象存储选择结果并重新使用它。这将消耗更多的内存,并且只有在第一个SELECT花费大量时间时才可能有效。

CREATE TYPE tab_number IS TABLE OF NUMBER;
/

您可以将其与BULK COLLECT INTO子句一起使用:

DECLARE
   ids tab_number;
BEGIN
   SELECT id BULK COLLECT INTO ids FROM table_with_ids;
   SELECT * /*into ??*/ 
     FROM table1 
    WHERE id IN (SELECT column_value FROM TABLE(ids));
   SELECT * /*into ??*/ 
     FROM table2
    WHERE id IN (SELECT column_value FROM TABLE(ids));
END;

在版本9i中,在需要使用CAST查询表之前,请执行以下操作:

SELECT * 
  FROM table2 
 WHERE id IN (SELECT column_value FROM CAST (TABLE(ids) AS tab_number));

或者,您可以使用GLOBAL TEMPORARY
TABLE
来存储中间结果集。



 类似资料:
  • 问题内容: 我正在处理一个查询(一个SELECT),我需要将此查询的结果插入表中。在进行插入之前,我需要做一些检查,如果所有列都有效,我将进行插入。 该检查是在存储过程中完成的。在其他地方也使用相同的过程。因此,我正在考虑使用相同的过程进行检查。 程序进行检查并插入值都可以。 我试图在SELECT内调用该过程,但是它不起作用。 这种代码不起作用。 我认为可以使用游标完成此操作,但我想避免使用游标。

  • 问题内容: 我有一个Oracle表,其中包含一组范围(RangeA和RangeB)。这些列是varchar,因为它们可以同时容纳数字和字母数字值,如以下示例所示: 我需要执行一个查询,该查询仅返回具有数值的记录,并对该查询执行Count。到目前为止,我已经尝试过使用两个不同的查询来做到这一点,但没有任何运气: 查询1: 查询2: 子查询工作正常,因为我得到的两个记录都只有数字值,但是查询的COUN

  • 我在Hibernate Select query下面有一个文件,我在这里获取具有给定名称的结果: 有什么想法吗?

  • 问题内容: 也许这听起来有点疯狂,但是我需要提出一个查询以仅从字母数字字段中检索字母。 例如: 表 1234ADD 3901AC 1812OPA 82711AUU 结果预期 ADD AC OPA AUU 谢谢! 问题答案: 看来您只想删除数字。您可以在10g或11g中使用:

  • 问题内容: 目前,我正在使用此: 它将我重定向到选项值内的位置。但这不能按预期工作。..这意味着如果我单击select的第一个选项,则onChange操作不会运行。我正在考虑使用javascript,但我想您会收到一些更好的建议。因此,如果我单击每个选项将其重定向到它的值,该如何使其起作用? 问题答案: 因为已经选择了第一个选项,所以永远不会触发change事件。添加一个空值作为第一个值,并检查位

  • 但是,我希望将所有输入传递给iReport查询中的SQL Server存储过程。在本例中,单值输入都可以正常工作--但我无法理解如何使用muti-select--似乎不起作用,否则--因为iReport multi-select参数必须定义为java.util.Collection--我得到“Query中不支持的参数类型”。 有人能指出我缺少什么吗,或者提出一个解决办法吗?