[firebase-br] Problema com Execute Statement com Insert

Andrei Luís compuvale.software em gmail.com
Ter Maio 23 09:50:55 -03 2006


Graaaaaaande Kléber,

O troféu cata piolho, proposto pelo Luiz "RedDevil", vai pra ti.

Báh, eu juro que eu até pensei na dica que tu já tinha me dado antes
do duplo apostrofe, mas errei em sequer testar, pois pensei se
aplicava somente a strings... :-(

Quanto mais aprendo, mais me convenço que tenho muito a aprender ainda...

[]
Andrei

Em 23/05/06, Kléber Caneva<kdcc em terra.com.br> escreveu:
> Tente utilizando o duplo-apostrofe para a data tb.:
>
>   wSQL1 ='Insert into teste Values(0, ' || '''RF''' || ', ''' || wdataven
> || ''')';
>
> ou fazendo um Cast
>
>   wSQL1 ='Insert into teste Values(0, ' || '''RF''' || ', ''' || CAST(
> wdataven as CHAR(10)) || ''')';
>
>
> []´s
>
> Kléber Caneva
>
>
>
> ----- Original Message -----
> From: "Andrei Luís" <compuvale.software em gmail.com>
> To: "Firebase" <lista em firebase.com.br>
> Sent: Monday, May 22, 2006 11:52 PM
> Subject: [firebase-br] Problema com Execute Statement com Insert
>
>
> Continuo na minha via crucis pra fazer um insert via SP.
>
> Bem, a ideia é fazer um select em uma tabela para recuperar uns
> valores, entre eles diversas datas de vencimento e valores de faturas.
>
> O último problema que estou tendo é não conseguir fazer o insert de
> uma variável data em um campo data.
>
> Tabela de teste:
>
> CREATE GENERATOR GEN_TESTE_REGISTRO_ID;
>
> CREATE TABLE TESTE (
>    REGISTRO_ID  INTEGER,
>    TESTE        VARCHAR(250),
>    DATA         DATE
> );
>
> SET TERM ^ ;
>
> CREATE TRIGGER TESTE_BI FOR TESTE
> ACTIVE BEFORE INSERT POSITION 0
> AS
> BEGIN
>    NEW.REGISTRO_ID = GEN_ID(GEN_TESTE_REGISTRO_ID,1);
> END
> ^
>
> SET TERM ; ^
>
>
> A SP de teste:
>
> SET TERM ^ ;
>
> CREATE PROCEDURE NEW_PROCEDURE
> AS
> DECLARE VARIABLE WSQL1 VARCHAR(100);
> DECLARE VARIABLE WDATAVEN DATE;
> begin
>   wdataven = current_date;
>   wSQL1 ='Insert into teste Values(0, ' || '''RF''' || ', ' || wdataven ||
> ')';
>   execute statement wsql1;
> end
> ^
> SET TERM ; ^
>
> Joguei current_date apenas para teste, a variável wdataven será
> preenchida com uma data recuperada em um select.
>
> Ao executar, dá erro :
> Overflow occurred during data type conversion.
> conversion error from string "1979".
>
> Se troco o sql dessa forma:
> wSQL1 ='Insert into teste Values(0, ' || '''RF''' || ', wdataven' || ')';
>
> Ao executar dá erro de column unknow wDataven
>
> Se faço assim dá certo, mas não é current_date que preciso armazenar...
> wSQL1 ='Insert into teste Values(0, ' || '''RF''' || ', current_date' ||
> ')';
>
> Já tentei fazer cast( wdataven as Date) na linha onde monto o SQL e
> cast(current_date as Date) na linha onde atribuo o valor à variável, e
> o resultado é o mesmo.
>
> O mais "legal": se tiro o '''RF''' e coloco wdataven no lugar,
> funciona!!! Grava o mesmo 1979 que aparece em um dos erros acima.
>
> Onde estou errando? Porque não grava uma variável data em um campo
> data, e grava uma variável data em um campo varchar???
>
> []s
> Andrei




Mais detalhes sobre a lista de discussão lista