我正在创建一个更改电子邮件地址的存储过程,但我一直收到错误。
错误:“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
);
答案 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 演示