Rodrigo A. M.
-
Total de itens
7 -
Registro em
-
Última visita
Posts postados por Rodrigo A. M.
-
-
Em 03/09/2018 em 15:04, Markleber disse:
Boa tarde à todos... Sou totalmente leigo em SQL e estou precisando de uma ajuda de vocês, aliás, um excelente ajuda. Tenho duas tabelas abaixo:
Tabela linaus07
d01 d02 d03 d04 d05 d06 d07 10 11 12 13 14 15 16 10 11 12 13 14 16 17 10 11 12 13 14 16 22 Tabela linrep07
d01 d02 d03 d04 d05 d06 d07 d08 d09 d10 d11 d12 d13 d14 d15 1 2 3 4 5 6 7 10 11 12 13 14 16 17 22 1 2 3 4 5 6 7 8 10 11 12 13 14 16 17 1 2 3 4 5 6 7 9 10 11 12 13 14 16 22 Então, o que preciso...???
Pego o 1 registro da tabela linaus07 contendo 7 campos e confronto com todos os registros da tabela linrep07 contendo 15 campos, reparem que o primeiro registro da tabela linaus07, confrontando com a tabela linrep07, em nenhum momento continha 7 iguais nos registros, então, não preciso fazer nada, porém, repare agora, que o segundo registro da tabela linaus07, confrontando com a tabela linrep07, encontramos 7 campos exatamente nos 15 campos da outra tabela, então, pego o registro da tabela linrep07 e gravo em outro banco de dados (um novo), o registro que contem esses 15 campos que tinham os 7 campos da tabela linaus07.
o que tem que ser respeitado...
Cada registro da tabela linaus07 contendo 7 campos, irá passar em todos os registros da tabela linrep07 contendo 15 campos e irá colocar num novo banco de dados, todos os registros que da tabela linrep07 tiverem exatamente os 7 campos da tabela linaus07 e ao final, esse novo banco, terá com certeza muito registros, mas preciso salvá-los em um arquivo .txt com o separador "-" entre os campos...
Espero ter sido claro... Obrigado
MARCELO SAMPAIO
Oi Marcelo, sou novo no fórum, você conseguiu solucionar esse desafio?
-
Pode usar uma BAT e agendar a execução no servidor.
-
Bom dia, dei uma alterada no na função e funcionou perfeitamente como eu precisava. Obrigado por toda disponibilidade em ajudar.
Qualquer consideração fique a vontade.
create or replace function fn_get_codbarras_gtin(p_codbarras varchar(13))
returns varchar(14) as $$
declare
v_soma integer;
v_digitos smallint[13];
v_DV smallint;
v_dt integer;
begin
--Verifica a quantidade de dígitos informados no parâmetro da função
if length(p_codbarras) > 13 then
raise exception 'O valor informado no parâmetro possui mais do que 12 dígitos';
end if;
--Converte em um array
v_digitos := string_to_array(p_codbarras, null);
--É somado cada elemento do array, caso ele esteja num índice par o valor será
--multiplicado por 3 antes de ser somado.
v_dt := (Length("p_codbarras"));
for i in 1..v_dt loop
if mod(v_dt,2) = 0 then
if mod(i,2) = 0 then
v_soma := coalesce(v_soma, 0) + (v_digitos * 3);
else
v_soma := coalesce(v_soma, 0) + v_digitos;
end if;
else
if mod(i,2) = 0 then
v_soma := coalesce(v_soma, 0) + v_digitos;
else
v_soma := coalesce(v_soma, 0) + (v_digitos * 3);
end if;
end if;
end loop;
--O resultado da subtração de 10 pela sobra da divisão da soma dos dígitos
--por 10 é o dígito verificador
v_DV = 10 - mod(v_soma, 10);
if v_DV = 10 then
v_DV := 0;
end if;
--É retornado o código de barras concatenado ao dígito verificador
return array_to_string(v_digitos, '') || v_DV;
end
$$ language plpgsql volatile strict;update public."GTIN13" set "STATUS" = 'INVALIDO' where "GTIN" != public.fn_get_codbarras_gtin(substring("GTIN" from 1 for (Length("GTIN")-1)));
-
Não estou conseguindo amigo. Essa função e esse delete excluem mesmo registros válidos. Não sei onde estou errando.
Tenho uma base com as seguintes colunas "COD_EAN" "DESC_PRODUTO" e "CLASS_FISCAL_NCM", com 500.000 registros mais ou menos e precisava rodar algo para validar essa base já existente e excluir o que não passar na validação. Mas sou iniciante em PostgreSQL e está me tirando a tranquilidade, tens alguma dica?
Se não tiver, mesmo assim, agradeço seu tempo.
-
Se eu entendi bem, essa função valida quando recebe um EAN para validar. Gostaria de ajuda para um select e delete EANs que não sejam válidos em um BD já existente.
Teria alguma sugestão?
Em 30/01/2019 em 09:18, douglascso disse:Bom dia,
segue exemplo:
create or replace function fn_get_codbarras_ean13(p_codbarras varchar(12)) returns varchar(13) as $$ declare v_soma integer; v_digitos smallint[12]; v_DV smallint; begin --Verifica a quantidade de dígitos informados no parâmetro da função if length(p_codbarras) > 12 then raise exception 'O valor informado no parâmetro possui mais do que 12 dígitos'; end if; --Formata o valor do parâmetro com zeros à esquerda e o converte em um array v_digitos := string_to_array(lpad(p_codbarras,12,'0'), null); --É somado cada elemento do array, caso ele esteja num índice par o valor será --multiplicado por 3 antes de ser somado. for i in 1..12 loop if mod(i,2) = 0 then v_soma := coalesce(v_soma, 0) + (v_digitos[i] * 3); else v_soma := coalesce(v_soma, 0) + v_digitos[i]; end if; end loop; --O resultado da subtração de 10 pela sobra da divisão da soma dos dígitos --por 10 é o dígito verificador v_DV = 10 - mod(v_soma, 10); if v_DV = 10 then v_DV := 0; end if; --É retornado o código de barras concatenado ao dígito verificador return array_to_string(v_digitos, '') || v_DV; end $$ language plpgsql volatile strict;
SELECT public.fn_get_codbarras_ean13('789100031550');
-
Boa tarde amigo,
Alguém já precisou validar códigos EAN ou os conhecidos código de barras de produtos?
Se sim, tem o script dessa função?
Desde já agradeço.
Comparar duas tabelas
em PostgreSQL
Postado