Pular para o conteúdo
  • Este tópico contém 2 respostas, 3 vozes e foi atualizado pela última vez 7 anos, 10 meses atrás por Avatar photoJosé Laurindo Chiappa.
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #108596
    Avatar de FABIANE SORBAR FONTANAFABIANE SORBAR FONTANA
    Participante

      Bom Dia…

      Preciso realizar um calculo onde existe a necessidade de acumular valor em uma variável.
      Estou usando desta forma:

      soma := soma + x

      porem quando executo o select a soma não é efetuada…

      alguém pode me dar uma dica sobre isso.
      Obrigada

      #108597
      Avatar de Jefferson de Almeida CostaJefferson de Almeida Costa
      Participante

        Fabiane,

        Utilize uma Package para declarar sua variável como publica, conforme exemplo abaixo:

        //Package para declarar a variavel como pública
        CREATE OR REPLACE
        PACKAGE pkg_soma
        IS
        soma NUMBER := 0;
        END;

        //função para a soma
        CREATE OR REPLACE
        FUNCTION FCT_SOMA(
        x NUMBER)
        RETURN NUMBER
        IS
        BEGIN
        pkg_soma.soma := pkg_soma.soma + x;
        return pkg_soma.soma;
        END FCT_SOMA;

        //select para chamar a function e somar a varivel
        SELECT FCT_SOMA(1) FROM dual CONNECT BY level <= 10;

        #108603
        Avatar photoJosé Laurindo Chiappa
        Moderador

          Colega, o que me causa espécie é a sua frase :

          “porem quando executo o select a soma não é efetuada…”

          de onde eu deduzo que vc escreveu uma STORED FUNCTION que é chamada a partir do SELECT que vc escreveu, tipo :

          SELECT colunaX, colunaY, NOMEDAMINHAFUNCTION(colunaasmoar) FROM nomedaminha tabela;

          algo no estilo, imagino…. Saiba que isso pode dar consequências de performance (pois o Otimizador de SQL só conhece SQL, ele nem imagina como vc programou a tal função) E de consistência (pois devido a otimizações no plano de execução, e coisas como array processing a função pode não ser chamada uma vez pra cada linha) : https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1547006324238 fala um pouquinho disso em linhs bem gerais…

          Se possível eu Recomendaria vc agrupar a lógica de soma junto com o SELECT em si – normalmente isso se faz com a função SUM se vc estiver agrupando com GROUP BY , OU então com funções analíticas, que te permitem somar/calcular totais AO MESMO TEMPO que o SELECT está lendo os dados : https://asktom.oracle.com/pls/asktom/f%3Fp%3D100:11:0::::P11_QUESTION_ID:1793764100346222947 tem um exemplo, veja que a coluna RT é a soma contínua, do que tinha antes com o salário recém-lido no registro sendo processado, eu ** IMAGINO ** que é algo mais ou menos assim que vc quer…

          []s

          Chiappa

        Visualizando 3 posts - 1 até 3 (de 3 do total)
        • Você deve fazer login para responder a este tópico.
        plugins premium WordPress