2016-11-16 3 views
1

рассмотрят следующий запрос: коррелированногоOracle коррелирует запрос с использованием имен схем

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 учетной записи, а не с каким-либо другим. Почему это ?

+0

Какая ошибка у вас? У вас есть соответствующая привилегия для обновления этой таблицы из другой учетной записи? – JSapkota

+0

У меня нет ошибки, я вижу подсказку, в которой # строки обновлены, но когда я смотрю, строки не обновляются. Я назначил правильные привилегии. – Steef

+0

Вы проверяете другой сеанс входа и не совершаете проверку перед изменением? –

ответ

0

Это происходит потому, что, возможно, другие пользователи (учетные записи), с которыми вы хотите запустить DML, не имеют разрешений UPDATE и SELECT в таблице. Таким образом пользователь CASSETTE предоставит разрешение соответствующему пользователю.

IE, говоря, что вы хотите, чтобы запустить его из схемы OTHERUSER, вы должны

1- подключения к БД с кассетой 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

0

Были дублирующие столы, один в кассетной схеме, а другой в GTFIBER. Я обновлял таблицу в схеме GTFIBER и искал данные в другой схеме. Спасибо за ваше время

Смежные вопросы