erro no INSERT em procedure

Firebird

26/06/2006

codigo:
SET TERM ^ ;

CREATE PROCEDURE INSERINDO (
    BANCO VARCHAR(30),
    TIPO VARCHAR(30),
    NRO_CHQ INTEGER,
    NRO_CARTAO INTEGER,
    ESTADO VARCHAR(30),
    VALOR VARCHAR(12),
    EMITIDO DATE,
    DEBITO DATE,
    OBS VARCHAR(50))
RETURNS (
    RETORNO VARCHAR(100),
    TOTAL VARCHAR(12))
AS
DECLARE VARIABLE VERIFICA VARCHAR(500);
BEGIN
    IF (:nro_cartao <> ´´) THEN
        SELECT CONTASID FROM CONTAS WHERE BANCO = :BANCO AND NRO_CARTAO = :nro_cartao INTO :verifica;
    ELSE
        SELECT CONTASID FROM CONTAS WHERE BANCO = :BANCO AND NRO_CHQ = :nro_chq INTO :verifica;

    if (VERIFICA IS NOT NULL) then
        RETORNO = ´EXISTE´;
    else
        EXECUTE STATEMENT
            ´INSERT INTO CONTAS VALUES(NULL,´
            || :BANCO || ´,´
            || :TIPO || ´,´
            || :NRO_CHQ|| ´,´
            || :NRO_CARTAO || ´,´
            || :ESTADO || ´,´
            || :VALOR || ´,´
            || :EMITIDO || ´,´
            || :DEBITO || ´,´
            || :OBS || ´)´;

    SELECT SUM(VALOR) FROM CONTAS WHERE ESTADO = ´A COMPENSAR´ INTO :TOTAL;
    SUSPEND;

    WHEN ANY do
    BEGIN
        RETORNO = ´spINSERINDO - ´ || SQLCODE;
        SUSPEND;
    END
END^
esta dando erro no comando insert:
spINSERINDO - -904

alguem pode me ajudar???


Mestre5

Mestre5

Curtidas 0

Respostas

Cabelo

Cabelo

26/06/2006

nem compila????


GOSTEI 0
Mestre5

Mestre5

26/06/2006

nem compila????
compila... na execução dah esse erro...


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

26/06/2006

altere o para:
SET TERM ^ ; 

CREATE PROCEDURE INSERINDO ( 
    BANCO VARCHAR(30), 
    TIPO VARCHAR(30), 
    NRO_CHQ INTEGER, 
    NRO_CARTAO INTEGER, 
    ESTADO VARCHAR(30), 
    VALOR VARCHAR(12), 
    EMITIDO DATE, 
    DEBITO DATE, 
    OBS VARCHAR(50)) 
RETURNS ( 
    RETORNO VARCHAR(100), 
    TOTAL VARCHAR(12)) 
AS 
DECLARE VARIABLE VERIFICA VARCHAR(500); 
BEGIN 
    IF (:nro_cartao <> ´´) THEN 
        SELECT CONTASID FROM CONTAS WHERE BANCO = :BANCO AND NRO_CARTAO = :nro_cartao INTO :verifica; 
    ELSE 
        SELECT CONTASID FROM CONTAS WHERE BANCO = :BANCO AND NRO_CHQ = :nro_chq INTO :verifica; 

    if (VERIFICA IS NOT NULL) then 
        RETORNO = ´EXISTE´; 
    else 
        INSERT INTO CONTAS VALUES(NULL,:BANCO,:TIPO,:NRO_CHQ,
                                  :NRO_CARTAO,:ESTADO,:VALOR,
                                  :EMITIDO,:DEBITO,:OBS);

    SELECT SUM(VALOR) FROM CONTAS WHERE ESTADO = ´A COMPENSAR´ INTO :TOTAL; 
    SUSPEND; 

    WHEN ANY do 
    BEGIN 
        RETORNO = ´spINSERINDO - ´ || SQLCODE; 
        SUSPEND; 
    END 
END^
creio que o EXECUTE STATEMENT não seja necessário nesse caso. mesmo porque, por conta dos campos varchar, a string deveria ser melhor trabalhada na concatenação das aspas.


