问题描述
我有一个 UserRole
表,用于存储分配给用户的所有角色。我有两个单独的 Postgres 函数用于创建和更新角色:
saveRole(boolean,jsonb)
updateRole(boolean,jsonb)
现在我必须编写一个函数来根据以下用例更新 UserRole
表:
All PrevIoUs Roles Deleted
Few Roles Deleted/Added
如果添加了任何新角色,则还应使用 Role
函数将其添加到 saveRole(boolean,jsonb)
表中。如果更新了任何角色,则它应该使用 updateRole(boolean,jsonb)
函数。
这是我编写的函数,但不知何故在此函数以及 saveRole / updateRole 函数中定义的 INSERT 语句无法正常工作。
BEGIN
v_userRoleId := 1;
v_userRoles JSONB;
v_prevRoleId NUMERIC;
v_roleId NUMERIC;
SELECT To_Role FROM User_Role WHERE ID = v_userRoleId INTO v_prevRoleId;
RAISE NOTICE 'v_prevRoleId --> %',v_prevRoleId;
IF (v_userRoles -> 'assignedRoles' != 'null')
THEN
IF (v_prevRoleId IS NOT NULL)
THEN
RAISE NOTICE 'v_prevRoleId IS NOT NULL ';
SELECT * FROM updateRole(false,v_userRoles -> 'assignedRoles') INTO v_roleId;
RAISE NOTICE 'v_roleId --> %',v_roleId;
ELSE
RAISE NOTICE 'v_prevRoleId IS NULL ';
SELECT * FROM saveRole(true,v_roleId;
END IF;
ELSE
RAISE NOTICE 'No Role Selected';
v_roleId = NULL;
IF (v_prevRoleId IS NOT NULL)
THEN
RAISE NOTICE 'DELETING PrevIoUs ROLE from Role Table';
DELETE FROM ROLE WHERE id = v_prevRoleId;
END IF;
END IF;
IF (v_roleId IS NOT NULL)
THEN
IF (v_roleId IS disTINCT FROM v_prevRoleId)
THEN
IF (v_prevRoleId IS NOT NULL)
THEN
RAISE NOTICE 'v_prevRoleId IS NOT NULL => DELETING v_prevRoleId If any';
DELETE FROM User_Role WHERE To_Role = v_prevRoleId AND ID = v_userRoleId;
END IF;
RAISE NOTICE 'v_roleId IS NOT NULL => INSERTING v_roleId';
INSERT INTO User_Role (ID,To_Role,To_User) VALUES (NEXTVAL('User_Role_Seq'),v_roleId,1);
RAISE NOTICE 'A New Role is INSERTED with ID --> %',v_roleId;
END IF;
ELSE
RAISE NOTICE 'v_roleId IS NULL => DELETING v_roleId If any';
DELETE FROM User_Role WHERE ID = v_userRoleId;
END IF;
END;
$$ language plpgsql;
现在忽略此语句。还有 saveRole
函数中定义的 INSERT 语句。
INSERT INTO User_Role (ID,1);
我在这里遗漏了 committing the transaction
之类的东西,还是有更好的方法来执行此操作?
输入 JSONB:
{
"id": "1","assignedRoles": {
"system": false,"default": false,"roles": [
{
"id": "10","name": "Create STAFF","type": "0","created_date": "2020-10-24","modified_date": "2020-10-24"
},{
"id": "11","name": "DELETE STAFF","modified_date": "2020-10-24"
}
]
},"userId": "1"
}
任何帮助将不胜感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)