Re: PL/pgSQL - Sytax Error near $1 ?

Поиск
Список
Период
Сортировка
От John DeSoi
Тема Re: PL/pgSQL - Sytax Error near $1 ?
Дата
Msg-id E41FC147-2148-4289-87DB-094239197B9E@pgedit.com
обсуждение исходный текст
Ответ на PL/pgSQL - Sytax Error near $1 ?  (Emre Bastuz <info@emre.de>)
Список pgsql-novice
On Oct 5, 2005, at 4:36 PM, Emre Bastuz wrote:

> CREATE OR REPLACE FUNCTION traffic_add (text, integer, text)
> RETURNS INT AS '
>  DECLARE
>   source_ip ALIAS FOR $1;
>   num_counter ALIAS FOR $2;
>   table_name ALIAS FOR $3;
>   logrec RECORD;
>  BEGIN
>   SELECT INTO logrec * FROM table_name WHERE sourceValue = source_ip;


It appears you are passing table_name as a parameter. You can't use
table_name like this (as a string) except as part of an EXECUTE
statement.

You might some useful hints in the example code included with pgEdit
(http://pgedit.com/download). The distribution includes an extensive
example for HTTP logging and analysis (see the examples/web folder).
Below is a function from the example that inserts an address in the
database by IP number or domain name.


John DeSoi, Ph.D.
http://pgedit.com/
Power Tools for PostgreSQL


-- Checks to see if the address is already in the database. If not a
new address is created.
-- Returns the database id of the existing or new address.
create or replace function web.address_dbid (addr_name text, addr_ip
inet)
returns integer as $$
declare
     d_name text;
     addr_dbid integer;
begin
     if addr_name is not null then
         d_name := lower(addr_name);
     end if;
     if d_name is null and addr_ip is null then
         raise exception 'the domain name or ip address must be
provided.';
     elsif d_name is not null and addr_ip is not null then
         select into addr_dbid dbid from web.address where
domain_name = d_name and ip = addr_ip;
     elsif d_name is not null then
         select into addr_dbid dbid from web.address where
domain_name = d_name;
     else
         select into addr_dbid dbid from web.address where ip = addr_ip;
     end if;
     if addr_dbid is null then
         insert into web.address (domain_name, ip) values (d_name,
addr_ip);
         addr_dbid := currval(pg_get_serial_sequence('web.address',
'dbid'));
     end if;
     return addr_dbid;
end;
$$ language plpgsql;

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

Предыдущее
От: "Derrick Betts"
Дата:
Сообщение: Re: PL/pgSQL - Sytax Error near $1 ?
Следующее
От: mike
Дата:
Сообщение: Re: contains function