gpt4 book ai didi

oracle - 更新加入权限不足

转载 作者:行者123 更新时间:2023-12-01 04:08:39 26 4
gpt4 key购买 nike

场景:我们为经理批准的请求生成记录。在挂起时,经理会发生变化(从 HR 提要中更新一夜)。我们需要更新请求以指示新经理。

这是应该执行此操作的查询的缩写版本:

update (select grw.approver_user_id, gup.supervisor_id
from gs3.user_role gur
join gsu.user_profile gup
on gur.user_id = gup.user_id
join gs3.request_workflow grw
on gur.user_role_id = grw.user_role_id
and gup.supervisor_id != grw.approver_user_id -- records with new mgr
where grw.auth_status_cd = 'SUBMITTED') -- reapprovals currently open
set grw.approver_id = gup.supervisor_id;

问题:执行此查询的帐户只有 gsu.user_profile 的读取权限.

内部选择工作正常并返回我需要更新的所有行...但即使我没有更新 gup.supervisor_id ,看来我需要对该表具有写访问权限。如果我以对 gsu.user_profile 具有写访问权限的用户身份执行此操作,更新成功。

这有什么合乎逻辑的原因吗?我宁愿不向不需要的帐户授予权限。

谢谢!

更新

接受 Thomas 的回答...虽然它并没有真正回答我的问题,即为什么执行更新连接的帐户需要对它未更新的表具有更新权限,但我可以看到说“不要使用更新连接,它们不是 ISO 标准”。

很遗憾,因为我所拥有的与 Thomas 的建议之间的区别在于我的没有任何嵌套选择。如果有人知道在没有嵌套选择的情况下进行这样的查询的 ISO 标准方式,我很想知道!

谢谢,托马斯!

最佳答案

尝试使用 ISO 批准的更新语句格式,看看是否有效。 ISO 没有规定在更新语句中直接使用 Join。相反,您只能通过子查询使用连接。

此外,这可能说明您的原始 Update 语句中存在一些问题,例如,用于设置 approver_id 的子查询。返回多于一行,这显然会导致异常,您需要确定如何找到应该为每一行设置的唯一一个 supervisor_id。

Update gs3.request_workflow
Set approver_id = (
Select gup.supervisor_id
From gs3.user_role As gur
Join gsu.user_profile As gup
On gur.user_id = gup.user_id
Where gup.user_role_id = gs3.request_workflow.user_role_id
And gup.supervisor_id != grw.approver_user_id
)
Where auth_status_cd = 'SUBMITTED'
And Exists (
Select 1
From gs3.user_role As gur
Join gsu.user_profile As gup
On gur.user_id = gup.user_id
Where gup.user_role_id = gs3.request_workflow.user_role_id
And gup.supervisor_id != grw.approver_user_id
)

关于oracle - 更新加入权限不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7688931/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com