Olá comunidade, tenho vários trechos de código em plsql que inserem valores em
vetores da forma abaixo [SQL 01]:
DECLARE
vetor_hora_max varchar[] = '{null}';
vetor_cargas real[][] := '{{null,null,null,null,null}}';
i=1
FOR tupla IN (SELECT id_limites_tensoes_subest, id_tensoes_subest, id_carga,
valor_inf, valor_recom, valor_sup FROM cmao."DTF_LIMITES_TENSOES_BARRA" ) LOOP
IF ( i = 1 ) THEN
vetor_cargas[i][1] =
tupla.id_limites_tensoes_subest;
vetor_cargas[i][2] = tupla.id_carga;
vetor_cargas[i][3] = tupla.valor_inf;
vetor_cargas[i][4] = tupla.valor_recom;
vetor_cargas[i][5] = tupla.valor_sup;
ELSE
vetor_cargas = vetor_cargas ||
ARRAY[[tupla.id_limites_tensoes_subest, tupla.id_carga,tupla.valor_inf,
tupla.valor_recom, tupla.valor_sup]];
END IF;--*/
i = i+1;
--vetor_cargas = vetor_cargas ||
ARRAY[[tupla.id_limites_tensoes_subest, tupla.id_carga,tupla.valor_inf,
tupla.valor_recom, tupla.valor_sup]];
vetor_ids_limites_tensoes_subest =
vetor_ids_limites_tensoes_subest || tupla.id_limites_tensoes_subest;
END LOOP;
Quando executo esse código, o vetor é preenchido corretamente. Exemplo:
vetor_cargas -
{{1,4,69.7,71,72.3},{2,3,68.7,70,71.3},{3,2,67.7,69,70.3},{4,1,67.7,69,70.3}}NOTICE:
vetor_hora_max - {23:59:50}
Gostaria de otimizar esse trecho de código para eliminar esse IF e ELSE - como
abaixo [SQL 02]:
FOR tupla IN (SELECT * FROM cmao."DTF_LIMITES_TENSOES_BARRA") LOOP
vetor_cargas = vetor_cargas ||
ARRAY[[tupla.id_limites_tensoes_subest, tupla.id_carga,tupla.valor_inf,
tupla.valor_recom, tupla.valor_sup]];
END LOOP;
O problema é quando executo como o [SQL 02], o primeiro elemento do vetor
sempre vem com NULL. Exemplo:
FOR rIN (SELECT * FROM cmao."DTF_LIMITES_TENSOES_BARRA" WHERE id_tensoes_subest
= record_dtf.id_tensoes_subest ORDER BY id_tensoes_subest,
id_limites_tensoes_subest) LOOP
vetor_cargas = vetor_cargas ||
ARRAY[[tupla.id_limites_tensoes_subest, tupla.id_carga,tupla.valor_inf,
tupla.valor_recom, tupla.valor_sup]];
END LOOP;
RAISE NOTICE 'vetor_cargas - %',vetor_cargas;
RAISE NOTICE 'vetor_hora_max - %',vetor_hora_max;
vetor_cargas -
{{NULL,NULL,NULL,NULL,NULL},{1,4,69.7,71,72.3},{2,3,68.7,70,71.3},{3,2,67.7,69,70.3},{4,1,67.7,69,70.3}}NOTICE:
vetor_hora_max - {NULL,23:59:50}
Esses vetores estão declarados da seguinte forma:
vetor_hora_max varchar[] = '{null}';
vetor_cargas real[][] := '{{null,null,null,null,null}}';
Quando altero a declaração desses vetores os seguintes erros abaixo são
disparados.
vetor_cargas real[][] := '{null}';
vetor_cargas real[][] := '{{}}';
ERROR: wrong number of array subscripts
ERROR: malformed array literal: "{{}}"
CONTEXT: PL/pgSQL function "fs_calcular_dtf_passo1" line 65 at block variables
initialization
Tem uma forma de otimizar esse código?. Agradeço desde já pela atenção de
todos. No aguardo on-line. Att.
Newton Teixeira do Nascimento Junior
e-mail: [email protected]
<html>
<body>
<font face = "arial" size = "1" color = "#000080">Aviso:<br>"O emitente desta
mensagem é responsável por seu conteúdo e
endereçamento. Cabe ao destinatário cuidar quanto ao tratamento
adequado. Sem a devida autorização, a divulgação, a
reprodução, a distribuição ou qualquer outra
ação em desconformidade com as normas internas da ELETRONORTE S/A
são proibidas e passíveis de sanção disciplinar,
cível e criminal. Esta mensagem pode ser monitorada".
</font>
</body>
</html>_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral