Ir para conteúdo
  • ×   Você colou conteúdo com formatação.   Remover formatação

      Only 75 emoji are allowed.

    ×   Your link has been automatically embedded.   Display as a link instead

    ×   Your previous content has been restored.   Clear editor

    ×   You cannot paste images directly. Upload or insert images from URL.

  • Conteúdo Similar

    • Por Edilson Chaves
      Ola amigos, uso curso a algum tempo, só que desta vez estou apanhando de algo que aparentemente e bem simples. Tenho certeza que estou esquecendo algum detalhe.
      To a 2 dias me debatendo com isto.
      Por isto estou pedindo ajuda.
       
      O que pretendo fazer e criar um novo registro que mostre a evoluçao do crecimento mensal projetando o ponto de equilibrio. Para isto eu preciso pegar a soma do mês anterior e acrescentar a soma do atual.
       
      Esta é a Procedure. Abaixo explico o quer nao esta funcionado.
       
      DROP PROCEDURE IF EXISTS sp_Monitorado;
      DELIMITER $$
          CREATE PROCEDURE sp_Monitorado()
          BEGIN
              DECLARE done INT DEFAULT FALSE;
              DECLARE vVlrMesAtuPrv, vVlrMesAntPrv, vVlrMesAtuRea, vVlrMesAntRea, vPrevisto, vRealizado numeric(10,2);
              DECLARE vAnoAtu, vMesAtu, vOrdem, vAno, vMes INT;
              DECLARE vGrupo, vSubGrupo, vPessoa, vPessoaAtu VARCHAR(100);
              DECLARE cDados CURSOR FOR SELECT Ordem, Grupo, SubGrupo, Pessoa, Ano, Mes, Previsto, Realizado FROM vwresultadomonitoramento;
              DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
              OPEN cDados;
              read_loop: LOOP
                  FETCH cDados INTO vOrdem, vGrupo, vSubGrupo, vPessoa, vAno, vMes, vPrevisto, vRealizado;
                  IF done THEN
                     LEAVE read_loop;
                  END IF;
                  IF vOrdem <= 4 THEN
                      SET vVlrMesAtuPrv = vVlrMesAtuPrv + vPrevisto;
                      SET vVlrMesAtuRea = vVlrMesAtuRea + vRealizado;
                  INSERT INTO zzResultado VALUES (vOrdem, vGrupo, vSubGrupo, vPessoa, vAno, vMes, vPrevisto, vVlrMesAtuPrv);
                  END IF;
                  IF vOrdem = 4 THEN
                      SET vVlrMesAntPrv = vVlrMesAntPrv + vVlrMesAtuPrv;
                      SET vVlrMesAntRea = vVlrMesAntRea + vVlrMesAtuRea;
                      INSERT INTO zzResultado VALUES (99, vGrupo, 'PONTO DE EQUILIBRIO', vPessoa, vAno, vMes, vVlrMesAntPrv, vVlrMesAntRea);
                      SET vVlrMesAtuPrv = 0;
                      SET vVlrMesAtuPrv = 0;
                  END IF;
              END LOOP read_loop;
              CLOSE cDados;
          END;
      $$ DELIMITER;
       
      Quando co cursor entra nesta condiçao abaixo ele deveria pegar o valor acumulado anterior e acrescentar as variaveis (vVlrMesAntPrv, vVlrMesAntRea). So que o valor se perde e fica tudo zerado.
      Alguém pode me dizer onde estou errando.
      Anexo tem um print do resultado que pretendo ter
       
       IF vOrdem = 4 THEN
                      SET vVlrMesAntPrv = vVlrMesAntPrv + vVlrMesAtuPrv;
                      SET vVlrMesAntRea = vVlrMesAntRea + vVlrMesAtuRea;
                      INSERT INTO zzResultado VALUES (99, vGrupo, 'PONTO DE EQUILIBRIO', vPessoa, vAno, vMes, vVlrMesAntPrv, vVlrMesAntRea);
                      SET vVlrMesAtuPrv = 0;
                      SET vVlrMesAtuPrv = 0;
      END IF;
       

    • Por Jhol Walker
      Meus cursores estão duplicando quando seleciono alguma ferramenta de brush, por exemplo. 
      Também quando seleciono os mesmos, o brush fica todo zoado, fica de qualquer forma, menos circulo kkkk 
      Se alguém souber o que é e puder me ajudar ficarei grato! 
    • Por Gustavo_RJ
      Bom dia, estou com uma dúvida que creio ser até simples mas não estou conseguindo a solução
       
      Estou rodando uma query em uma view que na maioria dos casos não resulta mesmo resultado e, eventualmente traz alguma coisa, são 4 colunas... mas preciso que quando a query não retorne nenhum resultado seja apresentada alguma mensagem, algo como "não foi encontrado nenhum registro"
       
      Eu imaginei cursor mas sinceramente só usei uma vez e tem tempo não sei se se aplica ou se teria outra maneira.
       
      Como posso fazer isso?
    • Por tsilva141650
      Bom dia!
      Estou precisando transformar o resultado do meu cursor em forma de tabela como se estivesse efetuando um select.
      No exemplo abaixo criei uma procedure onde ira executar um execute immediate que ira variar, ou seja, não vou saber qual colunas serão necessárias.
      O retorno desta função é um cursor onde consigo visualizar os resultados com o comando print.
      Como poderia visualizar estes dados em forma de tabela?
       
      create or replace PROCEDURE TESTE (ID NUMBER,RETORNO OUT SYS_REFCURSOR)
      IS
      SCRIPT CLOB;
      BEGIN
          SCRIPT:= 'SELECT * FROM USER_TABLESPACES' ;
          EXECUTE IMMEDIATE SCRIPT;
          OPEN RETORNO FOR SCRIPT;
      END;
       
       
      var rc refcursor;
      execute TESTE(2,:rc);
      print rc ;
    • Por MarKteus
      Olá

      Alguém sabe como posso fazer a procedure Oracle retornar para serem valores usados na aplicação assim como já acontece no SQL ?
       
      Estou tentando conforme abaixo, não há erros na proc, mas não consigo obter os valores dos campos.
       
      O que há de errado ?
       
      create or replace PROCEDURE SP_SELECIONA_CLIENTE
      (
      -- Parametros de entrada
      P_ID IN CLIENTE.IDCLIENTE%TYPE
      ) AS

      -- Parametros de saida
      VIDCLIENTE CLIENTE.IDCLIENTE%TYPE;
      VNOMECLIENTE CLIENTE.NOMECLIENTE%TYPE;
      VDATACADASTRO CLIENTE.DATACADASTRO%TYPE;

      CURSOR regCliente(P_ID IN CLIENTE.IDCLIENTE%TYPE) IS
      SELECT "IDCLIENTE", "NOMECLIENTE", "DATACADASTRO"
      FROM CLIENTE C WHERE C.IDCLIENTE = P_ID;

      regs regCliente%ROWTYPE;

      CURSOR regClientes IS
      SELECT "IDCLIENTE", "NOMECLIENTE", "DATACADASTRO"
      FROM CLIENTE C;

      regs regClientes%ROWTYPE;

      BEGIN


      IF P_ID IS NOT NULL THEN

      IF regCliente%ISOPEN THEN
      CLOSE regCliente;
      END IF;

      OPEN regCliente(P_ID);
      FETCH regCliente into
      VIDCLIENTE, VNOMECLIENTE, VDATACADASTRO;
      ELSE

      IF regClientes%ISOPEN THEN
      CLOSE regClientes;
      END IF;

      OPEN regClientes;
      FETCH regClientes into
      VIDCLIENTE, VNOMECLIENTE, VDATACADASTRO;
      END IF;

      END;

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.