Ir para conteúdo
Fórum Script Brasil

lucasiigd

Membros
  • Total de itens

    5
  • Registro em

  • Última visita

Posts postados por lucasiigd

  1. Boa tarde Edmilton, sou novo no postgre, então eu vou tentar ajudar. Pelo que vejo "lo_export" parece ser uma função, certo ?

    Se for o caso, então quando se executa ela no pgadmin, ela vai funcionar mesmo pois a consulta retornará um valor e será mostrado logo em seguida.

    Quando se chama uma função dentro de outra, o resultado precisa ser armazenado em uma variável, portanto eu creio que foi por isso que o sistema emitiu esse erro pra você. Se estiver tentando apenas EXECUTAR a função lo_export, eu recomendo que tente trocar o SELECT por PERFORM, o comando PERFORM descarta o resultado da consulta. Agora se estiver tentando SALVAR ou RETORNAR o resultado dessa consulta, eu recomendo criar uma variável do tipo RECORD e usar o comando SELECT acrescentando a clausula INTO para que o postgre jogue o resultado dessa consulta dentro dessa variável. Ficaria mais ou menos assim.

     

    DECLARE
    resultado record;
    BEGIN
    SELECT lo_export(Clinha,'//sicsistemas/c/testeexport.r' ) INTO resultado FROM tremessa WHERE nid_tremessa = 480 ;
    RETURN resultado;
    END
    

    Espero ter ajudado, forte abraço

  2. Olá pessoal,

     

    Estou com uma dúvida e gostaria de saber se alguém pode me dar uma ajuda.

    Tenho o seguinte cenário na minha modelagem de contas bancárias :Conta, Movimento_conta, Salda_contas. Eu tenho o cadastro de contas corrente(Tabela CONTA), Os lançamentos(MOVIMENTO_CONTA) e a tabela onde quero controlar os Saldos(SALDO_CONTAS). O minha dúvida é como fazer e controle de concorrência/Transação da tabela SALDO_CONTAS, na hora que eu inserir um lançamento em MOVIMENTO_CONTA de forma que se dois usuários diferentes realizarem a operação no mesmo instante, os saldos não fique inconsistente.

    Basicamente a sequencia é a seguinte: 

    1 - Insiro um lançamento em MOVIMENTO CONTA e depois;

    2 - Atualizo o SALDO_CONTAS

     Att;

     

     

    Boa tarde Romário, eu sou bem novato no postgre sql, mas eu creio que esse link vai te ajudar.

    http://pgdocptbr.sourceforge.net/pg80/triggers.html

    Este link vai te levar até a documentação do Postgre, onde fala sobre as funções Triggers (gatilhos), essas funções podem executar determinadas ações ANTES ou DEPOIS de haver inserções, atualizações ou exclusões, ou seja quando os comandos insert, update e/ou delete forem executados. Dessa forma você poderá criar um gatilho onde o postgre vai executar a atualização da tabela SALDO_CONTAS logo depois que você inserir ou alterar um dado na tabela MOVIMENTO_CONTA.

    Espero ter ajudado, forte abraço

  3. Ola Josieli, eu fiz dessa forma e deu certo, espero que ajude

     

    create trigger verifica_sem_municipio
    AFTER insert on cidade              -- troquei o before pelo after, porque pra mim fica estranho deletar um registro que ainda não foi inserido.
    For Each Row
        execute procedure apaga_estado();
    CREATE OR REPLACE FUNCTION public.apaga_estado()
      RETURNS trigger AS
    $BODY$
    declare
        cd_cidade integer;
        cd_estado integer;
    begin
        cd_cidade := new.id_cidade; -- atribui o novo ID da cidade na variável
        cd_estado := new.id_estado; -- mantive o seu código
        
        if not exists(select * from cidade where id_estado = cd_estado)
        then
        delete from public."cidade" where cidade.id_cidade = cd_cidade; -- Fiz isso pra apagar o ultimo
    --registro inserido no banco. Esse "public.cidade" que coloquei é pra referenciar a tabela cidade, no --PgAdmin III é necessario fazer isso.
        end if;
        return null;
    End;
    $BODY$
      LANGUAGE plpgsql
    
  4. Olá amigos, estou tentando inserir dados em uma tabela através de uma função (que eu chamo de lancar_nota), a minha ideia é inserir o numero inicial, final e a empresa e então a função alimentaria o meu banco de dados automaticamente, por exemplo: SELECT lancar_nota(1,20,'LUCAS'); Essa função lançaria 20 notas na empresa LUCAS, o problema é que estou tendo os mesmos valores (o resultado está em anexo). Se eu executar a função manualmente várias vezes (ou seja SELECT lancar_nota(1,1,'LUCAS'), depois rodar novamente SELECT lancar_nota(2,2,'LUCAS') e assim por diante) eu obtenho valores diferentes (que é o meu objetivo), portanto eu presumo que a minha função está correta, eu acho. Por favor se alguém puder me ajudar, desde já eu agradeço.

    Segue abaixo o código da função escrito em PLPGSQL

    CREATE OR REPLACE FUNCTION public.lancar_nota(
        numero_inicial integer,
        numero_final integer,
        apelido character varying)
      RETURNS void AS
    $BODY$
    DECLARE

    desconto numeric(10,2);
    val_cont numeric(10,2);

    BEGIN

    IF numero_final < numero_inicial
    THEN RAISE NOTICE 'Numero Final não pode ser maior que o inicial, FIM DO PROCESSAMENTO';
    END IF;

    FOR X IN numero_inicial..numero_final LOOP

    desconto := public.gerar_valor(); -- Função para gerar valor de 0 a 1999,99
    val_cont := public.gerar_valor();

    IF desconto >= val_cont              -- Desconto não pode ser maior que o valor contábil
    THEN desconto := 0.00;
    END IF;

    INSERT INTO public.notas_icms(numero, dia, mes, tipo, apelido_empresa, valor_contabil, serie, desconto)
    VALUES (X, public.escolher_dia(), public.escolher_mes(),'S', apelido, val_cont,1,desconto); -- a função escolher dia e mês, geram dias e meses aleatórios

    END LOOP;
    RETURN;
    END;

    PS: Sou novo no assunto ainda, estou aprendendo.

    função lançar_nota.JPG

×
×
  • Criar Novo...