【发布时间】:2015-11-11 05:35:52
【问题描述】:
好吧,我正在尝试创建一个简单的程序,检查用户是否具有此类登录名,如果没有,则在用户表中添加新行。但遇到了意想不到的问题。
CREATE OR REPLACE FUNCTION register_user(character varying, character varying, character varying,character varying,character varying)
RETURNS bigint AS
$BODY$
DECLARE
new_user_login ALIAS FOR $1;
new_user_password ALIAS FOR $2;
new_user_email ALIAS FOR $3;
new_user_first_name ALIAS FOR $4;
new_user_last_name ALIAS FOR $5;
login_exist bigint;
new_user_id bigint;
emails_array character varying array; --yep, it's array of emails
BEGIN
SELECT INTO login_exist count(login) FROM users WHERE users.login = new_user_login;
IF (login_exist = 0) THEN
SELECT array_append(emails_array, new_user_email);
INSERT INTO users (login,password,emails,first_name,last_name)
VALUES (new_user_login,new_user_password,emails_array,new_user_first_name,new_user_last_name)
RETURNING id INTO new_user_id;
RETURN new_user_id;
ELSE
RETURN 0;
END IF;
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
它在 SELECT INTO 上返回 sql-state: 42601。但是如果只有计数为 0。当登录存在时,它正确返回 0; 问题是什么?我什至不知道这是什么。 谢谢帮忙;
【问题讨论】:
-
对于 plpgsql 构造不应该是
SELECT <columns> INTO <variables>...吗?你确定它有时会起作用吗? -
您需要提供您的 Postgres 版本。
标签: postgresql plpgsql