【问题标题】:Oracle correlated query using schema namesOracle 使用模式名称关联查询
【发布时间】:2016-11-16 11:32:08
【问题描述】:

考虑以下相关查询:

update CASSETTE.DB_NIM_CABLES a
set( cgb_a, cgb_z ) =
(
    select  regexp_substr( name, '[^ ]+', 1, 1 )
        ,   regexp_substr( name, '[^ ]+', 1, 1 )
    from CASSETTE.DB_NIM_CABLES b 
    where b.id = a.id
) where REGEXP_COUNT( a.name, '-' ) = 1;

如果我使用 CASSSETTE 帐户运行它,这可以工作,但不能使用任何其他帐户。这是为什么呢?

【问题讨论】:

  • 你得到什么样的错误?您是否具有从其他帐户更新该表的适当权限?
  • 我没有收到错误,我看到提示说 # rows updated,但是当我查看时没有更新任何行。我已经分配了适当的权限。
  • 您是否从不同的登录会话进行检查,而不是在检查更改之前提交?

标签: sql oracle correlated-subquery


【解决方案1】:

发生这种情况的原因可能是您要运行 DML 的其他用户(帐户)没有表的 UPDATE 和 SELECT 权限。 所以CASSETTE用户应该将权限授予相应的用户。

IE,说你想从 OTHERUSER 模式运行它,你应该

1- 使用 CASSETTE USER 连接数据库

2- 授予权限如下

            grant ALL PRIVILEGES on DB_NIM_CABLES to OTHERUSER ;

PS 我授予所有权限,授予 SELECT、INSERT、UPDATE 应该就足够了。

请参阅此文档,在它讨论 OBJECT 权限的部分。

https://docs.oracle.com/database/122/DBSEG/configuring-privilege-and-role-authorization.htm#DBSEG99868

【讨论】:

    【解决方案2】:

    有重复的表,一个在 CASSETTE 模式中,另一个在 GTFIBER 中。我正在更新 GTFIBER 方案中的表并在其他方案中查找数据。感谢您的宝贵时间

    【讨论】:

      猜你喜欢
      • 2021-03-26
      • 2016-07-14
      • 1970-01-01
      • 2016-06-21
      • 2021-01-21
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多