powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / MERGE ORA-01031: insufficient privileges
13 сообщений из 13, страница 1 из 1
MERGE ORA-01031: insufficient privileges
    #40095587
ПавелZZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
На ровном месте, при компиляции пакета,
на операторе MERGE вылезла ошибка: ORA-01031: insufficient privileges
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
MERGE INTO my_table tgt  -- devdwh.
    USING (WITH
           ul_rnk AS
           (
             SELECT *
               FROM (SELECT ROW_NUMBER ()
          ............................................................

Error: PL/SQL: ORA-01031: insufficient privileges
Line: 56
Text: MERGE INTO my_table tgt


MERGE выполняется для таблицы в моей схеме, пакет тоже в моей схеме.
Я эту таблицу только что сам создал.
Никаких хитростей в ней нет, самая обычная таблица.
Селект из секции USING, как просто запрос выполняется нормально.
Полностью весь MERGE привести не могу, там 1500 строк.

Уже всю голову сломал.
Я понимаю, что информации мало, но может кто-то встречался с такой ситуацией.
...
Рейтинг: 0 / 0
MERGE ORA-01031: insufficient privileges
    #40095589
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПавелZZ
Селект из секции USING, как просто запрос выполняется нормально.

А выполните его в процедурке pl/sql.
Простой курсорный цикл.
...
Рейтинг: 0 / 0
MERGE ORA-01031: insufficient privileges
    #40095605
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПавелZZ

Селект из секции USING, как просто запрос выполняется нормально.


нормально это в процедуре? Скорее всего в USING таблица/ы на который/е SELECT через роль. А definer rights (default) процедуры роли игнорируют.

SY.
...
Рейтинг: 0 / 0
MERGE ORA-01031: insufficient privileges
    #40095607
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Скорее всего в USING таблица/ы на который/е SELECT через роль. А definer rights (default) процедуры роли игнорируют.

Я тоже сначала дернулся в FAQ отправить, а потом вспомнил, что при компиляции в означенном сценарии получаем -942, а не -1031
...
Рейтинг: 0 / 0
MERGE ORA-01031: insufficient privileges
    #40095617
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
SY
Скорее всего в USING таблица/ы на который/е SELECT через роль. А definer rights (default) процедуры роли игнорируют.

Я тоже сначала дернулся в FAQ отправить, а потом вспомнил, что при компиляции в означенном сценарии получаем -942, а не -1031


Значит SELECT через роль и какая-то другая напрямую:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
SQL> show user
USER is "U1"
SQL> select banner from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 - Production
CORE    12.2.0.1.0      Production
TNS for 64-bit Windows: Version 12.2.0.1.0 - Production
NLSRTL Version 12.2.0.1.0 - Production

SQL> merge
  2    into tbl t
  3    using (
  4           select  empno
  5             from  scott.emp1
  6          ) s
  7    on (
  8        t.n = s.empno
  9       )
 10    when not matched
 11      then
 12        insert
 13          values(
 14                 s.empno
 15                );

14 rows merged.

SQL> create or replace
  2    procedure p1
  3      is
  4      begin
  5          merge
  6            into tbl t
  7            using (
  8                   select  empno
  9                     from  scott.emp1
 10                  ) s
 11            on (
 12                t.n = s.empno
 13               )
 14            when not matched
 15              then
 16                insert
 17                  values(
 18                         s.empno
 19                        );
 20  end;
 21  /

Warning: Procedure created with compilation errors.

SQL> show err
Errors for PROCEDURE P1:

LINE/COL ERROR
-------- -----------------------------------------------------------------
4/9      PL/SQL: SQL Statement ignored
8/32     PL/SQL: ORA-00942: table or view does not exist
SQL> -- now we grant insert on scott.emp1 to u1;
SQL> create or replace
  2    procedure p1
  3      is
  4      begin
  5          merge
  6            into tbl t
  7            using (
  8                   select  empno
  9                     from  scott.emp1
 10                  ) s
 11            on (
 12                t.n = s.empno
 13               )
 14            when not matched
 15              then
 16                insert
 17                  values(
 18                         s.empno
 19                        );
 20  end;
 21  /

Warning: Procedure created with compilation errors.

SQL> show err
Errors for PROCEDURE P1:

LINE/COL ERROR
-------- -----------------------------------------------------------------
4/9      PL/SQL: SQL Statement ignored
8/32     PL/SQL: ORA-01031: insufficient privileges
SQL>



SY.
...
Рейтинг: 0 / 0
MERGE ORA-01031: insufficient privileges
    #40095648
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
какая-то другая напрямую

Спасибо, интересно
...
Рейтинг: 0 / 0
MERGE ORA-01031: insufficient privileges
    #40095658
ПавелZZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за ответы.
Действительно, сделал тестовый пакет с этим мерджем.
В схеме с админскими правами он скомпилировался.

Но! В изначальной схеме, где я делал пакет, я добавил в пакет процедуру с простым мерджем в эту таблицу.
Пакет скомпилировался, процедура выполнилась.
Добавил процедуру с простым курсорным циклом с селектом из секции USING.
Пакет скомпилировался, процедура выполнилась.

Ситуация для меня не понятна. ((
...
Рейтинг: 0 / 0
MERGE ORA-01031: insufficient privileges
    #40095676
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПавелZZ

Добавил процедуру с простым курсорным циклом с селектом из секции USING.

цикл не пустой, что-то считали (напр n+1 и вывод n после)?
может соптимизировало?

ps
я проверял не циклом, а напр sum/count

....
stax
...
Рейтинг: 0 / 0
MERGE ORA-01031: insufficient privileges
    #40095681
ПавелZZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax

цикл не пустой, что-то считали (напр n+1 и вывод n после)?
может соптимизировало?

Да, считал количество записей:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    OPEN daily_acc_info;
    LOOP
      FETCH daily_acc_info BULK COLLECT INTO l_tdaily_acc_info LIMIT 100;
    
      EXIT WHEN l_tdaily_acc_info.COUNT = 0;
    
      l_cnt  := l_cnt + l_tdaily_acc_info.COUNT;
      
      dbms_application_info.set_action('Recs: '|| to_char(l_cnt));
    END LOOP;
    CLOSE daily_acc_info;



Количество записей совпало с count(1), если выполнить в виде простого запроса.
...
Рейтинг: 0 / 0
MERGE ORA-01031: insufficient privileges
    #40095686
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
alter session set events='1031 trace name errorstack forever, level 12';
...
Рейтинг: 0 / 0
MERGE ORA-01031: insufficient privileges
    #40095693
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПавелZZ


Уже всю голову сломал.


если MERGE заменить на insert select из MERGE
(мона добавить напр and sin(rownum)>rownum)

ошибка пропадает?

......
stax
...
Рейтинг: 0 / 0
MERGE ORA-01031: insufficient privileges
    #40095708
ПавелZZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax
если MERGE заменить на insert select из MERGE
(мона добавить напр and sin(rownum)>rownum)

ошибка пропадает?

Да, сделал:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    OPEN daily_acc_info;
    LOOP
      FETCH daily_acc_info BULK COLLECT INTO l_tdaily_acc_info LIMIT 1000;
    
      EXIT WHEN l_tdaily_acc_info.COUNT = 0;
      
      FORALL idx IN 1 .. l_tdaily_acc_info.COUNT
        INSERT /*+ APPEND_VALUES */
          INTO devdwh.fm_daily_account_info2
        VALUES l_tdaily_acc_info (idx);
      COMMIT;

    END LOOP;
    CLOSE daily_acc_info;


Процедура выполнилась, все строки добавились.
...
Рейтинг: 0 / 0
MERGE ORA-01031: insufficient privileges
    #40095718
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПавелZZ

Да, сделал:


я имел чутку другое (по сути тоже)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
...
/*
         merge
*/
INSERT 
            into tbl t
--            using (
                   select  empno
                     from  scott.emp1
and 1=2;
/*                 ) s
...
*/
...



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

.....
stax
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / MERGE ORA-01031: insufficient privileges
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]