Попытка создать функцию вставки - PullRequest
4 голосов
/ 12 марта 2011

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

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 в VALUES (fname) не является столбцом. Я пришел от написания sprocs и функций в MySQL и Sql Server. Любая помощь о том, почему это не работает, или что я делаю неправильно?

Ответы [ 2 ]

8 голосов
/ 14 марта 2011

Если вам не нравится использование пронумерованных параметров, вы можете использовать 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 также даст вам язык, более похожий на SQL ServerT-SQL.PL / PGSQL имеет управляющие структуры, переменные и все такое забавное.Реализация языка SQL в PostgreSQL гораздо более строга в отношении того, какие функции доступны - это отличная реализация SQL, но это язык запросов, а не процедурный язык программирования.

6 голосов
/ 12 марта 2011

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

...