Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle ,并描述您在每个阶段想要做什么。_Oracle_Plsql_Performance - Fatal编程技术网

Oracle ,并描述您在每个阶段想要做什么。

Oracle ,并描述您在每个阶段想要做什么。,oracle,plsql,performance,Oracle,Plsql,Performance,您可以按照中的建议调查花费的时间和Oracle选择的执行计划 问候, Rob。下次,为了帮助人们分析你的问题,请使用段落和适当的标点符号。它可以帮助我们的眼睛更快地索引文本。然后选择你发布的整个代码块,然后点击编辑器中的{}按钮使其变得漂亮。tkprof为你的集合和函数提到了其他名称,而不是你在这里发布的其余部分。我不知道您使用了哪个工具来生成此输出,但就目前而言,它几乎不可读。请使用tkprof的直接复制和粘贴。此外,tkprof文件中的其他查询似乎非常相关。如果使用tkprof的sort参数

您可以按照中的建议调查花费的时间和Oracle选择的执行计划

问候,

Rob。

下次,为了帮助人们分析你的问题,请使用段落和适当的标点符号。它可以帮助我们的眼睛更快地索引文本。然后选择你发布的整个代码块,然后点击编辑器中的
{}
按钮使其变得漂亮。tkprof为你的集合和函数提到了其他名称,而不是你在这里发布的其余部分。我不知道您使用了哪个工具来生成此输出,但就目前而言,它几乎不可读。请使用tkprof的直接复制和粘贴。此外,tkprof文件中的其他查询似乎非常相关。如果使用tkprof的sort参数,则可以在文件的顶部获取它们。TReportInterval是定义TReportIntervalList的类型,这就是为什么我使用大小写进行选择,而不是如果…由于返回类型与函数类型不匹配,您提供的语句将无法编译。使用用户定义类型的要点是能够将其用作交叉应用(TSQL),然后能够对其进行分组以完成统计汇总。
  4  HASH JOIN OUTER (cr=38069 pr=34578 pw=0 time=19208475 us)
  2   COLLECTION ITERATOR PICKLER FETCH REPORT_INTERVAL_SEQUENCE_UDF (cr=97 pr=0 >                                                                    pw=0 time=13766 us)
  4   VIEW  (cr=37972 pr=34578 pw=0 time=19194353 us)
  4    HASH GROUP BY (cr=37972 pr=34578 pw=0 time=19194329 us)  
SELECT
         TimeInterval,
         stats.During,
         stats.Name,
         stats.cnt
    FROM
        TABLE (GET_INTERVAL_SEQUENCE_UDF(
                                         TO_TIMESTAMP ('07/15/2011','mm/dd/yyyy')
                                        ,TO_TIMESTAMP ('07/20/2011','mm/dd/yyyy')
                                        ,2)) dtRange
    LEFT JOIN
    (
         SELECT
              i.During
              , mi.Name
              , SUM (CAST (VALUE_NUMERIC AS INT)) cnt

         FROM
              statistics se
         JOIN TABLE (Get_Context_Info_udf ()) mi 
              ON (se.Context_ID = mi.Context_ID)
         CROSS JOIN TABLE (Interval_GetT (se.EntryDate, 2)) i
         WHERE
              StatisticTypeID = HEXTORAW ('6CF933B091AE46FEA7F56BE96308190F') 
              AND EntryDate < TO_TIMESTAMP ('07/20/2011','mm/dd/yyyy') 
              AND EntryDate > TO_TIMESTAMP ('07/15/2011', 'mm/dd/yyyy')
         GROUP BY
             i.During
             , mi.Name
    ) stats ON dtRange.TimeInterval = stats.TimeInterval


The following are for reference in the aforementioned query.


CREATE OR REPLACE FUNCTION Interval_GetT(datestamp IN timestamp,  timeInterval IN int) 
RETURN TReportIntervalList AS vResult TReportIntervalList;
BEGIN
     SELECT TReportInterval(
                            CASE timeInterval 
                            WHEN 1 THEN TO_CHAR(datestamp, 'YYYY-MM-DD HH24') 
                            WHEN 2 THEN TO_CHAR(datestamp, 'YYYY-MM-DD')
                            WHEN 3 THEN TO_CHAR(datestamp, 'YYYY-WW')
                            END
                           ) 
     BULK COLLECT INTO vResult                                       
     FROM Dual WHERE ROWNUM = 1;

     RETURN vResult;
