2011-03-12 5 views
3

Я пытаюсь создать функцию в Postgres 8.4, используя pgAdmin и у меня есть следующий кодПопытка создать функцию Insert

CREATE OR REPLACE FUNCTION spcwriteperson(IN fname varchar(20)) 
    RETURNS VOID AS 
$BODY$ 
    INSERT INTO person ("firstName") VALUES(fname); 
$BODY$ 
    LANGUAGE sql VOLATILE 
    COST 100; 

, когда я пытаюсь запустить это, он жалуется, что FName на ЗНАЧЕНИЯ (Fname) не является столбцом. Я прихожу от написания sprocs и функций в MySQL и Sql Server. Любая помощь в том, почему это не работает, или что я делаю неправильно?

ответ

7

Если вам не нравится с помощью пронумерованных параметров, вы можете использовать PL/PGSQL:

CREATE OR REPLACE FUNCTION spcwriteperson(fname varchar(20)) RETURNS VOID AS 
$$ 
BEGIN 
    INSERT INTO person (firstName) VALUES (fname); 
END 
$$ 
    LANGUAGE 'plpgsql'; 

PL/PGSQL также даст вам язык больше похож на T-SQL в SQL Server. PL/PGSQL имеет структуры управления, переменные и все эти забавные вещи. Реализация языка SQL PostgreSQL гораздо более строгая в отношении того, какая функциональность доступна - это отличная реализация SQL, но это язык запросов, а не процедурный язык программирования.

+1

что если таблица 'person' имеет поле идентификации, называемое' fid', так что я хочу вернуть 'fid', я использую' INSERT INTO person (firstName) VALUES (fname) RETURNING fid; '? –

+0

Как вы можете вернуть результаты по умолчанию вставки (например, вставлены X)? –

6

Параметры функций языка SQL нумеруются, $1, $2 и так далее. См. the documentation. Вы можете использовать pgSQL, если вам нужны именованные параметры и более сложные возможности.

Смежные вопросы