У меня проблема с операцией удаления в хранимых процедурах (пакетах) - PullRequest
0 голосов
/ 20 декабря 2018

Я столкнулся с проблемой здесь.У меня есть таблица Products, где есть столбцы с именами prod_trkg_tran_id и cntr_nbr и т. Д. У меня также есть две таблицы instance1 и instance2, которые также содержат prod_trkg_tran_id и cntr_nbr, и они имеют одну строку данныхкаждый с тем же cntr_nbr.Я запустил запрос, как показано ниже в Oracle SQLDeveloper.Он работал нормально и удалил строку из prod_trkg_tran.Можете ли вы объяснить это ??

Но когда я попробовал это в SP, назначив:

p_where_clause:=  'WHERE t.prod_trkg_tran_id in (
    select distinct tp82.PROD_TRKG_TAN_ID
    from instance_1 tp21
    join instance_2 tp82 on tp21.cntr_nbr=tp82.cntr_nbr
)'

и вызвал метод delete_table, оператор которого содержит

'DELETE FROM ' || p_table_name ||' t ' || p_where_clause;

p_table_name - это prod_trkg_tran, а p_where_clause - это то, что я определил ранее.

Если я запускаю это, записи SP не удаляются из prod_trkg_tran.

В идеале это должно было быть удалено, как я пытался в SQLDeveloper.Вы можете это объяснить?

delete from prod_trkg_tran t 
WHERE t.prod_trkg_tran_id in (
    select distinct tp82.PROD_TRKG_TRAN_ID  
    from  instance_1 tp21 
    join instance_2 tp82 on tp21.cntr_nbr=tp82.cntr_nbr
);

1 Ответ

0 голосов
/ 21 декабря 2018

Скорее всего, это проблема предоставления прав, когда у исполняющей схемы / пользователя нет прав на удаление или выбор афориентированных таблиц.

Если у вашего пользователя есть права администратора баз данных, вы не сталкиваетесь с этой ошибкой при использовании SQL Developer,однако хранимая процедура делает.

В вашем случае ваши таблицы могут быть синонимами другой таблицы схемы, и у вас могут не быть грантов для этих таблиц.

Пожалуйста, убедитесь, что у вас достаточно грантов.

Кстати, с какой ошибкой вы сталкиваетесь?

...