【问题标题】:Trying to create an Insert function尝试创建插入函数
【发布时间】:2011-03-12 04:51:13
【问题描述】:

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

【问题讨论】:

    标签: function postgresql pgadmin


    【解决方案1】:

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

    【讨论】:

    • 如果表 person 有一个名为 fid 的标识字段,我想返回 fid 我使用 INSERT INTO person (firstName) VALUES (fname) RETURNING fid; 怎么办?
    • 如何返回插入的默认结果(例如插入X条记录)?
    • 最好让用户知道函数是成功还是失败,然后返回有意义的东西
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      • 2015-07-22
      • 2021-05-30
      • 1970-01-01
      相关资源
      最近更新 更多