GARANTIR DESCONTO

Fórum Stored Procedures com while #47716

26/10/2004

0

Ola pessoal
Estou com um problema em uma SP , pois faça nesta algumas atualizaçãoes e inserts no banco de dados.

Porem preciso fazer um Loop (while ) em uma tabela para que a mesma possa ser atualiuzada (registros filhos).

estou enviando o que fiz o bloco que esta entre /* */ não esta funcionando, om restante esta tudo ok
Se alguem puder me ajudar ficarei muito grato...

[color=blue:97d15388b1]
SET TERM ^;
CREATE OR ALTER PROCEDURE SP_DEVOLUCAO_UPDATE_INSERT
(
pCODLOC INTEGER,
pCODCLI INTEGER,
pSALDO NUMERIC(15, 2),
pTICKET NUMERIC(15, 2),
pDATALOCACAO DATE,
pDIAS INTEGER,
pVLRPAGO NUMERIC(15, 2),
pVLRLOC NUMERIC(15, 2),
pVLRREC NUMERIC(15, 2),
pVLRACRES NUMERIC(15, 2),
pOBS BLOB SUB_TYPE 0,
pDOCUMENTO VARCHAR(8),
pSITUACAO INTEGER
)
AS
DECLARE VARIABLE pCODFILME INTEGER;
BEGIN
/* UPDATE PEDIDOS */
UPDATE PEDIDOS SET
DATA_PAGAMENTO =´NOW´,
PED_FECHADO =´S´,
VLR_PAGO =:pVLRPAGO
WHERE (COD_LOC =:pCODLOC);

/* UPDATE PEDIDOS ITENS */
SELECT
COD_LOC,
COD_FILME
FROM PEDIDOS_ITENS
WHERE COD_LOC =:pCODLOC

/* WHILE NOT (PEDIDOS_ITENS.EOF) DO
BEGIN
pCODFILME := COD_FILME
UPDATE Pedidos_Itens SET -- PEDIDOS ITENS
DEVOLVIDO = ´S´,
DATA_DEVOL = ´NOW´
WHERE Cod_Loc =:pCODLOC and
Cod_Filme =:pCODFILME

UPDATE FILMES SET -- FILMES
LOCADO_S_N = ´N´
WHERE COD_FILME =:pCODFILME

NEXT;
END */

/* UPDATE CLIENTES */
UPDATE CLIENTES SET
Saldo_Cli_Neg =:pSALDO,
Saldo_Cli_Pos =:pTICKET
WHERE (COD_CLIENTE =:pCODCLI);

/* UPDATE CONTAS_RECEBER */
UPDATE CONTAS_RECEBER SET
HISTORICO =´Locação / Finalizada´,
ACRESCIMOS =:pVLRACRES,
DESCONTO =0,
DATA_RECEBIMENTO =´NOW´,
DATA_HORA_RC =´NOW´,
VLR_RECEBIDO =:pVLRREC,
VLR_A_RECEBER =0,
RECE_SITUACAO =:pSITUACAO
WHERE (NRO_DOCUMENTO =:pDOCUMENTO) AND
(RECE_SITUACAO =:pSITUACAO);

/* INSERT DEVOLUCOES */
INSERT INTO DEVOLUCOES
(
COD_DEV,
COD_LOC,
COD_CLIENTE,
DATA_LOCACAO,
DATA_DEVOL,
DIAS_ATRASO,
VLR_LOC,
VLR_TICKET,
VLR_PAGO,
FILMES_OBS
)
VALUES
(GEN_ID(GEN_DEVOLUCAO_ID,1),
:pCODLOC,
:pCODCLI,
:pDATALOCACAO,
´NOW´,
:pDIAS,
:pVLRLOC,
:pTICKET,
:pVLRPAGO,
:pOBS
);

END ^
SET TERM; ^
COMMIT WORK;[/color:97d15388b1]


Alexrol

Alexrol

Responder

Posts

26/10/2004

Afarias

Para iteragir nos registros de uma tabela vc deve usar o FOR SELECT, ex:

FOR COD_FILME SELECT FROM PEDIDOS_ITENS
INTO :pCODFILME DO
BEGIN
UPDATE Pedidos_Itens SET
DEVOLVIDO = ´S´,
DATA_DEVOL = ´NOW´
WHERE Cod_Loc =:pCODLOC and
Cod_Filme =:pCODFILME

UPDATE FILMES SET LOCADO_S_N = ´N´
WHERE COD_FILME =:pCODFILME
end


T+


Responder

Gostei + 0

26/10/2004

Alexrol

Muito Obrigado afarias...
Consegui executar no firebird ....


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar