Re: Plpgsql 9.1.3 : not accepting "open", "close" as column names

Поиск
Список
Период
Сортировка
От salah jubeh
Тема Re: Plpgsql 9.1.3 : not accepting "open", "close" as column names
Дата
Msg-id 1335120231.68766.YahooMailNeo@web161502.mail.bf1.yahoo.com
обсуждение исходный текст
Ответ на Plpgsql 9.1.3 : not accepting "open", "close" as column names  (fv967 <fv967@hotmail.com>)
Ответы Re: Plpgsql 9.1.3 : not accepting "open", "close" as column names
Список pgsql-general
Hello,

you need to use quotes because open and close are sql key words


row."open" 

row."close"
 
Regards
 


From: fv967 <fv967@hotmail.com>
To: pgsql-general@postgresql.org
Sent: Sunday, April 22, 2012 11:34 AM
Subject: [GENERAL] Plpgsql 9.1.3 : not accepting "open", "close" as column names

Hi ,

I have the following function which was working fine in Postgresql 8.4.7


CREATE OR REPLACE FUNCTION insert_stockpricemerge1(startdate character
varying, enddate character varying)
  RETURNS void AS
$BODY$
  DECLARE
    row RECORD;
BEGIN
    FOR row IN SELECT stockid, date, open, high, low, close, volume FROM
stockpriceretrieve AS r WHERE r.error IS NULL AND r.date BETWEEN
CAST(startdate AS date) AND CAST(enddate AS date) LOOP

      BEGIN
        INSERT INTO stockpricemerge (stockid, date, open, high, low, close,
volume, occurrence ) VALUES ( row.stockid, row.date, row.open , row.high,
row.low, row.close, row.volume, 1 );
        EXCEPTION
          WHEN unique_violation THEN
            UPDATE stockpricemerge SET occurrence = occurrence + 1
            WHERE stockpricemerge.stockid = row.stockid
            AND stockpricemerge.date = row.date
            AND stockpricemerge.open = row.open
            AND stockpricemerge.high = row.high
            AND stockpricemerge.low = row.low
            AND stockpricemerge.close = row.close
            AND stockpricemerge.volume = row.volume;
      END;
     
    END LOOP;
END; 


When this function is used in version 9.1.3, it gives the following error:



ERROR:  record "row" has no field "open"
LINE 1: ...ume, occurrence ) VALUES ( row.stockid, row.date, row.open ,...
                                                            ^
QUERY:  INSERT INTO stockpricemerge (stockid, date, open, high, low, close,
volume, occurrence ) VALUES ( row.stockid, row.date, row.open , row.high,
row.low, row.close, row.volume, 1 )
CONTEXT:  PL/pgSQL function "insert_stockpricemerge1" line 8 at SQL
statement

********** Error **********

ERROR: record "row" has no field "open"
SQL state: 42703
Context: PL/pgSQL function "insert_stockpricemerge1" line 8 at SQL statement



The function works fine when I replace row.open and row.close with an
integer value.
So, my conclusion is that column names "open" and "close" are causing
problems.

Any workaround for this problem ?

thanks,

Mark

--
View this message in context: http://postgresql.1045698.n5.nabble.com/Plpgsql-9-1-3-not-accepting-open-close-as-column-names-tp5657223p5657223.html
Sent from the PostgreSQL - general mailing list archive at Nabble.com.

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


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

Предыдущее
От: Adrian Klaver
Дата:
Сообщение: Re: Plpgsql 9.1.3 : not accepting "open", "close" as column names
Следующее
От: Devrim GÜNDÜZ
Дата:
Сообщение: Re: yum repo issue