10

我正在尝试使用 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 中编写存储过程和函数。关于为什么这不起作用或我做错了什么的任何帮助?

4

2 回答 2

13

如果你不喜欢使用编号参数,你可以使用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 的一个很好的实现,但它是一种查询语言,而不是过程编程语言。

于 2011-03-13T22:04:22.123 回答
7

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

于 2011-03-12T05:15:45.747 回答