更新和 SELECT

UPDATE and SELECT

为什么我需要 SELECT 特权:

UPDATE Sailors S SET 
S.rating = S.rating - 1

虽然此查询不需要它:

 UPDATE Sailors S
 SET S.rating = 8

首先,您实际上是在设置 S.rating = SELECT S.rating - 1 FROM Sailors S

第二个你只是设置 S.rating = 一个值 (8)

您似乎在第一个查询(第二个 S.rating)中从 S 读取数据,而在第二个查询中您只是将数据写入 S。要读取数据,您需要 SELECT权限。

首先 'S.rating -1' 这对 Oracle 来说是未知的,Oracle 引擎通过别名 S(在你的例子中是它的水手)去 table 引用并且
a) 从中查询评级并
b)然后从中减去1

对于 a 点,它需要 select 权限。

你选择的是第一个

= S.rating - 1

第二个你没有选择

= 8

sp_table_privileges

SELECT = GRANTEE can retrieve data for one or more of the columns.

INSERT = GRANTEE can provide data for new rows for one or more of the columns.

UPDATE = GRANTEE can modify existing data for one or more of the columns.