O nome das variáveis que matou o código

Este forum é dedicado a códigos errados que se encontram por aí, ou seja, coisas que não se deve fazer de jeito nenhum! Não coloque neste forum dúvidas! (apenas situações bizarras do nosso dia a dia :-)
Responder
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Ai vai uma amostra de um código 100% funcionando. Mas tente entender O QUE esse programa faz!
Ele utilizou o nome de umas variáveis muito doidas! Parece Assembly :-D

Selecionar tudo

CREATE OR REPLACE FUNCTION nome_funcao1 (P_CREATION_DATE IN DATE, P_LAST_UPDATE_DATE IN DATE, P_SABADO IN VARCHAR, P_ORIGEM IN NUMBER)RETURN NUMBER IS
  V_HORA             NUMBER(10) := 0;
  V_CREATION_DATE    NUMBER(10) := 0;
  V_LAST_UPDATE_DATE NUMBER(10) := 0;
  V_CONT             DATE;
  V_X   DATE;
  V_Y   DATE;
  V_CX  NUMBER(5) := 0;
  V_CY  NUMBER(5) := 0;
  V_CCONT NUMBER(5) := 0;

BEGIN

  V_X := P_CREATION_DATE;
  V_Y := P_LAST_UPDATE_DATE;

  V_CX := nome_funcao2(TRUNC(V_X), P_ORIGEM);
  V_CY := nome_funcao2(TRUNC(V_Y), P_ORIGEM);

  IF (TRUNC(V_X) = TRUNC(V_Y) AND V_CX >= 100) AND ((TO_NUMBER(TO_CHAR(V_X,'D')) NOT IN (1,7) AND P_SABADO = 'N') OR P_SABADO = 'S') THEN
     V_LAST_UPDATE_DATE := 0;
  ELSE
     IF (V_CX >= 100) AND ((TO_NUMBER(TO_CHAR(V_X,'D')) NOT IN (1,7) AND P_SABADO = 'N') OR P_SABADO = 'S') THEN
        V_CREATION_DATE := 0;
     END IF;

     IF (V_CY >= 100) AND ((TO_NUMBER(TO_CHAR(V_Y,'D')) NOT IN (1,7) AND P_SABADO = 'N') OR P_SABADO = 'S') THEN
        V_LAST_UPDATE_DATE :=(V_CREATION_DATE + 1);
     ELSE
         V_LAST_UPDATE_DATE := V_CREATION_DATE;
     END IF;

  END IF;

  V_CONT := TRUNC(V_X);

  LOOP
      V_CONT := V_CONT + 1;
      EXIT WHEN V_CONT >= TRUNC(V_Y);
      V_CCONT := nome_funcao2(TRUNC(V_CONT), P_ORIGEM);
      IF V_CCONT >= 100 AND P_SABADO = 'S' THEN
         V_HORA := V_HORA + 1;
      ELSIF ((TO_NUMBER(TO_CHAR(V_CONT,'D')) NOT IN (1,7) AND P_SABADO = 'N') AND V_CCONT>= 100) THEN
         V_HORA := V_HORA + 1;
      END IF;
  END LOOP;

  V_HORA := V_HORA + V_LAST_UPDATE_DATE;

  RETURN V_HORA;

EXCEPTION
  WHEN OTHERS THEN
      RETURN 0;
END;
Contribuido pelo bróder OTAVIO SOUZA!
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes