我正在尝试使用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和函数。任何帮助,为什么这不起作用,或我做错了什么?
答案 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。