Fórum Store Procedure #37324
10/07/2003
0
tenho um banco em Interbase 6 e estou tentando fazer uma store procedure. Nunca fiz uma antes.
Tenho uma tabela chamada CONTA_GERAL que tem informações das contas dos usuários. Tenho também uma tabela chamada CONTA_PRODUTO que tem informações sobre os produtos comprados em cada conta. Na CONTA_GERAL tenho um campo chamado VALOR_CON que é uma parte do valor da conta, porque uma conta também pode ter produto associado, que estará na tabela CONTA_PRODUTO. Na CONTA_PRODUTO tem-se o valor unitário de cada produto e a quantidade comprada. Portanto, o valor total de uma
conta é VALOR_CON da tabela CONTA_GERAL mais a soma de VALORUNITARIO_CONPRO * QTDE_CONPRO. Estou querendo fazer uma store procedure que calcule o valor total que um usuário está devendo.
Fiz o seguinte:
SET TERM ^ ;
CREATE PROCEDURE SP_TOTALPENDENTE (COD_USUARIO INTEGER) RETURNS (TOTALCOMPUTADOR FLOAT, TOTALADICIONAL FLOAT, TOTALPENDENTE FLOAT)
AS
BEGIN
TOTALCOMPUTADOR = 0;
TOTALADICIONAL = 0;
FOR
SELECT COD_CON, VALOR_CON - DESCONTO_CON
FROM CONTA_GERAL
WHERE PAGO_CON = 0
AND COD_USU = :COD_USUARIO
INTO :COD_CONTA, :VALOR
DO
BEGIN
IF (:VALOR IS NOT NULL) THEN
TOTALCOMPUTADOR = TOTALCOMPUTADOR + :VALOR;
FOR
SELECT VALORUNITARIO_CONPRO, QTDE_CONPRO
FROM CONTA_PRODUTO
WHERE COD_CON = :COD_CONTA
INTO :VALORUNITARIO, :QTDE
DO
BEGIN
IF (:VALORUNITARIO IS NOT NULL) THEN
TOTALADICIONAL = TOTALADICIONAL + (:VALORUNITARIO * :QTDE);
END
END
TOTALPENDENTE = TOTALCOMPUTADOR + TOTALADICIONAL;
SUSPEND;
END ^
SET TERM ; ^
Mas dá um erro: Column Unknown
O que tem de errado neste código?
[]´s
Cefernan
Curtir tópico
+ 0Posts
10/07/2003
Afarias
(SELECT SUM(VALORUNITARIO_CODPRO*QTDE_CODPRO) FROM CONTA_PROD
WHERE COD_CON=A.COD_CON) + A.VALOR_CON AS TOTAL
FROM CONTA_GERAL A WHERE A.COD_USU=:COD_USU
Gostei + 0
10/07/2003
Cefernan
obrigado pela ajuda, mas o seu código tem o seguinte problema: se conta_produto nao tiver nenhum registro relacionado com um cod_con específico o campo valor retorna NULL, o que não é o certo. Pois, neste caso, deveria retornar pelo menos o que tem no campo VALOR_CON. Deveria ter algum modo de o sum retornar 0 caso não tivesse nenhum registro com aquele COD_CON na tabela CONTA_PRODUTO.
[]´s
Gostei + 0
11/07/2003
Afarias
Se estiver usando FB 1.5 vc pode retornar 0 em vez de null com a função COALESCE, do contrário existem outros contronos...
...Más... vamos ao SP:
create procedure PR_VALOR_CONTAS (COD_USU integer)
returns (COD_CONTA integer, TOTAL float) as
declare variable SUB_TOTAL float;
begin
for select COD_CON, VALOR_CON from CONTA_PROD
where COD_USU = :COD_USU
into :COD_CONTA, :TOTAL do
begin
select SUM(VALORUNITARIO_CODPRO*QTDE_CODPRO) from CONTA_PROD
where COD_CON=:COD_CONTA into :SUB_TOTAL;
if (SUB_TOTAL IS NULL) then
SUB_TOTAL = 0;
TOTAL = TOTAL + SUB_TOTAL;
suspend;
end
end^
quanto ao Erro q vc estava tendo, (Column Unknown) vc só precisa verificar o nome dos campos e variáveis (parece q algum está incorreto)
Outra coisa são os ´:´ (dois-pontos) antes dos nomes das variáveis e parâmetros, vc só deve usá-los quando estiverem um um comando SQL (como o SELECT) em operações como IF, etc, não coloque os ´:´
Abraço
Gostei + 0
11/07/2003
Cefernan
[]´s
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)