END;



CREATE OR REPLACE FUNCTION GET_INTERVAL_SEQUENCE_UDF(
      startTime IN timestamp,
      endTime IN timestamp,
      inputInterval IN int)
      RETURN t_interval_list_table   AS  intervalList t_interval_list_table := t_interval_list_table();
    BEGIN

    SELECT 
         CASE inputInterval
         WHEN 1 THEN (t_interval(REPORT_Interval_Get_udf((startTime + ((ROWNUM-1) * 1/24)), inputInterval))) --Hour
         WHEN 2 THEN (t_interval(REPORT_Interval_Get_udf((startTime + (ROWNUM-1)), inputInterval))) --Day
         WHEN 3 THEN (t_interval(REPORT_Interval_Get_udf((startTime + ((ROWNUM-1)*7)), inputInterval))) --Week
            END 
          BULK COLLECT INTO intervalList
          FROM dual CONNECT BY LEVEL <= (CASE inputInterval 
                                          WHEN 1 THEN CAST(CEIL(((TRUNC(endTime, 'HH') - TRUNC(startTime, 'HH')) * 24)) AS INT)
                                          WHEN 2 THEN CAST(TRUNC(endTime, 'DD') - TRUNC(startTime, 'DD') AS INT)
                                          WHEN 3 THEN CAST(CEIL(((TRUNC(endTime, 'DD') - TRUNC(startTime, 'DD')) )/7) AS INT)
                                       END);
      RETURN intervalList; 

    END GET_INTERVAL_SEQUENCE_UDF;


CREATE OR REPLACE FUNCTION      Get_Context_Info_udf
    RETURN TTRFRMENGMACHINEINFOLIST AS vResult TTRFRMENGMACHINEINFOLIST;
    BEGIN    
        SELECT TTrfrmEngMachineInfo(ch.Context_ID, mac.Name)
        BULK COLLECT INTO vResult   
        FROM
            a ch  
        INNER JOIN
            b cxm  ON ch.CONTX_MACHINE_ID = cxm.CONTX_MACHINE_ID   
        INNER JOIN
            c mac ON cxm.MACHINE_ID = mac.MACHINE_ID   
        INNER JOIN
            d ic  ON mac.MACHINE_ID = ic.MACHINE_ID  
        WHERE 
            ic.ONFIGURABLE_ENTITY_ID =  HEXTORAW(Format_Guid_udf('11111111-FAE9-47A1-91A9-60A53E9660FE'))
            AND mac.IS_DELETED = 'N'
            AND ic.IS_DELETED = 'N';

        RETURN vResult; 
     END;
CREATE OR REPLACE FUNCTION Interval_GetT(datestamp IN timestamp,  timeInterval IN int) 
RETURN TReportIntervalList AS vResult TReportIntervalList;
BEGIN
     SELECT TReportInterval(
              CASE timeInterval 
                     WHEN 1 THEN TO_CHAR(datestamp, 'YYYY-MM-DD HH24') 
                     WHEN 2 THEN TO_CHAR(datestamp, 'YYYY-MM-DD')
                     WHEN 3 THEN TO_CHAR(datestamp, 'YYYY-WW')
              END) 
     BULK COLLECT INTO vResult                                       
     FROM Dual WHERE ROWNUM = 1;

     RETURN vResult;
END;
CREATE OR REPLACE FUNCTION Interval_GetT(datestamp IN timestamp,  timeInterval IN int) 
RETURN TReportIntervalList;
BEGIN
  IF timeInterval  = 1 THEN
       RETURN TReportInterval(TO_CHAR(datestamp, 'YYYY-MM-DD HH24'));
  ELSIF timeInterval  = 2 THEN
       RETURN TReportInterval(TO_CHAR(datestamp, 'YYYY-MM-DD'));
  ELSIF timeInterval  = 3 THEN
       RETURN TReportInterval(TO_CHAR(datestamp, 'YYYY-WW'));
  ELSE
       RETURN NULL;
  END IF;
END;
 WHERE
      StatisticTypeID = HEXTORAW ('6CF933B091AE46FEA7F56BE96308190F') 
      AND EntryDate < TO_TIMESTAMP ('07/20/2011','mm/dd/yyyy') 
      AND EntryDate > TO_TIMESTAMP ('07/15/2011', 'mm/dd/yyyy')