Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / MERGE ORA-01031: insufficient privileges / 13 сообщений из 13, страница 1 из 1
06.09.2021, 20:37
    #40095587
ПавелZZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MERGE ORA-01031: insufficient privileges
Всем привет!
На ровном месте, при компиляции пакета,
на операторе 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
06.09.2021, 20:49
    #40095589
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MERGE ORA-01031: insufficient privileges
ПавелZZ
Селект из секции USING, как просто запрос выполняется нормально.

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

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


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

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

Я тоже сначала дернулся в FAQ отправить, а потом вспомнил, что при компиляции в означенном сценарии получаем -942, а не -1031
...
Рейтинг: 0 / 0
07.09.2021, 00:11
    #40095617
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MERGE ORA-01031: insufficient privileges
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
07.09.2021, 10:07
    #40095648
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MERGE ORA-01031: insufficient privileges
SY
какая-то другая напрямую

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

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

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

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

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

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

....
stax
...
Рейтинг: 0 / 0
07.09.2021, 11:50
    #40095681
ПавелZZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MERGE ORA-01031: insufficient privileges
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
07.09.2021, 12:01
    #40095686
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MERGE ORA-01031: insufficient privileges
Код: plsql
1.
alter session set events='1031 trace name errorstack forever, level 12';
...
Рейтинг: 0 / 0
07.09.2021, 12:22
    #40095693
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MERGE ORA-01031: insufficient privileges
ПавелZZ


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


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

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

......
stax
...
Рейтинг: 0 / 0
07.09.2021, 12:52
    #40095708
ПавелZZ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MERGE ORA-01031: insufficient privileges
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
07.09.2021, 13:20
    #40095718
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MERGE ORA-01031: insufficient privileges
Павел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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / MERGE ORA-01031: insufficient privileges / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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