试图创建一个插入函数

时间:2011-03-12 04:51:13

标签: function postgresql pgadmin

我正在尝试使用pgAdmin在Postgres 8.4中创建一个函数,我有以下代码

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;

当我尝试运行它时,它抱怨VALUES(fname)的fname不是列。我来自于在MySQL和Sql Server中编写sprocs和函数。任何帮助,为什么这不起作用,或我做错了什么?

2 个答案:

答案 0 :(得分:8)

如果您不喜欢使用编号参数,可以使用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 Server的T-SQL的语言。 PL / PGSQL具有控制结构,变量和所有有趣的东西。 PostgreSQL的SQL语言实现对可用的功能要严格得多 - 它是SQL的一个很好的实现,但它是一种查询语言,而不是一种过程编程语言。

答案 1 :(得分:6)

SQL语言函数的参数已编号,$1$2等。有关详细信息,请参阅the documentation。如果您想要命名参数和更高级的功能,可以使用pgSQL