2 391
edições
Sem resumo de edição |
|||
Linha 177: | Linha 177: | ||
; -- NADA DE MENSAGEM! | ; -- NADA DE MENSAGEM! | ||
-- nao roda o loop .. devolver a função e gerar texto e rodar na mão. | -- nao roda o loop .. devolver a função e gerar texto e rodar na mão. | ||
</syntaxhighlight> | |||
=== tentativa 3 === | |||
Tentando simplesmente devolver a string. Parece que agora funciona: | |||
<syntaxhighlight lang="sql" style="font-size: 80%;"> | |||
DROP FUNCTION if exists osmc.grid_generate_all_levels_logistic2 | DROP FUNCTION if exists osmc.grid_generate_all_levels_logistic2 | ||
; | ; | ||
Linha 206: | Linha 207: | ||
$$; | $$; | ||
RAISE NOTICE 'entrei...'; | RAISE NOTICE 'entrei...'; | ||
select array_agg(x) FROM ( | select array_agg(x::text) INTO oid_list | ||
FROM ( | |||
SELECT array_agg(cod_b16h)::text as x | |||
FROM ( | |||
select cod_b16h, row_number() over() ord | |||
from grid_br2.poc_caruaru_vw01logistic | |||
where length(gid_vbit)=27 | |||
) t1 | |||
) t2 | GROUP BY ord/100 | ||
) t2; | |||
FOREACH cover_frag IN ARRAY oid_list LOOP | FOREACH cover_frag IN ARRAY oid_list LOOP | ||
s:=''; | s:=''; | ||
Linha 226: | Linha 228: | ||
RAISE NOTICE 'RODANDO %', s; | RAISE NOTICE 'RODANDO %', s; | ||
s := s || E'\n\n'; | s := s || E'\n\n'; | ||
END LOOP; -- cover_frag | |||
RAISE NOTICE 'sai...'; | |||
RETURN s; | |||
END; | |||
$f$; | |||
select osmc.grid_generate_all_levels_logistic2( 2.5, 'BR', 37, 18 ); | |||
</syntaxhighlight> | |||
=== tentativa 4 === | |||
Finalmente reescrevendo como procedure: | |||
<syntaxhighlight lang="sql" style="font-size: 80%;"> | |||
DROP FUNCTION if exists osmc.grid_generate_all_levels_logistic2 | |||
; | |||
DROP PROCEDURE if exists osmc.grid_generate_all_levels_logistic2 | |||
; | |||
CREATE PROCEDURE osmc.grid_generate_all_levels_logistic2( | |||
p_lev_max numeric, p_contry text, | |||
p_contry_base integer, | |||
p_id_bitlen integer, -- ex. 37 | |||
p_lev0 numeric default 2.5 | |||
) LANGUAGE plpgsql AS $f$ | |||
DECLARE | |||
tpl text; | |||
cover_frag text; | |||
oid_list text[]; | |||
lev numeric; | |||
s text :=''; | |||
gg text :='geom4326'; | |||
BEGIN | |||
tpl := $$ | |||
SELECT cbits as gid_vbit, geom | |||
FROM osmc.decode_scientific_absolute_geoms_lixo1( | |||
natcod.parents_to_children_baseh(%1$s::real, %3$L::text[], 16, true, true)::text, | |||
%2$L, | |||
%4$s::int | |||
) t | |||
$$; | |||
RAISE NOTICE 'entrei...'; | |||
select array_agg(x::text) INTO oid_list | |||
FROM ( | |||
SELECT array_agg(cod_b16h)::text as x | |||
FROM ( | |||
select cod_b16h, row_number() over() ord | |||
from grid_br2.poc_caruaru_vw01logistic | |||
where length(gid_vbit)=27 | |||
) t1 | |||
GROUP BY ord/100 | |||
) t2; | |||
FOREACH cover_frag IN ARRAY oid_list LOOP | |||
s:=''; | |||
RAISE NOTICE 'Loop cover_frag... %s', cover_frag; | |||
FOR lev IN (select x from generate_series(p_lev0, p_lev_max, 2.5) t(x)) LOOP | |||
IF lev>p_lev0 THEN s := s || E'\n UNION ALL \n'; END IF; | |||
s := s || format(tpl, lev::text, p_contry, cover_frag, p_contry_base::text); | |||
END LOOP; -- lev | |||
s := s|| E'\n ORDER BY 1'; | |||
s := E'INSERT INTO grid_b2.tmp_cells \n' || s || E';\n COMMIT;'; | |||
RAISE NOTICE '.. RODANDO'; | |||
PERFORM s; | |||
s := ''; | |||
END LOOP; -- cover_frag | END LOOP; -- cover_frag | ||
RAISE NOTICE 'sai...'; | RAISE NOTICE 'sai...'; |
edições