quarta-feira, 6 de fevereiro de 2013

Cursores do Oracle


Exemplo de cursores.

Meu amigo Kleber pediu uma ajudinha para aprender a usar cursores, então montei isso para ele.


CREATE OR REPLACE PROCEDURE SQ_PROC_CURSORES (p_acao char) AS
  V_EVENTO_MESTRE CHAR(1) := 'N';

v_ano VARCHAR2(4);

CURSOR creby IS (SELECT CD_EVENTO, CD_MESTRE
                   FROM BIG_OUTAGE
                  WHERE EXTRACT(YEAR FROM DT_PROCESSAMENTO) = v_ano
                    AND EXTRACT(MONTH FROM DT_PROCESSAMENTO) IN (10, 11));


CURSOR krebe IS (SELECT CD_EVENTO, CD_MESTRE
                   FROM BIG_OUTAGE
                  WHERE EXTRACT(YEAR FROM DT_PROCESSAMENTO) = v_ano
                    AND EXTRACT(MONTH FROM DT_PROCESSAMENTO) IN (10, 11));
reg_krebe krebe%ROWTYPE;

forca_erro EXCEPTION;

-- Criado para fazer a mudança de linha ----
crlf  varchar2(2)      := chr(13) || chr(10);
--------------------------------------------

BEGIN

  IF p_acao = '1' THEN
      FOR RS IN (SELECT CD_EVENTO, CD_MESTRE
                   FROM BIG_OUTAGE
                  WHERE /*CD_MESTRE = V_EVENTO_MESTRE
                    AND*/ EXTRACT(YEAR FROM DT_PROCESSAMENTO) = '2012'
                    AND EXTRACT(MONTH FROM DT_PROCESSAMENTO) IN (10, 11)) LOOP

        DBMS_OUTPUT.PUT_LINE(RS.CD_EVENTO || ' - ' || RS.CD_MESTRE);

        IF RS.CD_EVENTO IN (2744055, 2744083, 2744061) THEN
          UPDATE SQ_TESTE SET LOG_ERROS = RS.CD_EVENTO
          WHERE CD_EVENTO = RS.CD_EVENTO;
        END IF;
      END LOOP;
  ELSIF p_acao = 2 THEN
        v_ano := 2012;
       FOR reg_creby IN creby LOOP
          IF reg_creby.CD_EVENTO IN (2744055, 2744083, 2744061) THEN
            UPDATE SQ_TESTE SET LOG_ERROS = 'cursor 2'
            WHERE CD_EVENTO =reg_creby.CD_EVENTO;
          END IF;
       END LOOP;
  ELSIF p_acao =3 THEN
        v_ano := 2012;
        OPEN krebe;
        LOOP
            FETCH krebe INTO reg_krebe;
            EXIT WHEN krebe%NOTFOUND;
            
            IF reg_krebe.CD_EVENTO IN (2744055, 2744083, 2744061) THEN
              UPDATE SQ_TESTE SET LOG_ERROS = 'cursor 2'
              WHERE CD_EVENTO =reg_krebe.CD_EVENTO;
            END IF;        
           
         END LOOP;
  ELSIF p_acao = 4 THEN
        v_ano := 2012;
        OPEN krebe;
        LOOP
            FETCH krebe INTO reg_krebe;
            EXIT WHEN krebe%NOTFOUND;
            
            IF reg_krebe.CD_EVENTO = 2744055 THEN
               RAISE forca_erro;
            END IF;        
           
         END LOOP;        
             
  END IF;
  EXCEPTION
  WHEN forca_erro THEN
       RAISE_application_error (-20004,'Krebynhu - encontrado o evento ' ||
                               reg_krebe.CD_EVENTO || crlf ||
                               '------------------------------------------------' || crlf ||
                               'Código do erro: ' ||  SQLCODE || crlf ||
                               'Descrição do erro: ' || SQLERRM || crlf ||
                               '------------------------------------------------' || crlf );
END;

segunda-feira, 4 de fevereiro de 2013

Locked Objects


Lista os objetos que estão lockados (travados)


SELECT OBJ.OS_USER_NAME,
       SES.SID,
       SES.SERIAL#,
       SES.LOGON_TIME,
       SES.USERNAME,
       SES.OSUSER,
       SES.PROGRAM,
       OBJ.LOCKED_MODE,
       SES.LAST_CALL_ET
  FROM V$LOCKED_OBJECT OBJ, V$SESSION SES



________________________
#oracle #lock #locado #session

Objetos que estão sendo acessados


Verificando objetos que estão sendo acessados no momento.

Esta tabela exibe todos os objetos que estão sendo utilizados no momento de sua execução


SELECT * FROM V$ACCESS



___________________________
#rollback #locked #acesso #oracle
Related Posts Plugin for WordPress, Blogger...