adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Seg Set 22, 2014 3:43 pm Assunto: Multiple rows in singleton select {Resolvido} |
|
|
Pessoal estou com problema nesta trigger firebird 1.5 e não consigo resolver
O erro Multiple rows in singleton select
| Código: | CREATE OR ALTER TRIGGER VENDAS_PAGAMENTO_BI FOR VENDAS_PAGAMENTO
ACTIVE AFTER INSERT POSITION 0
AS
DECLARE VARIABLE QUITACAO_PROGRAMADA VARCHAR(3);
DECLARE VARIABLE CENTRO_CUSTOS VARCHAR(38);
DECLARE VARIABLE CENTRO_CUSTOS_REDUZIDO INTEGER;
DECLARE VARIABLE CODIGO_CONTA_CORRENTE INTEGER;
DECLARE VARIABLE DESCRICAO VARCHAR(70);
DECLARE VARIABLE FINALIZADORA VARCHAR(20);
DECLARE VARIABLE BLOQUEAR_PAGAMENTO VARCHAR(3);
DECLARE VARIABLE CODIGO_USUARIO INTEGER;
DECLARE VARIABLE DINHEIRO_SISTEMA Decimal(18,2);
DECLARE VARIABLE LANCA_TAXA_CONTA VARCHAR(3);
DECLARE VARIABLE TAXA_CENTRO_CUSTOS VARCHAR(38);
DECLARE VARIABLE TAXA_CENTRO_CUSTOS_REDUZIDO INTEGER;
DECLARE VARIABLE TAXA_TIPO_CONTA VARCHAR(1);
DECLARE VARIABLE TAXA FLOAT;
DECLARE VARIABLE NOME_CLIENTE VARCHAR(150);
DECLARE VARIABLE CODIGO_TEMP INTEGER;
DECLARE VARIABLE COD_CLIENTE INTEGER;
BEGIN
/* Recupera informações da forma de pagamento */
SELECT DESCRICAO,
BLOQUEAR_PAGAMENTO,
CENTRO_CUSTOS,
CENTRO_CUSTOS_REDUZIDO,
CONTA_CORRENTE,
FINALIZADORA,
QUITACAO_PROGRAMADA,
LANCA_TAXA_CONTA,
TAXA_CENTRO_CUSTOS,
TAXA_CENTRO_CUSTOS_REDUZIDO,
TAXA_TIPO_CONTA,
TAXA_ADMINISTRATIVA
FROM FORMAS_PAGAMENTO
WHERE CODIGO = NEW.FORMA_PAGAMENTO
INTO :DESCRICAO,
:BLOQUEAR_PAGAMENTO,
:CENTRO_CUSTOS,
:CENTRO_CUSTOS_REDUZIDO,
:CODIGO_CONTA_CORRENTE,
:FINALIZADORA,
:QUITACAO_PROGRAMADA,
:LANCA_TAXA_CONTA,
:TAXA_CENTRO_CUSTOS,
:TAXA_CENTRO_CUSTOS_REDUZIDO,
:TAXA_TIPO_CONTA,
:TAXA;
IF ( QUITACAO_PROGRAMADA IS NULL ) THEN
QUITACAO_PROGRAMADA = 'Não';
/* Realiza o lançamento no Contas a Receber */
UPDATE VENDAS_PAGAMENTO
SET BLOQUEIA_PAGAMENTO = :BLOQUEAR_PAGAMENTO
WHERE CODIGO = NEW.CODIGO AND
CODIGO_PAGAMENTO = NEW.CODIGO_PAGAMENTO;
SELECT ( CAST( C.CODIGO AS VARCHAR(10) ) || ' - ' || C.NOME ),
C.CODIGO
FROM CLIENTES C, VENDAS V
WHERE V.CODIGO_CLIENTE = C.CODIGO AND
V.CODIGO = NEW.CODIGO
INTO :NOME_CLIENTE,
:COD_CLIENTE;
/* o Tamanho deve ser no máximo 49, por isto se usa ajusta nome */
NOME_CLIENTE = udf_ajustanome( NOME_CLIENTE, 49 );
/* cria a conta caso haja uma taxa administrativa */
IF ((TAXA_CENTRO_CUSTOS is not NULL) and (LANCA_TAXA_CONTA = 'Sim')) THEN
BEGIN
CODIGO_TEMP = GEN_ID( GEN_CODIGO_CONTAS, 1 );
INSERT INTO CONTAS
( CODIGO,
LANCAMENTO,
DESCRICAO,
CENTRO_CUSTOS,
CENTRO_CUSTOS_REDUZIDO,
CONTA_CORRENTE,
VALOR,
TIPO_CONTA,
DATA_VENCIMENTO,
DATA_QUITACAO,
TIPO,
FINALIZADORA,
QUITACAO_PROGRAMADA,
PROVENIENTE,
VENDAS )
VALUES
( :CODIGO_TEMP,
CURRENT_TIMESTAMP,
'Taxa Administrativa da Venda ' || NEW.CODIGO,
:TAXA_CENTRO_CUSTOS,
:TAXA_CENTRO_CUSTOS_REDUZIDO,
:CODIGO_CONTA_CORRENTE,
NEW.VALOR_PARCELA * (:TAXA / 100),
:TAXA_TIPO_CONTA,
NEW.DATA_VENCIMENTO,
NEW.DATA_QUITACAO,
NEW.TIPO,
:FINALIZADORA,
:QUITACAO_PROGRAMADA,
:NOME_CLIENTE,
NEW.CODIGO );
UPDATE VENDAS_PAGAMENTO
SET CONTA_TAXA_ADMINISTRATIVA = :CODIGO_TEMP
WHERE CODIGO = NEW.CODIGO AND
CODIGO_PAGAMENTO = NEW.CODIGO_PAGAMENTO;
END
/* Realiza a insercao no contas, somente em caso de venda. */
INSERT INTO CONTAS
( CODIGO,
LANCAMENTO,
CENTRO_CUSTOS,
CENTRO_CUSTOS_REDUZIDO,
CONTA_CORRENTE,
N_DOCUMENTO,
NOME_CONTA_BANCO,
NOME_BANCO,
VALOR,
TIPO_CONTA,
DATA_VENCIMENTO,
DATA_QUITACAO,
DESCRICAO,
VENDAS,
VENDAS_PAGAMENTO,
CODIGO_CLIENTE,
TIPO,
FINALIZADORA,
QUITACAO_PROGRAMADA,
PROVENIENTE,
CODIGO_CONTA_TAXA
)
VALUES
( GEN_ID( GEN_CODIGO_CONTAS, 1 ),
NEW.DATA_LANCAMENTO,
:CENTRO_CUSTOS,
:CENTRO_CUSTOS_REDUZIDO,
:CODIGO_CONTA_CORRENTE,
NEW.N_DOCUMENTO,
NEW.NOME_CONTA_BANCO,
NEW.NOME_BANCO,
NEW.VALOR_PARCELA,
'+',
NEW.DATA_VENCIMENTO,
NEW.DATA_QUITACAO,
:DESCRICAO,
NEW.CODIGO,
NEW.CODIGO_PAGAMENTO,
:COD_CLIENTE,
NEW.TIPO,
:FINALIZADORA,
:QUITACAO_PROGRAMADA,
:NOME_CLIENTE,
:CODIGO_TEMP
);
IF (NEW.TIPO IS NULL) THEN
BEGIN
/* Realiza o Movimento de Caixa. Esse é o único local aonde se faz a
movimentação diretamente na tabela CAIXA. Essa movimentação é apenas
para a FINALIZADORA Dinheiro, pois as outras FINALIZADORAS são totalizadas
calculando os registros da tabela VENDAS_PAGAMENTO. */
SELECT CODIGO_USUARIO
FROM VENDAS
WHERE CODIGO = NEW.CODIGO
INTO :CODIGO_USUARIO;
SELECT DINHEIRO_SISTEMA
FROM CAIXA
WHERE CODIGO_USUARIO = :CODIGO_USUARIO AND
ABERTO = 'Sim'
INTO :DINHEIRO_SISTEMA;
IF ( ( NEW.NUMERO_PARCELA IN (0, 1) ) AND ( FINALIZADORA = 'Dinheiro' ) ) THEN
BEGIN
DINHEIRO_SISTEMA = DINHEIRO_SISTEMA + NEW.VALOR_TOTAL;
UPDATE CAIXA
SET DINHEIRO_SISTEMA = :DINHEIRO_SISTEMA
WHERE CODIGO_USUARIO = :CODIGO_USUARIO AND
ABERTO = 'Sim';
END
END
END |
Alguém tem alguma dica de como resolver?
Obrigado. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Editado pela última vez por adriano_servitec em Ter Set 23, 2014 10:29 am, num total de 1 vez |
|