Re: [pgbr-geral] Auditoria de dados
Eu utilizo tabela(s) temporária(s). Como é restrita para a conexão corrente, após conectar eu atualizo com as informações que preciso. Nas triggers leio esta tabela e gravo nas tabelas auditadas. Em 25 de julho de 2014 13:26, Fabrízio de Royes Mello < fabri...@timbira.com.br> escreveu: > On 25-07-2014 12:18, Flavio Henrique Araque Gurgel wrote: > >> >>Pretendo fazer essa operação através de trigger > >> Utilizo o Audit trigger 91Plus [1] > >> > >> >>O problema é capturar o responsável pela alteração, porque quem faz a > >> conexão no banco é um usuário único, definido na aplicação > >> Tive o mesmo problema, como uso jdbc resolvi passando o id do usuário > >> logado como comentário no final da query: > >> UPDATE tabela SET campo = true WHERE id = 1 --ul:5 > >> onde ul:5 significa usuáio logado de id 5 > >> alterei a a trigger original do audit trigger para capturar em vez do > >> usuário do postgres, capturar o id que vem após a string '--ul:' > >> > >> [1] https://wiki.postgresql.org/wiki/Audit_trigger_91plus > >> > >> Atenciosamente, > >> > >> Alessandro Lima > > > > Cara, bela ideia essa sua! É um problema recorrente. > > Você poderia até incluí-la nessa página Wiki como um item adicional. > > > > Outra alternativa para esse problema é utilizar variáveis de sessão > (custom options). Ex: > > fabrizio=# SELECT current_setting('classe.variavel'); > ERROR: unrecognized configuration parameter "classe.variavel" > fabrizio=# SELECT set_config('classe.variavel', 'valor', false); > set_config > > valor > (1 row) > > fabrizio=# SELECT current_setting('classe.variavel'); > current_setting > - > valor > (1 row) > > > Há algum tempo escrevi um extensão [1] pra manipular essas variáveis de > sessão. > > Essa necessidade surgiu no passado pelo mesmo motivo, e na época a > aplicação era PHP, então pegamos todo conteúdo da sessao ($_SESSION) e > gravamos na sessão do PostgreSQL após o pg_connect. Com isso temos as > mesmas variáveis da aplicação no banco também. Ajudou bastante ;-) > > Att, > > [1] http://pgxn.org/dist/session_variables/0.0.4/ > > -- >Fabrízio de Royes Mello Timbira - http://www.timbira.com.br/ >PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento > ___ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > -- Renato Becker Desenvolvimento de Software DBA PostgreSQL http://about.me/renatobecker ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Relacionamento Ternário com Foreign Key?
A cardinalidade entre Device e Channel é N-N, não existe precedência entre elas. Ambas tem FK para Application, o que acontece é que na tabela associativa entre elas preciso consistir que tenham relação com a mesma Application. Renato Becker Desenvolvimento de Software DBA PostgreSQL http://about.me/renatobecker Em 12 de dezembro de 2012 21:31, Tiago Adami escreveu: > > Em 12/12/2012 20:56, "Renato Augusto" escreveu: > > > > > Boa noite > > > > Tenho uma estrutura semelhante as tabelas abaixo: > > > > Table Application > > - app_id (PK) > > - app_name > > > > Table Device > > - device_id (PK) > > - device_name > > - app_id (FK) > > > > Table Channel > > - channel_id (PK) > > - channel_name > > - app_id (FK) > > > > A questão é a seguinte, tanto a tabela Device com a tabela Channel tem > Foreign Key para Application, agora preciso fazer o relacionamento entre > elas, que teoricamente seria um relacionamento binário entre as 2 chaves > primárias(device_id, channel_id), porém preciso consistir que tanto Device > quanto Channel sejam da mesma application, não sei se isto seria um > relacionamento ternário, pois pelo modelo relacional correto não posso e > nem consigo implementar app_id nesta tabela de junção. > > > > Se alguém já passou por uma situação semelhante ou tem alguma luz, > agradeço. > > > > Qual a relação de cardinalidade entre Channel e Device? 1-n, n-1,n-n? Se > por exemplo, Device for precedente a Channel, a pk de Device deve incluir > app_id e Channel deve ter uma fk com origem em Device, e não em App. > > Enviado do meu Galaxy NOTE > > ___ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Relacionamento Ternário com Foreign Key?
Boa noite Tenho uma estrutura semelhante as tabelas abaixo: Table Application - app_id (PK) - app_name Table Device - device_id (PK) - device_name - app_id (FK) Table Channel - channel_id (PK) - channel_name - app_id (FK) A questão é a seguinte, tanto a tabela Device com a tabela Channel tem Foreign Key para Application, agora preciso fazer o relacionamento entre elas, que teoricamente seria um relacionamento binário entre as 2 chaves primárias(device_id, channel_id), porém preciso consistir que tanto Device quanto Channel sejam da mesma application, não sei se isto seria um relacionamento ternário, pois pelo modelo relacional correto não posso e nem consigo implementar app_id nesta tabela de junção. Se alguém já passou por uma situação semelhante ou tem alguma luz, agradeço. Renato Becker ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] array retornando valor diferente de varchar
Sim, isso eu sei, além de entender essa lógica de escapar a string em array quero evitar que isso aconteça. Se não estiver em array isso não acontece. Renato Becker Em 15 de agosto de 2012 22:44, Flavio Henrique Araque Gurgel < fla...@4linux.com.br> escreveu: > > On 15-08-2012 21:52, Renato Augusto wrote: > > Boa noite > > Tenho a seguinte situação, se faço SELECT em uma tabela com campos > > varchar está retornando corretamente os dados, mas se faço SELECT destes > > mesmos dados em um ARRAY de um SUB-SELECT, então está retornando os > > valores com barra invertida (\) no início e fim da coluna.. > > Mais um detalhe, se o valor da coluna não tiver espaços retorna certo, > > senão retorna conforme abaixo: > (...) > > > SELECT com retorno inválido: > > > > SELECT m.mat_id, m.mat_descricao, (SELECT array(SELECT > > > array[mc.matcor_id::varchar,mc.matcor_descricao::varchar,mc.matcor_foto::varchar]::varchar > > > >FROM public.material_cores mc WHERE mc.sis_ten_id = m.sis_ten_id AND > > mc.mat_id = m.mat_id ORDER BY mc.matcor_id)) AS arr_mat_cores > >FROM public.material m WHERE m.sis_ten_id = 2 ORDER BY m.mat_id > > > > 1;"Napa";"{"{1,\"Napa Avelã\",Napa_1.jpg}","{2,\"Napa > > Bandeira\",Napa_2.jpg}","{3,\"Napa Cobalto\",Napa_3.jpg}","{4,\"Napa > > Coral\",Napa_4.jpg}","{5,\"Napa Golden\",Napa_5.jpg}","{6,\"Napa > > Lilac\",Napa_6.jpg}","{7,\"Napa Lima\",Napa_7.jpg}","{8,\"Napa > > Magemta\",Napa_8.jpg}","{9,\"Napa Nuvem\",Napa_9.jpg}","{10,\"Napa > > Preto\",Napa_10.jpg}","{11,\"Napa Rato\",Napa_11.jpg}","{12,\"Napa > > Rosado\",Napa_12.jpg}","{13,\"Napa Turquesa\",Napa_13.jpg}","{14,\"Napa > > Vermelho\",Napa_14.jpg}"}" > > > > Vejam a diferença em um e outro SELECT: > > > > "Napa Avelã" -> \"Napa Avelã\" > > > > Alguém já passou por algum caso como esse? > > Sim > A barra invertida é o PostgreSQL escapando as aspas das cadeias de > caracteres. > É o jeito que se faz para saída de vetores, que foi o que você pediu no > SELECT. > > []s > Flavio Gurgel > ___ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] array retornando valor diferente de varchar
Boa noite Tenho a seguinte situação, se faço SELECT em uma tabela com campos varchar está retornando corretamente os dados, mas se faço SELECT destes mesmos dados em um ARRAY de um SUB-SELECT, então está retornando os valores com barra invertida (\) no início e fim da coluna.. Mais um detalhe, se o valor da coluna não tiver espaços retorna certo, senão retorna conforme abaixo: SELECT OK: SELECT * FROM material_cores; 3;1;1;"Napa Avelã";"2012-08-15 16:33:02.468763";"Napa_1.jpg" 3;1;2;"Napa Bandeira";"2012-08-15 16:33:02.468763";"Napa_2.jpg" 3;1;3;"Napa Cobalto";"2012-08-15 16:33:02.468763";"Napa_3.jpg" 3;1;4;"Napa Coral";"2012-08-15 16:33:02.468763";"Napa_4.jpg" SELECT com retorno inválido: SELECT m.mat_id, m.mat_descricao, (SELECT array(SELECT array[mc.matcor_id::varchar,mc.matcor_descricao::varchar,mc.matcor_foto::varchar]::varchar FROM public.material_cores mc WHERE mc.sis_ten_id = m.sis_ten_id AND mc.mat_id = m.mat_id ORDER BY mc.matcor_id)) AS arr_mat_cores FROM public.material m WHERE m.sis_ten_id = 2 ORDER BY m.mat_id 1;"Napa";"{"{1,\"Napa Avelã\",Napa_1.jpg}","{2,\"Napa Bandeira\",Napa_2.jpg}","{3,\"Napa Cobalto\",Napa_3.jpg}","{4,\"Napa Coral\",Napa_4.jpg}","{5,\"Napa Golden\",Napa_5.jpg}","{6,\"Napa Lilac\",Napa_6.jpg}","{7,\"Napa Lima\",Napa_7.jpg}","{8,\"Napa Magemta\",Napa_8.jpg}","{9,\"Napa Nuvem\",Napa_9.jpg}","{10,\"Napa Preto\",Napa_10.jpg}","{11,\"Napa Rato\",Napa_11.jpg}","{12,\"Napa Rosado\",Napa_12.jpg}","{13,\"Napa Turquesa\",Napa_13.jpg}","{14,\"Napa Vermelho\",Napa_14.jpg}"}" Vejam a diferença em um e outro SELECT: "Napa Avelã" -> \"Napa Avelã\" Alguém já passou por algum caso como esse? Renato Becker ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] BETWEEN X Index Scan
O tipo de campo é timestamp.. Renato Becker Em 26 de junho de 2012 16:36, Flavio Henrique Araque Gurgel < fla...@4linux.com.br> escreveu: > > Em 26-06-2012 16:30, Fabrízio de Royes Mello escreveu: > > Retire aquele "::date" do teu WHERE com BETWEEN e repita o teste. > > Completando o colega Fabrízio... > Qual é o tipo de dados da coluna com a data? > > []s > > Flavio Henrique A. Gurgel > Consultor e Instrutor 4Linux > Tel: +55-11-2125-4747 > www.4linux.com.br > ___ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] BETWEEN X Index Scan
Realmente Fabrízio, funcionou normalmente.. Não entendo a lógica do type cast alterar a leitura indexada, mas enfim, agradeço !!! Obrigado. Renato Becker 2012/6/26 Fabrízio de Royes Mello > > > Em 26 de junho de 2012 16:27, Renato Augusto escreveu: > > Olá Flávio.. >> Sim, já rodei o ANALYZE, VACUUM e REINDEX, mas o EXPLAIN continua com >> essa diferença absurda.. >> A tabela tem 66.000 registros, segue o SQL: >> >> EXPLAIN ANALYZE >> SELECT hist.endterminal AS "hist.endterminal", >>hist.indice, >>hist.funcao, >>hist.numos, >>hist.codfunc, >>hist.fase, >>hist.maquina, >>hist.datahoraini, >>hist.datahorafim, >>hist.qtdeproduzida, >>hist.qtderejeitada, >>hist.apontamnumerico, >>hist.horimetro, >>hist.atualizado >> FROM autech.thistprod hist >>WHERE ( ( hist.datahorafim >= '06/20/2012' AND hist.datahorafim <= >> '06/26/2012')) >>--WHERE ( ( hist.datahorafim::date between '06/20/2012' and >> '06/26/2012')) >> ORDER BY 1,1 >> >> > Retire aquele "::date" do teu WHERE com BETWEEN e repita o teste. > > Att, > > -- > Fabrízio de Royes Mello > Consultoria/Coaching PostgreSQL > >> Blog sobre TI: http://fabriziomello.blogspot.com > >> Perfil Linkedin: http://br.linkedin.com/in/fabriziomello > >> Twitter: http://twitter.com/fabriziomello > > > ___ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] BETWEEN X Index Scan
Olá Flávio.. Sim, já rodei o ANALYZE, VACUUM e REINDEX, mas o EXPLAIN continua com essa diferença absurda.. A tabela tem 66.000 registros, segue o SQL: EXPLAIN ANALYZE SELECT hist.endterminal AS "hist.endterminal", hist.indice, hist.funcao, hist.numos, hist.codfunc, hist.fase, hist.maquina, hist.datahoraini, hist.datahorafim, hist.qtdeproduzida, hist.qtderejeitada, hist.apontamnumerico, hist.horimetro, hist.atualizado FROM autech.thistprod hist WHERE ( ( hist.datahorafim >= '06/20/2012' AND hist.datahorafim <= '06/26/2012')) --WHERE ( ( hist.datahorafim::date between '06/20/2012' and '06/26/2012')) ORDER BY 1,1 Renato Becker Em 26 de junho de 2012 16:13, Flavio Henrique Araque Gurgel < fla...@4linux.com.br> escreveu: > > Em 26-06-2012 15:51, Renato Augusto escreveu: > > Boa tarde! > > > > Tenho uma tabela com um campo date e tenho um índice para este campo.. > > Gostaria de entender porque um WHERE nesse campo date usando ">= AND <=" > > faz a leitura de dados através do índice(Index Scan) e usando "BETWEEN" > > a leitura é feita de forma sequencial? > > > > Comparativos do EXPLAIN ANALYZE abaixo: > > > > SELECT com WHERE ( ( hist.datahorafim::date between '06/20/2012' and > > '06/26/2012')) > > > > "Sort (cost=1002255.87..1002256.70 rows=331 width=77) (actual > > time=42.662..48.170 rows=27319 loops=1)" > > " Sort Key: endterminal" > > " Sort Method: quicksort Memory: 4141kB" > > " -> Seq Scan on thistprod hist (cost=100.00..1002242.02 > > rows=331 width=77) (actual time=2.284..32.959 rows=27319 loops=1)" > > "Filter: (((datahorafim)::date >= '2012-06-20'::date) AND > > ((datahorafim)::date <= '2012-06-26'::date))" > > "Total runtime: 52.685 ms" > > > > SELECT com WHERE hist.datahorafim >= '06/20/2012' AND hist.datahorafim > > <= '06/26/2012' > > > > "Sort (cost=3507.53..3569.86 rows=24932 width=77) (actual > > time=18.105..23.105 rows=24865 loops=1)" > > " Sort Key: endterminal" > > " Sort Method: quicksort Memory: 3815kB" > > " -> Bitmap Heap Scan on thistprod hist (cost=393.81..1686.79 > > rows=24932 width=77) (actual time=2.670..9.120 rows=24865 loops=1)" > > "Recheck Cond: ((datahorafim >= '2012-06-20 00:00:00'::timestamp > > without time zone) AND (datahorafim <= '2012-06-26 00:00:00'::timestamp > > without time zone))" > > "-> Bitmap Index Scan on idx_autech_thistprod_9 > > (cost=0.00..387.57 rows=24932 width=0) (actual time=2.622..2.622 > > rows=24865 loops=1)" > > " Index Cond: ((datahorafim >= '2012-06-20 > > 00:00:00'::timestamp without time zone) AND (datahorafim <= '2012-06-26 > > 00:00:00'::timestamp without time zone))" > > "Total runtime: 27.227 ms" > > > > > > Se alguém souber o motivo, agradeço!! > > Sem a consulta completa não dá pra te responder. > Existe "sort" no plano de execução, então, estou supondo que você está > usando cláusula ORDER BY. > > Manda a consulta completa pra cá pra entendermos. > > O planejador toma decisões baseado nas estatísticas. Sua primeira > consulta está prevendo 331 linhas e a segunda quase 25 mil linhas. > > Suas estatísticas estão atualizadas? > Seu autovacuum está ligado e configurado? > > Rode um ANALYZE nas tabelas envolvidas e refaça os EXPLAIN ANALYZE. > > []s > > Flavio Henrique A. Gurgel > Consultor e Instrutor 4Linux > Tel: +55-11-2125-4747 > www.4linux.com.br > > > > ___ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] BETWEEN X Index Scan
Boa tarde! Tenho uma tabela com um campo date e tenho um índice para este campo.. Gostaria de entender porque um WHERE nesse campo date usando ">= AND <=" faz a leitura de dados através do índice(Index Scan) e usando "BETWEEN" a leitura é feita de forma sequencial? Comparativos do EXPLAIN ANALYZE abaixo: SELECT com WHERE ( ( hist.datahorafim::date between '06/20/2012' and '06/26/2012')) "Sort (cost=1002255.87..1002256.70 rows=331 width=77) (actual time=42.662..48.170 rows=27319 loops=1)" " Sort Key: endterminal" " Sort Method: quicksort Memory: 4141kB" " -> Seq Scan on thistprod hist (cost=100.00..1002242.02 rows=331 width=77) (actual time=2.284..32.959 rows=27319 loops=1)" "Filter: (((datahorafim)::date >= '2012-06-20'::date) AND ((datahorafim)::date <= '2012-06-26'::date))" "Total runtime: 52.685 ms" SELECT com WHERE hist.datahorafim >= '06/20/2012' AND hist.datahorafim <= '06/26/2012' "Sort (cost=3507.53..3569.86 rows=24932 width=77) (actual time=18.105..23.105 rows=24865 loops=1)" " Sort Key: endterminal" " Sort Method: quicksort Memory: 3815kB" " -> Bitmap Heap Scan on thistprod hist (cost=393.81..1686.79 rows=24932 width=77) (actual time=2.670..9.120 rows=24865 loops=1)" "Recheck Cond: ((datahorafim >= '2012-06-20 00:00:00'::timestamp without time zone) AND (datahorafim <= '2012-06-26 00:00:00'::timestamp without time zone))" "-> Bitmap Index Scan on idx_autech_thistprod_9 (cost=0.00..387.57 rows=24932 width=0) (actual time=2.622..2.622 rows=24865 loops=1)" " Index Cond: ((datahorafim >= '2012-06-20 00:00:00'::timestamp without time zone) AND (datahorafim <= '2012-06-26 00:00:00'::timestamp without time zone))" "Total runtime: 27.227 ms" Se alguém souber o motivo, agradeço!! Renato Becker Desenvolvimento de Software DBA PostgreSQL @renatobecker http://br.linkedin.com/pub/renato-becker/21/a/988 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Reaproveitar retorno de Function em SELECT
Hugo, Funcionou perfeitamente! Muito obrigado.. Abraço. Renato Becker Em 8 de novembro de 2011 09:28, Hugo Bastos Bucker escreveu: > Bom dia Renato, > > Em 8 de novembro de 2011 07:10, Renato Augusto > escreveu: >> >> Bom dia a todos, >> >> Estou com a seguinte situação nesse SQL: >> >> SELECT mod1.tb_oper_id AS operacao, >> mod1.tb_modoper_tempo_bruto AS tempo_bruto, >> mod1.tb_modoper_valorcusto AS valor_custo, >> estabset1.tb_estset_eficcustos AS eficiencia, >> ROUND((mod1.tb_modoper_tempo_bruto / >> (estabset1.tb_estset_eficcustos / 100)),5) AS tempo_total, >> ROUND((mod1.tb_modoper_valorcusto),5) AS valor_total, >> tipooper1.tb_tipooper_tipo AS tipo_oper, >> sch_custos.fun_custo_minuto_setor(mod1.sis_emp_id, >> emp1.par_scu_tipo_calc_custo_minuto, pestab, oper1.tb_set_id, >> tipooper1.tb_tipooper_tipo) AS custo_minuto, >> FROM sch_pcp.tb_modoper mod1 >> > > Você pode tentar usar o WITH assim: > > WITH consulta AS ( > SELECT mod1.tb_oper_id AS operacao, > mod1.tb_modoper_tempo_bruto AS tempo_bruto, > mod1.tb_modoper_valorcusto AS valor_custo, > estabset1.tb_estset_eficcustos AS eficiencia, > ROUND((mod1.tb_modoper_tempo_ >> >> bruto / >> (estabset1.tb_estset_eficcustos / 100)),5) AS tempo_total, >> ROUND((mod1.tb_modoper_valorcusto),5) AS valor_total, >> tipooper1.tb_tipooper_tipo AS tipo_oper, >> sch_custos.fun_custo_minuto_setor(mod1.sis_emp_id, >> emp1.par_scu_tipo_calc_custo_minuto, pestab, oper1.tb_set_id, >> tipooper1.tb_tipooper_tipo) AS custo_minuto, >> FROM sch_pcp.tb_modoper mod1 > > ) SELECT * FROM consulta WHERE tempo_total > 10; > > >> >> O que acontece é que tenho que chamar mais uma Function -> >> sch_pcp.fun_valor_impostos_operacao() onde um de seus parâmetros é o >> resultado da expressão do primeiro ROUND e outro parâmetro é o >> resultado da Function sch_custos.fun_custo_minuto_setor() chamada >> também no SQL.. >> O resultado desta Function de valor de impostos deve ser aproveitado >> no cálculo para encontrar o Valor Líquido Final. >> >> >> A questão é: >> - Como o Alias do Round nem da Function é reconhecido dentro da >> sentença, é possível armazenar um valor calculado em uma expressão ou >> o valor do Result de uma Function para ser aproveitado na mesma >> sentença sem fazer novamente a chamada desta Function ? >> >> Obrigado. >> >> Renato Becker. >> ___ >> pgbr-geral mailing list >> pgbr-geral@listas.postgresql.org.br >> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > > Abraços. > > Hugo B. Bucker > > ___ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Reaproveitar retorno de Function em SELECT
Bom dia a todos, Estou com a seguinte situação nesse SQL: SELECT mod1.tb_oper_id AS operacao, mod1.tb_modoper_tempo_bruto AS tempo_bruto, mod1.tb_modoper_valorcusto AS valor_custo, estabset1.tb_estset_eficcustos AS eficiencia, ROUND((mod1.tb_modoper_tempo_bruto / (estabset1.tb_estset_eficcustos / 100)),5) AS tempo_total, ROUND((mod1.tb_modoper_valorcusto),5) AS valor_total, tipooper1.tb_tipooper_tipo AS tipo_oper, sch_custos.fun_custo_minuto_setor(mod1.sis_emp_id, emp1.par_scu_tipo_calc_custo_minuto, pestab, oper1.tb_set_id, tipooper1.tb_tipooper_tipo) AS custo_minuto, FROM sch_pcp.tb_modoper mod1 O que acontece é que tenho que chamar mais uma Function -> sch_pcp.fun_valor_impostos_operacao() onde um de seus parâmetros é o resultado da expressão do primeiro ROUND e outro parâmetro é o resultado da Function sch_custos.fun_custo_minuto_setor() chamada também no SQL.. O resultado desta Function de valor de impostos deve ser aproveitado no cálculo para encontrar o Valor Líquido Final. A questão é: - Como o Alias do Round nem da Function é reconhecido dentro da sentença, é possível armazenar um valor calculado em uma expressão ou o valor do Result de uma Function para ser aproveitado na mesma sentença sem fazer novamente a chamada desta Function ? Obrigado. Renato Becker. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral