syntax error - Mailing list pgsql-bugs

From Roberto Castro
Subject syntax error
Date
Msg-id 20060417190121.14682.qmail@web32905.mail.mud.yahoo.com
Whole thread Raw
Responses Re: syntax error  (Euler Taveira de Oliveira <euler@timbira.com>)
List pgsql-bugs
Boa Tarde !!

Numa aplicação, de acordo com o btnbotton clicado, a variável ‘opçao’ receberá um valor. No decorrer do processo, de
acordocom a ‘opcao’ deverá executar um comando da function onde os valores a serem adicionados (input) serão supridos
naaplicação. 
Só que dá o seguinte erro:
ERROR:  syntax error at or near "$1" at character 36
QUERY:  insert into tb_conta_corrente (id, $1 , $2 , $3 , $4 , $5 , $6 , $7 , $8 , $9 , $10 , $11 , $12 , $13 , $14 ,
$15, $16 , $17 , $18 , $19 , $20 , $21 ) values ( $22 , $23 , $24 , $25 , $26 , $27 , $28 , $29 , $30 , $31 , $32 , $33
,$34 , $35 , $36 , $37 , $38 , $39 , $40 , $41 , $42 ) 
CONTEXT:  SQL statement in PL/PgSQL function "iud_tb_conta_corrente" near line 27

=== xxx ===
Syntax:

CREATE OR REPLACE FUNCTION iud_tb_conta_corrente(
    codemp integer,
    titulo integer,
    tipolanc char,
    placa varchar,
    referencia varchar,
    codgene varchar,
    bordero integer,
    codfor integer,
    chave varchar,
    dt_leilao date,
    dt_cadastro date,
    dt_pgto date,
    dt_baixa date,
    dt_envio date,
    dt_recbto date,
    tipomov char(1),
    valor numeric(18,2),
    tipo char,
    observacao varchar,
    usuario varchar,
    data_hora timestamp,
   opcao char) RETURNS varchar
AS $$
DECLARE
   vcodemp ALIAS FOR $1;
    vtitulo ALIAS FOR $2;
    vtipolanc ALIAS FOR $3;
    vplaca ALIAS FOR $4;
    vreferencia ALIAS FOR $5;
    vcodgene ALIAS FOR $6;
    vbordero ALIAS FOR $7;
    vcodfor ALIAS FOR $8;
    vchave ALIAS FOR $9;
    vdt_leilao ALIAS FOR $10;
    vdt_cadastro ALIAS FOR $11;
    vdt_pgto ALIAS FOR $12;
    vdt_baixa ALIAS FOR $13;
    vdt_envio ALIAS FOR $14;
    vdt_recbto ALIAS FOR $15;
    vtipomov ALIAS FOR $16;
    vvalor ALIAS FOR $17;
    vtipo ALIAS FOR $18;
    vobservacao ALIAS FOR $19;
    vusuario ALIAS FOR $20;
    vdata_hora ALIAS FOR $21;
    vopcao ALIAS FOR $22;
begin
if vopcao = 'I' then begin
     insert into tb_conta_corrente
(id,codemp,titulo,tipolanc,placa,referencia,codgene,bordero,codfor,chave,dt_leilao,dt_cadastro,dt_pgto,dt_baixa,dt_envio,dt_recbto,tipomov,valor,tipo,observacao,usuario,data_hora)
     values
(vcodemp,vtitulo,vtipolanc,vplaca,vreferencia,vcodgene,vbordero,vcodfor,vchave,vdt_leilao,vdt_cadastro,vdt_pgto,vdt_baixa,vdt_envio,vdt_recbto,vtipomov,vvalor,vtipo,vobservacao,vusuario,vdata_hora);
     RETURN 1;
  end if;
  if (opcao = 'U') then begin
     update tb_conta_corrente set codemp      = vcodemp,
                                  titulo      = vtitulo,
                                  tipolanc    = vtipolanc,
                                  placa       = vplaca,
                                  referencia  = vreferencia,
                                  codgene     = vcodgene,
                                  bordero     = vbordero,
                                  codfor      = vcodfor,
                                  chave       = vchave,
                                  dt_leilao   = vdt_leilao,
                                  dt_pgto     = vdt_pgto,
                                  dt_baixa    = vdt_baixa,
                                  dt_envio    = vdt_envio,
                                  dt_recbto   = vdt_recbto,
                                  tipomov     = vtipomov,
                                  valor       = vvalor,
                                  tipo        = vtipo,
                                  observacao  = vobservacao,
                                  usuario     = vusuario,
                                  data_hora   = vdata_hora
     where ( id = id and codemp       = vcodemp
                     and placa        = vplaca
                     and referencia   = vreferencia
                     and codgene      = vcodgene);
     RETURN 2;
  end if;
  if (opcao = 'A') then begin
     update tb_conta_corrente set codemp      = vcodemp,
                                  placa       = vplaca,
                                  referencia  = vreferencia,
                                  codgene     = vcodgene,
                                  bordero     = vbordero,
                                  codfor      = vcodfor,
                                  chave       = vchave,
                                  dt_pgto     = vdt_pgto,
                                  dt_baixa    = vdt_baixa,
                                  usuario     = vusuario,
                                  data_hora   = vdata_hora
     where ( id =id and codemp       = codemp
                     and placa       = placa
                     and referencia  = referencia
                     and codgene     = codgene
                     and dt_baixa is null);
     RETURN 3;
  end if;
  if (opcao = 'D') then begin
     delete from tb_conta_corrente
     where ( id = id and codemp        = codemp
                      and placa        = placa
                      and tipolanc     = tipolanc
                      and referencia   = referencia
                      and codgene      = codgene);
  RETURN 0;
  end if;
END $$
LANGUAGE 'plpgsql' VOLATILE ;

Se tiver uma idéia melhor... acatarei a sugestão..Uso Delphi 7. Estou migrando do Firebird p/ PostgreSql......
Apanhandomuito !!! 
 Posso add vc no meu msn??
Grato

Roberto Castro
Robertoc35br@yahoo.com.br





---------------------------------
 Abra sua conta no Yahoo! Mail - 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz.

pgsql-bugs by date:

Previous
From: "Peter Brant"
Date:
Subject: [Win32] Problem with rename()
Next
From: "Alvaro"
Date:
Subject: BUG #2399: Postgis DLL corrupted