a bug in plpgsql

Поиск
Список
Период
Сортировка
От Jaime Casanova
Тема a bug in plpgsql
Дата
Msg-id 20041104193714.25842.qmail@web50009.mail.yahoo.com
обсуждение исходный текст
Ответ на Re: could not find /usr/local/timezone  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: a bug in plpgsql  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-bugs
Hi guys,

i'm testing a v8.0beta4 in windows.

Welcome to psql 8.0.0beta4, the PostgreSQL interactive
terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

Warning: Console codepage (850) differs from windows
codepage (1252)
         8-bit characters will not work correctly. See
PostgreSQL
         documentation "Installation on Windows" for
details.

template1=# \c uescc
Ahora estß conectado a la base de datos "uescc".


***

This is a script i'm trying to run to replace an
existing function

**
-- begin script func.sql

BEGIN WORK;

DROP FUNCTION recaudaciones.rec_f_aperturarcaja(int2,
int2);

CREATE OR REPLACE FUNCTION
recaudaciones.rec_f_aperturarcaja(int2, int2)
  RETURNS void AS '
declare
    rs            rec_t_actividadcaja%ROWTYPE;
    rs_ctran    rec_t_transaccion%ROWTYPE;
    rs_dtran    rec_t_detalletransaccion%ROWTYPE;
    rs_ttran    rec_m_tipotransaccion%ROWTYPE;
    valor_ef    DECIMAL(9,2);
    valor_ch    DECIMAL(9,2);
begin
    SELECT INTO rs * FROM rec_t_actividadcaja
     WHERE ent_codigo        = $1
       AND caj_codigo        = $2
       AND acj_fechaapertura = current_date;

    IF rs.ent_codigo IS NOT NULL THEN
        RETURN;
    END IF;

    SELECT INTO rs * FROM rec_t_actividadcaja
     WHERE ent_codigo        = $1
       AND caj_codigo        = $2
    ORDER BY acj_fechaapertura DESC LIMIT 1;

    IF rs.ent_codigo IS NULL THEN
        valor_ef := 0;
        valor_ch := 0;
    ELSE
        valor_ef := rs.acj_valorefapertura;
        valor_ch := rs.acj_valorchapertura;

        FOR rs_ctran IN SELECT * FROM rec_t_transaccion
                          WHERE ent_codigo              =
rs.ent_codigo
                            AND caj_codigo              =
rs.caj_codigo
                              AND DATE(tra_fechaingreso) >=
rs.acj_fechaapertura
        LOOP

            SELECT INTO rs_ttran * FROM rec_m_tipotransaccion
             WHERE ent_codigo = rs_ctran.ent_codigo
               AND tra_codigo = rs_ctran.tra_codigo;

            FOR rs_dtran IN SELECT * FROM
rec_t_detalletransaccion
                              WHERE ent_codigo = rs_ctran.ent_codigo
                                  AND tra_anio   = rs_ctran.tra_anio
                                  AND tra_codigo = rs_ctran.tra_codigo
                                  AND tra_numero = rs_ctran.tra_numero
                                  AND fpg_codigo IN (''EF'', ''CH'')
            LOOP
                CASE rs_dtran.fpg_codigo
                    WHEN ''EF'' THEN
                        IF rs_ttran.tra_tipo = ''+'' THEN
                            valor_ef := valor_ef + rs_dtran.dtr_valor;
                        ELSE
                            valor_ef := valor_ef - rs_dtran.dtr_valor;
                        END IF;
                    WHEN ''CH'' THEN
                        IF rs_ttran.tra_tipo = ''+'' THEN
                            valor_ch := valor_ch + rs_dtran.dtr_valor;
                        ELSE
                            valor_ch := valor_ch - rs_dtran.dtr_valor;
                        END IF;
                END;
            END LOOP;
           END LOOP;
    END IF;

    INSERT INTO rec_t_actividadcaja
    VALUES ($1, $2, current_date, current_time, valor_ef,
valor_ch);

    RETURN;

end; '
  LANGUAGE 'plpgsql' VOLATILE;

COMMIT WORK;

-- end script func.sql

***

These are the answers from psql

***

uescc=# \i c:/func.sql
BEGIN
DROP FUNCTION
psql:c:/func.sql:77: ERROR:  syntax error at or near
"ELSE" en el carßcter 1720
psql:c:/func.sql:77: LINE 53:       ELSE
psql:c:/func.sql:77:                ^
ROLLBACK
uescc=#


***

but in that line there is a valid IF .. THEN .. ELSE
block.


is it a bug? or i'm totally wrong?

regards,
Jaime Casanova

_________________________________________________________
Do You Yahoo!?
Información de Estados Unidos y América Latina, en Yahoo! Noticias.
Visítanos en http://noticias.espanol.yahoo.com

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Concatenating strings within a function definition
Следующее
От: Tom Lane
Дата:
Сообщение: Re: a bug in plpgsql