当前位置: 首页 > 知识库问答 >
问题:

Oracle 使用临时表或其他一些方法

钱修雅
2023-03-14

在Oracle中,需要在存储过程中多次重用查询结果。想知道临时表是推荐的方式还是其他方式...

首先,我基于某些输入参数创建一个结果集。

然后做一些检查,看看是否有任何结果集行出现在表1中。简单的连接和计数就足够了。如果算

为了获得最佳性能,应该使用临时表还是其他表?

谢谢

共有1个答案

令狐灿
2023-03-14

根据上次更新,您似乎需要在多个表中进行质的不同插入,并在多个(不同的)测试中使用昂贵查询的结果。

测试和基准测试总是最好的(比较好的方面和坏的方面,以及临时表与其他方法的性能)。我将在这里包括一种替代样式,它只将结果拉入内存,在那里可以根据需要查询(或迭代、计数等)

下面是一个例子:

-示例数据:

CREATE TABLE TABLE_1 (LOREM_IPSUM NUMBER);
INSERT INTO TABLE_1 VALUES (6);
COMMIT;

--保存数据的自定义类型

CREATE OR REPLACE TYPE EXPENSIVE_QUERY_TYPE IS OBJECT(LOREM_IPSUM NUMBER);
/
CREATE OR REPLACE TYPE EXPENSIVE_QUERY_RESULT IS TABLE OF EXPENSIVE_QUERY_TYPE;
/

--示例块:

DECLARE
    V_EXPENSIVE_RESULT EXPENSIVE_QUERY_RESULT := EXPENSIVE_QUERY_RESULT();
    V_TABLE_1_TEST INTEGER;
BEGIN
    SELECT EXPENSIVE_QUERY_TYPE(LEVEL)
    BULK COLLECT INTO V_EXPENSIVE_RESULT
    FROM DUAL
    CONNECT BY LEVEL <= 5;

    SELECT COUNT(*) INTO V_TABLE_1_TEST
        FROM TABLE_1
            WHERE EXISTS(SELECT 1 FROM TABLE(V_EXPENSIVE_RESULT) WHERE LOREM_IPSUM = TABLE_1.LOREM_IPSUM);

    IF V_TABLE_1_TEST > 0
        THEN
        RETURN;
        ELSE
        INSERT INTO TABLE_1
            SELECT LOREM_IPSUM FROM TABLE(V_EXPENSIVE_RESULT)
            WHERE MOD(LOREM_IPSUM,2) = 0;
    END IF;

END;
/

当TABLE_1最初只有一条值为 6 的记录时,这将插入 2 和 4(因为没有共享数据)。

...PL/SQL procedure successfully completed.
SELECT * FROM TABLE_1;
   LOREM_IPSUM
______________
             2
             4
             6

但是如果它在expensive_query中包含任何内容(例如最初包含3和6),则不会插入任何内容:

...PL/SQL procedure successfully completed.
SELECT * FROM TABLE_1;
   LOREM_IPSUM
______________
             3
             6
 类似资料:
  • 本文向大家介绍MySQL中关于临时表的一些基本使用方法,包括了MySQL中关于临时表的一些基本使用方法的使用技巧和注意事项,需要的朋友参考一下 临时表可能是非常有用的,在某些情况下,保持临时数据。最重要的是应该知道的临时表是,他们将当前的客户端会话终止时被删除。 临时表中添加MySQL版本3.23。如果您使用的是旧版本的MySQL比3.23,可以不使用临时表,但可以使用堆表。 如前所述临时表将只持

  • 问题内容: 在Oracle中,您可以使用以下方式创建临时表: …这可能很漂亮,因为这会创建一个所有人都可以看到的表,但是一个INSERT插入表中的数据仅对他或她可见。此外,该数据将在事务或会话结束时自动删除(取决于其声明),从而使其他所有人的临时数据不受损害。 但是,在SQL Server中,可以使用以下方式创建临时表: …据我所知,它在功能和功能上与Oracle的实现有本质的不同。该临时表仅对您

  • 我有下面的DB对象和Java程序,当我尝试从Java调用Oracle的存储过程时,我无法得到临时表count.Am缺少一些东西,但我不知道wrong.Please帮助我找到错误code.When我调用的过程使用oracle语句直接在oracleSQL开发人员能够得到临时table.After每次调用插入过程它插入计数,并正确地在Oracle语句调用和Java.But当我尝试使用JDBC时,只有插入

  • 本文向大家介绍对比Oracle临时表和SQL Server临时表的不同点,包括了对比Oracle临时表和SQL Server临时表的不同点的使用技巧和注意事项,需要的朋友参考一下 Oracle数据库创建临时表的过程以及和SQL Server临时表的不同点的对比的相关知识是本文我们主要要介绍的内容,接下来就让我们一起来了解一下这部分内容吧,希望能够对您有所帮助。 1.简介 Oracle数据库除了可以

  • 本文向大家介绍oracle 临时表详解及实例,包括了oracle 临时表详解及实例的使用技巧和注意事项,需要的朋友参考一下 在Oracle8i或以上版本中,可以创建以下两种临时表: 1。会话特有的临时表 CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <column specification> ) ON COMMIT PRESERVE ROWS;  2。事务特有的临