我正在PostgreSQL中创建一个存储过程,但是在“UPDATE”或附近我收到错误'语法错误'

时间:2013-12-11 04:02:12

标签: sql postgresql stored-procedures


我正在创建一个更改电子邮件地址的存储过程,但我一直收到错误。

错误:“UPDATE”或附近的语法错误

CREATE FUNCTION change(
IN oldAddr VARCHAR(50),
IN newAddr VARCHAR(50)
) AS
UPDATE accounts
SET a_email = newAddr
WHERE a_email = oldAddr;

我从教科书中复制了这个,但我认为它不适用于PostgreSQL 请教我如何纠正它! 谢谢!

CREATE TABLE accounts (
a_id int NOT NULL PRIMARY KEY,
a_first_name varchar(25) NOT NULL,
a_last_name varchar(25) NOT NULL,
a_email varchar(50) NOT NULL,
a_password varchar(16) NOT NULL
);

1 个答案:

答案 0 :(得分:4)

以这种方式试试

CREATE OR REPLACE FUNCTION change_account_email(
  IN oldAddr VARCHAR(50),
  IN newAddr VARCHAR(50))
RETURNS INTEGER AS 
$$
DECLARE
  rcount INTEGER DEFAULT 0;
BEGIN
  UPDATE accounts
     SET a_email = newAddr
   WHERE a_email = oldAddr;
   GET DIAGNOSTICS rcount = ROW_COUNT;
   RETURN rcount;
END;
$$
LANGUAGE plpgsql;

样本用法:

SELECT change_account_email('djohn@example.com', 'new@example.com');

我们试一试:

# INSERT INTO accounts VALUES(1, 'John', 'Doe', 'djohn@example.com', '*********');
INSERT 0 1

# SELECT change_account_email('djohn@example.com', 'new@example.com');
 change_account_email 
----------------------
                    1
(1 row)

# SELECT * FROM accounts;
 a_id | a_first_name | a_last_name |     a_email     | a_password 
------+--------------+-------------+-----------------+------------
    1 | John         | Doe         | new@example.com | *********
(1 row)

这是 SQLFiddle 演示