【发布时间】:2017-05-13 01:43:41
【问题描述】:
对于任何不返回行的 SQL 命令,例如
INSERT如果没有RETURNING子句,您可以在 PL/pgSQL函数只需编写命令即可。出现在命令文本中的任何 PL/pgSQL 变量名都被视为 一个参数,然后将变量的当前值提供为 运行时的参数值。
但是当我在查询中使用变量名时,我得到一个错误:
ERROR: syntax error at or near "email" LINE 16: ...d,email,password) values(identity_id,current_ts,''email'',''...
这是我的功能:
CREATE OR REPLACE FUNCTION app.create_identity(email varchar,passwd varchar)
RETURNS integer as $$
DECLARE
current_ts integer;
new_identity_id integer;
int_max integer;
int_min integer;
BEGIN
SELECT extract(epoch FROM now())::integer INTO current_ts;
int_min:=-2147483648;
int_max:= 2147483647;
LOOP
BEGIN
SELECT floor(int_min + (int_max - int_min + 1) * random()) INTO new_identity_id;
IF new_identity_id != 0 THEN
INSERT into app.identity(identity_id,date_inserted,email,password) values(identity_id,current_ts,''email'',''passwd'');
RETURN new_identity_id;
END IF;
EXCEPTION
WHEN unique_violation THEN
END;
END LOOP;
END;
$$ LANGUAGE plpgsql;
为什么当我在查询中使用变量时,Postgres 会抛出错误。这应该怎么写?
【问题讨论】:
标签: postgresql parameter-passing naming-conventions plpgsql quotes