use*_*561 2 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;
Run Code Online (Sandbox Code Playgroud)
我从教科书中复制了此内容,但我认为它不适用于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
);
Run Code Online (Sandbox Code Playgroud)
这样尝试
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;
Run Code Online (Sandbox Code Playgroud)
用法示例:
SELECT change_account_email('djohn@example.com', 'new@example.com');
Run Code Online (Sandbox Code Playgroud)
让我们尝试一下:
#INSERT INTO帐户VALUES(1,'John','Doe','djohn@example.com','*********');
插入0 1
#选择change_account_email('djohn@example.com','new@example.com');
change_account_email
----------------------
1个
(1列)
#SELECT * FROM帐户;
a_id | a_first_name | a_last_name | a_email | 密码
------ + -------------- + ------------- + -------------- --- + ------------
1 | 约翰| 美国能源部 new@example.com | *********
(1列)
这是SQLFiddle演示