2015-10-17 80 views
-2

感謝您的幫助,今天我希望我至少幫助過一個人,但我不是在這裏爲congrat和東西。在oracle中檢查進程的進程,使用變量數組

我有一個問題,當我嘗試檢查數據庫的一些過程的狀態

我已經進行查詢:

DECLARE 
CLAVES varchar(12); 
FECHA date; 

BEGIN 

FECHA := TO_DATE('16/10/2015','DD/MM/YYYY'); 
FOR KEYS IN (
     SELECT SKEY, 
       SUBSTR(RPAD(COD.SCOMMAND,43),41) PROD 
     FROM INSUDB.BATCH_JOB COD, 
       INSUDB.BATCH_PROCESS PRO 
     WHERE COD.NUSERCODE = '3345' 
     AND  COD.NBATCH = PRO.NBATCH 
     AND  COD.NUSERSUBMIT = COD.NUSERCODE 
     AND  TRUNC(COD.DSUBMIT) = TO_DATE ('16/10/2015', 'DD/MM/YYYY') 
     AND  PRO.SCODISPL = 'VIL7002' 
     ORDER BY COD.DSUBMIT ASC 

    )LOOP 
     CLAVES := TRIM(TO_CHAR(KEYS.SKEY)); 

     BEGIN 
      SELECT '01 - EJEC' " ", 
        NPRODUCT PRODUCTO, 
        COUNT(*) CONTAR, 
        TO_CHAR(NVL(TRUNC(MOD((MAX(DCOMPDATE) - MIN(DCOMPDATE))*24,24)),0)) ||' HRS. '|| 
        TO_CHAR(NVL(TRUNC(MOD((MAX(DCOMPDATE) - MIN(DCOMPDATE))*24*60,60)),0)) ||' MIN. '|| 
        TO_CHAR(NVL(TRUNC(MOD((MAX(DCOMPDATE) - MIN(DCOMPDATE))*24*60*60,60)),0)) ||' SEG.' TIEMPO, 
        MIN(DCOMPDATE) , 
        MAX(DCOMPDATE) 
      FROM TIMETMP.TMP_VIL7002 
      WHERE SKEY = CLAVES 
      AND  NSTATUS = 1 
      group by nproduct 
      UNION 
      SELECT '02 - PEND' COL, 
        null, 
        COUNT(*), 
        NULL, 
        NULL, 
        NULL 
      FROM TIMETMP.TMP_VIL7002 
      WHERE SKEY = CLAVES 
      AND  NSTATUS <> 1 
      UNION 
      SELECT '03 - ERR ' COL, 
        null, 
        COUNT(*), 
        NULL, 
        NULL, 
        NULL 
      FROM TIMETMP.TMP_VIL7002 
      WHERE SKEY = CLAVES 
      AND  NSTATUS = 3 
      UNION 
      SELECT '04 - TOTAL' COL, 
        null, 
        COUNT(*), 
        NULL, 
        NULL, 
        NULL 
      FROM TIMETMP.TMP_VIL7002 
      WHERE SKEY = CLAVES; 
     END; 
    END LOOP; 
END; 

此只給我一個錯誤信息

END; 
Error at line 1 
ORA-06550: línea 24, columna 17: 
PLS-00428: an INTO clause is expected in this SELECT statement 

回答

1

這正是消息所說的。如果你在PLSQL中執行select語句,你必須對結果做些什麼。您可以使用for循環來迭代它(與使用第一個查詢時一樣),或者添加一個into子句,您可以在其中爲查詢中的每個列指定一個PLSQL變量。 PLSQL希望執行像內部SQL語句這樣的語句。

就像現在這樣,它只是執行大的內部查詢而沒有對結果做任何事情。由於這很愚蠢,PLSQL不允許這樣做。

0

所以,我終於解決了我的問題,使用此查詢,並請勿使用過程

SELECT SKEY, 
    SUBSTR(RPAD(COD.SCOMMAND,43),41) PROD, 
    SUBSTR(RPAD(COD.SCOMMAND,67),66)||'/'||SUBSTR(RPAD(COD.SCOMMAND,65),64)||'/'||SUBSTR(RPAD(COD.SCOMMAND,63),60) FECHA, 
    (SELECT COUNT(*) FROM TIMETMP.TMP_VIL7002 TMP WHERE TMP.SKEY = COD.SKEY AND NSTATUS = 1) EJECUTADOS, 
    (SELECT COUNT(*) FROM TIMETMP.TMP_VIL7002 TMP WHERE TMP.SKEY = COD.SKEY AND NSTATUS <> 1) PENDIENTES, 
    (SELECT COUNT(*) FROM TIMETMP.TMP_VIL7002 TMP WHERE TMP.SKEY = COD.SKEY AND NSTATUS = 3) ERRORES, 
    (SELECT COUNT(*) FROM TIMETMP.TMP_VIL7002 TMP WHERE TMP.SKEY = COD.SKEY) TOTAL, 
    (SELECT MIN(DCOMPDATE) FROM TIMETMP.TMP_VIL7002 TMP WHERE TMP.SKEY = COD.SKEY) INICIO, 
    (SELECT MAX(DCOMPDATE) FROM TIMETMP.TMP_VIL7002 TMP WHERE TMP.SKEY = COD.SKEY) TERMINO 
FROM INSUDB.BATCH_JOB COD, 
    INSUDB.BATCH_PROCESS PRO 
WHERE COD.NUSERCODE = '3345' 
AND  COD.NBATCH = PRO.NBATCH 
AND  COD.NUSERSUBMIT = COD.NUSERCODE 
AND  TRUNC(COD.DSUBMIT) = TO_DATE ('18/10/2015', 'DD/MM/YYYY') -- unico parametro a cambiar es la fecha de ejecucion 
AND  PRO.SCODISPL = 'VIL7002' 
ORDER BY COD.DSUBMIT ASC