[英]PL/PgSQL function returns empty rows instead of rows with ids
I intend to log user ids by policy change in a temporary table. 我打算通过临时表中的策略更改来记录用户ID。 The following should return the logged ids, but it does return empty rows.
以下应返回记录的ID,但它确实返回空行。 Somehow the ids are lost :S The row count is okay, the ids are in the table, I don't know what I am doing wrong...
以某种方式丢失了ids:S行数没问题,ids在表中,我不知道我做错了什么...
BEGIN;
SELECT * FROM policy_change_update(ARRAY[1,2,3]);
SELECT * FROM user_read_all_by_policy_change();
COMMIT;
The functions: 功能:
policy_change_provide_store: policy_change_provide_store:
CREATE FUNCTION policy_change_provide_store ()
RETURNS VOID
AS
$BODY$
BEGIN
CREATE TEMPORARY TABLE policy_change (
user_id INT4
);
EXCEPTION WHEN duplicate_table THEN
RETURN;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
policy_change_update policy_change_update
CREATE FUNCTION policy_change_update (
IN user_ids INT4 []
)
RETURNS VOID
AS
$BODY$
BEGIN
PERFORM policy_change_provide_store();
INSERT INTO policy_change
SELECT inserted_user_id FROM unnest(user_ids) AS inserted_user_id
WHERE NOT EXISTS(SELECT 1 FROM policy_change WHERE user_id = inserted_user_id);
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
user_read_all_by_policy_change user_read_all_by_policy_change
CREATE FUNCTION user_read_all_by_policy_change ()
RETURNS TABLE (
user_id INT4
)
AS
$BODY$
BEGIN
PERFORM policy_change_provide_store();
RETURN QUERY
SELECT user_id FROM policy_change ORDER BY user_id DESC;
IF NOT FOUND THEN
RAISE SQLSTATE 'UE404' USING MESSAGE = 'not found';
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
Any idea? 任何想法?
The solution: 解决方案:
SELECT policy_change.user_id FROM policy_change ORDER BY policy_change.user_id DESC;
instead of 代替
SELECT user_id FROM policy_change ORDER BY user_id DESC;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.