Tempo aproximado para leitura: 00:01:20 min
Dúvida
Foi tentado rodar a função VOLUMEANEL no PIMS PI do GF não obteve sucesso, sendo necessário atualização de script no banco de dados para correto funcionamento da mesma. São um para buscar a medição do tanque de etanol, e outro para calcular volume do tanque de etanol.
Ambiente
TOTVS Agro - TOTVS Agro - Bioenergia - Controle de Processo Industrial - PRO - Versão 12.1.2412
Solução
Para resolução do erro, execute os passos abaixo:
1. Realizar a seguinte consulta:
select * from ALL_OBJECTS where OBJECT_NAME LIKE '%VOLUMEANEL%'
2. Caso não encontre valores para a consulta realizada acima, execute o script abaixo no banco de dados:
CREATE OR REPLACE NONEDITIONABLE FUNCTION VOLUMEANEL(cTanque IN CHAR, nAltura IN NUMBER )
RETURN NUMBER
IS
VOLUMEANEL NUMBER;
cEmp CHAR(3);
A_x NUMBER;
A_y NUMBER;
B_x NUMBER;
B_y NUMBER;
CURSOR cF
IS
SELECT TAN_VALOR
FROM PROANEISTANQUE
WHERE EMP_CODEMP = cEmp
AND TAN_CODIGO = cTanque
AND TAN_SEQ = nAltura;
rF cF%ROWTYPE;
CURSOR cA
IS
SELECT TAN_SEQ, TAN_VALOR FROM PROANEISTANQUE
WHERE EMP_CODEMP = cEmp
AND TAN_CODIGO = cTanque
AND TAN_SEQ = (SELECT MAX(TAN_SEQ) FROM PROANEISTANQUE
WHERE EMP_CODEMP = cEmp
AND TAN_CODIGO = cTanque
AND TAN_SEQ < nAltura);
rA cA%ROWTYPE;
CURSOR cB
IS
SELECT TAN_SEQ, TAN_VALOR FROM PROANEISTANQUE
WHERE EMP_CODEMP = cEmp
AND TAN_CODIGO = cTanque
AND TAN_SEQ = (SELECT MIN(TAN_SEQ) FROM PROANEISTANQUE
WHERE EMP_CODEMP = cEmp
AND TAN_CODIGO = cTanque
AND TAN_SEQ > nAltura);
rB cB%ROWTYPE;
BEGIN
IF fTipocalculo = 'C' THEN
SELECT emp_codemp
INTO cEmp
FROM procalculo
WHERE cal_ip = FIP
AND cal_tipo = 'C';
ELSE
SELECT emp_codemp
INTO cEmp
FROM proparent
WHERE par_ip = FIP;
END IF;
OPEN cF;
OPEN cA;
OPEN cB;
FETCH cF INTO rF;
FETCH cA INTO rA;
FETCH cB INTO rB;
IF NOT cF%NOTFOUND THEN
VOLUMEANEL := rF.TAN_VALOR;
ELSIF NOT (cA%NOTFOUND AND cB%NOTFOUND) THEN
A_x := rA.TAN_SEQ;
A_y := rA.TAN_VALOR;
B_x := rB.TAN_SEQ;
B_y := rB.TAN_VALOR;
VOLUMEANEL := ((B_y - A_y) / (B_x - A_x)) * nAltura + (A_y - ((B_y - A_y) / (B_x - A_x)) * A_x);
ELSE
VOLUMEANEL := 0;
END IF;
CLOSE cF;
CLOSE cA;
CLOSE cB;
RETURN VOLUMEANEL;
END;
0 Comentários