Fluxo na camada banco de dados



  • Olá pessoal!

    Estou fazendo alguns testes em criar um fluxo na camada banco de dados e depois gerar o script (código) para executar no banco PostgreSQL.

    Notei algumas coisas estranhas no script gerado no qual vou detalhar abaixo e se alguém souber explicar os motivos, se realmente é um problema de geração ou o fluxo foi montado de forma errada.

    Fluxo criado no Maker:

    [attachment=0]fluxo.png[/attachment]
    Esse é o script gerado: [code]--BEGIN GROUP CREATE OR REPLACE FUNCTION AUTENTICACAO_VERIFICAR_ACESSO(USUARIO_NOME CHARACTER VARYING(50), USUARIO_SENHA CHARACTER VARYING(50), DATA_ATUAL TIMESTAMP) RETURNS CHARACTER VARYING(50) AS $BODY$ DECLARE CODIGO_USUARIO INTEGER; DECLARE ACAO CHARACTER VARYING(50); DECLARE SOMA DOUBLE PRECISION; DECLARE CODIGO_USUARIO_1_usr_codigo INT4; BEGIN /* Obter codigo_usuario */ CODIGO_USUARIO := ( Select fr_usuario.usr_codigo From fr_usuario Where ( (fr_usuario.usr_login = USUARIO_NOME) And (fr_usuario.usr_senha = md5(fr_usuario.usr_codigo || USUARIO_SENHA))) --#1_usr_codigo:int4; ) --1_usr_codigo; ; --@1 DECLARE CODIGO_USUARIO_1_usr_codigo INT4; /* codigo_usuario > 0 ? */ IF (CODIGO_USUARIO > 0) THEN /* acao = "autenticou" */ ACAO := 'autenticou'; /* soma = 1 */ SOMA := '1'; RETURN(ACAO); ELSE /* acao = "dados_invalidos" */ ACAO := 'dados_invalidos'; END IF; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; --END GROUP[/code]
    A [b]primeira situação[/b] é a declaração da variável "CODIGO_USUARIO_1_usr_codigo INT4". Não compreendi por que gerou isso se não está sendo utilizada em nenhuma parte do código.

    A [b]segunda situação[/b] é referente ao objeto de decisão (IF). Note no fluxo que após ter caminhos separados pelo objeto decisão, depois acabam voltando ao mesmo ponto pelo processamento (soma = 1). Já no script gerado está sendo colocado tudo dentro do "IF", inclusive o retorno, ocasionando problemas de quando passa pelo "ELSE".

    Eu esperaria que gerasse algo assim: [code]... IF (CODIGO_USUARIO > 0) THEN ACAO := 'autenticou'; ELSE ACAO := 'dados_invalidos'; END IF; SOMA := '1'; RETURN(ACAO); ...[/code]
    Esse é apenas um exemplo para demonstrar o código gerado, visto que posso ter várias outras decisões com várias outras ligações a um mesmo objeto.

Log in to reply