3
我打算通過策略更改記錄用戶標識在臨時表中。以下應該返回記錄的ID,但它確實返回空行。不知怎麼的ID丟失:S中的行數是好的,該ID在該表中,我不知道我做錯了......PL/PgSQL函數返回的是空行而不是帶ID的行
BEGIN;
SELECT * FROM policy_change_update(ARRAY[1,2,3]);
SELECT * FROM user_read_all_by_policy_change();
COMMIT;
功能:
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
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
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;
任何想法?
(http://stackoverflow.com/questions/12166902/postgres-function-null-value- [相同的問題,因爲在這裏。] for-row-that-references-new)另請注意[在此處詳述的更高版本中的更改](http://stackoverflow.com/questions/7662731/set-a-default-return-value-for-a- postgres-function/7662787#7662787) –
Yepp,我猜這是初學者常見的錯誤... – inf3rno