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 &eacute; respons&aacute;vel por seu conte&uacute;do e 
endere&ccedil;amento. Cabe ao destinat&aacute;rio cuidar quanto ao tratamento 
adequado. Sem a devida autoriza&ccedil;&atilde;o, a divulga&ccedil;&atilde;o, a 
reprodu&ccedil;&atilde;o, a distribui&ccedil;&atilde;o ou qualquer outra 
a&ccedil;&atilde;o em desconformidade com as normas internas da ELETRONORTE S/A 
s&atilde;o proibidas e pass&iacute;veis de san&ccedil;&atilde;o disciplinar, 
c&iacute;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

Responder a