GOSTEI 0
Mestre5

Mestre5

26/06/2006

    IF (:NRO_CARTAO > 0) THEN
        BEGIN
        RETORNO = ´CARTAO >´;
        FOR 
            SELECT CONTASID FROM CONTAS WHERE BANCO = :BANCO AND NRO_CARTAO = :NRO_CARTAO INTO :VERIFICA 
        DO
            BEGIN
            --BREAK;
            END
        END
    ELSE
        BEGIN
        RETORNO = ´CHEQUE >´;
        SELECT CONTASID FROM CONTAS WHERE BANCO = :BANCO AND NRO_CHQ = :NRO_CHQ INTO :VERIFICA;
        END

    IF (VERIFICA IS NOT NULL) THEN
        BEGIN
        RETORNO = ´REGISTRO JA EXISTE, CLIQUE EM ATUALIZAR...´;
        EXIT;
        END
    ELSE
        BEGIN
        CONTADOR = 0;
        RETORNO = RETORNO || ´ INSERE´;
        WHILE (:CONTADOR < :PARCELAS) DO
            BEGIN
            IF (:NRO_CHQ IS NOT NULL) THEN
                BEGIN
                INSERT INTO CONTAS VALUES (NULL, :BANCO, :TIPO, :NRO_CHQ, NULL, :ESTADO, :VALOR, :EMITIDO, :DEBITO, :OBS );
                NRO_CHQ = NRO_CHQ + 1;
                END
            ELSE
                BEGIN
                INSERT INTO CONTAS VALUES (NULL, :BANCO, :TIPO, NULL, :NRO_CARTAO, :ESTADO, :VALOR, :EMITIDO, :DEBITO, :OBS );
                NRO_CARTAO = NRO_CARTAO + 1;
                END

            CONTADOR = CONTADOR + 1;

            END
        END

    SELECT SUM(VALOR) FROM CONTAS WHERE ESTADO = ´A COMPENSAR´ INTO :TOTAL;
    SUSPEND;

    WHEN ANY do
    BEGIN
        RETORNO = RETORNO || ´ - spINSERINDO - COD: ´ || SQLCODE ;
        SUSPEND;
    END
agora tah dando o erro -625 (Validation error for column <string>, value ´<string>´)


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

26/06/2006

tente assim:
IF (coalesce(:NRO_CARTAO,0) > 0) THEN
BEGIN
  RETORNO = ´CARTAO >´;
  NRO_CHQ = NULL;
END
ELSE
BEGIN
  RETORNO = ´CHEQUE >´;
  NRO_CARTAO = NULL;
END

IF (EXISTS(SELECT CONTASID FROM CONTAS
           WHERE BANCO = :BANCO AND ((coalesce(:NRO_CARTAO,0) > 0) AND NRO_CARTAO = :NRO_CARTAO)
           OR ((coalesce(:NRO_CHQ,0) > 0) AND NRO_CHQ = :NRO_CHQ))) THEN
BEGIN
  RETORNO = RETORNO || ´ REGISTRO JA EXISTE, CLIQUE EM ATUALIZAR...´;
  EXIT;
END
ELSE
BEGIN
  CONTADOR = 0;
  RETORNO = RETORNO || ´ INSERE´;
  WHILE (:CONTADOR < :PARCELAS) DO
  BEGIN
    NRO_CHQ = NRO_CHQ + 1;
    NRO_CARTAO = NRO_CARTAO + 1;

    INSERT INTO CONTAS VALUES
      (NULL, :BANCO, :TIPO, :NRO_CHQ, :NRO_CARTAO, :ESTADO, :VALOR, :EMITIDO, :DEBITO, :OBS);

    CONTADOR = CONTADOR + 1;
  END
END

SELECT SUM(VALOR) FROM CONTAS WHERE ESTADO = ´A COMPENSAR´ INTO :TOTAL;
SUSPEND;

WHEN ANY DO
BEGIN
  RETORNO = RETORNO || ´ - spINSERINDO - COD: ´ || cast(SQLCODE as varchar(10));
  SUSPEND;
END



GOSTEI 0
POSTAR