在存储过程中使用临时表

时间:2013-09-30 05:58:46

标签: oracle stored-procedures plsql

我写了存储过程,我打电话需要很长时间。 我在'SP'中使用临时表。 这可能是理由??

CREATE OR REPLACE PROCEDURE TEST_SP
IS
BEGIN
INSERT INTO MYTEMP_table (A, B )
      (  SELECT  id AS CUSTOMER_NO,
              ACC_NO AS ACCOUNT_NO
           FROM  myTable );
UPDATE MYTEMP_table
      SET MYTEMP_table.A =
             (  SELECT MIN (BRH_DATE)
                  FROM CUSTOMER,)



   UPDATE MYTEMP_table
      SET MYTEMP_table.B =
             (  SELECT MIN (SUBSTR (ENTRY_DATE, 0, 8))
                  FROM INFO)
                .......

MYTEMP_table是临时表。

1 个答案:

答案 0 :(得分:2)

此代码段看起来很糟糕。使用一个查询填充临时表似乎很奇怪:

select id, acc_no from myTable

然后用一个值擦除所有列:

UPDATE MYTEMP_table
SET MYTEMP_table.A =
       (  SELECT MIN (BRH_DATE)
            FROM CUSTOMER,)

您的帖子不清楚,但希望您使用的是全局临时表(基于内存),而不是用于临时存储的物理表。

对同一行的多次写入是减慢工作速度的可靠方法(在物理表中更多 - 但在任何一种情况下仍然很慢)。如果可能,请考虑以下事项:

  1. 使用分析函数或更复杂的初始查询来预先完成所有写作...
  2. 如果您不熟悉/熟悉运行/阅读解释计划,请尝试手动运行SQL编辑器中的每个SQL语句以评估其个人表现......