Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Помогите по dbms_metadata  [new]
sdvsamara
Member

Откуда: Самара
Сообщений: 201
Задача перенести объект (в данном случае процедуру) на другую схему. Порывшись в документации написал:

PROCEDURE get_proc(p_object_type IN VARCHAR2, p_schema_name IN VARCHAR2,
                   p_object_name IN VARCHAR2)
IS
  errs sys.ku$_SubmitResults := sys.ku$_SubmitResults();
  err sys.ku$_SubmitResult;
  
  v_object_type VARCHAR2(100);
  v_schema_name VARCHAR2(100);
  v_object_name VARCHAR2(100);
  
  h1  NUMBER;
  h2  NUMBER;
  c   CLOB;
  th1 NUMBER;
  th2 NUMBER;
  res BOOLEAN;
  i   NUMBER;
  j   NUMBER;
BEGIN
  v_object_type := upper(p_object_type);
  v_schema_name := upper(p_schema_name);
  v_object_name := upper(p_object_name);
  
  check_allowed(v_schema_name, v_object_name);
  
  h1 := dbms_metadata.open(v_object_type, 'LATEST');
  c := dbms_metadata.get_xml(v_object_type, v_object_name, v_schema_name);
  dbms_metadata.close(h1);
  
  h2 := dbms_metadata.openw(v_object_type, 'LATEST');
  th1 := dbms_metadata.add_transform(h2, 'MODIFY');
  dbms_metadata.set_remap_param(th1, 'REMAP_SCHEMA', v_schema_name, USER);
  th2 := dbms_metadata.add_transform(h2, 'DDL');
  res := dbms_metadata.put(h2, c, 0, errs);
  dbms_metadata.close(h2);
  
  IF NOT res THEN
    FOR i IN errs.first..errs.last LOOP
      err := errs(i);
      FOR j IN err.errorLines.first..err.errorLines.last LOOP
        dbms_output.put_line(err.errorLines(j).errorText);
      END LOOP;
    END LOOP;
  END IF;
END;

И при выполнении put получаю ошибку ORA-01031: insufficient privileges. Какая привилегия нужна? Никак найти не могу. Привилегия на создание процедур везде, у меня есть. Процедуры создаются без проблем, а через put ну никак.
10 ноя 10, 17:01    [9756443]     Ответить | Цитировать Сообщить модератору
 Re: Помогите по dbms_metadata  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
sdvsamara
И при выполнении put получаю ошибку ORA-01031: insufficient privileges.


Tынц

SY.
10 ноя 10, 17:17    [9756533]     Ответить | Цитировать Сообщить модератору
 Re: Помогите по dbms_metadata  [new]
sdvsamara
Member

Откуда: Самара
Сообщений: 201
SY,

Тынцкнул. Там всё про получение DDL, а он-то у меня без проблем получается. У меня ошибка вылетает при попытке создать объект через dbms_metadata.put. Да, и эта ошибка вылетает не эксепшеном, а в коллекции sys.ku$_SubmitResults.
10 ноя 10, 17:26    [9756598]     Ответить | Цитировать Сообщить модератору
 Re: Помогите по dbms_metadata  [new]
oraspec
Member

Откуда: Москва Сити
Сообщений: 122
sdvsamara
SY,

Тынцкнул. Там всё про получение DDL, а он-то у меня без проблем получается. У меня ошибка вылетает при попытке создать объект через dbms_metadata.put. Да, и эта ошибка вылетает не эксепшеном, а в коллекции sys.ku$_SubmitResults.


execute immediate
10 ноя 10, 17:51    [9756779]     Ответить | Цитировать Сообщить модератору
 Re: Помогите по dbms_metadata  [new]
sdvsamara
Member

Откуда: Самара
Сообщений: 201
oraspec,

execute immediate ограничен размером varchar2.
10 ноя 10, 18:01    [9756847]     Ответить | Цитировать Сообщить модератору
 Re: Помогите по dbms_metadata  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
sdvsamara
oraspec,

execute immediate ограничен размером varchar2.

осталось у вас узнать, каким(в числах) размером это ограничение )
10 ноя 10, 19:11    [9756972]     Ответить | Цитировать Сообщить модератору
 Re: Помогите по dbms_metadata  [new]
sdvsamara
Member

Откуда: Самара
Сообщений: 201
pravednik,

32767 символа. У нас не редкость процедура в 309 Кб.
11 ноя 10, 09:33    [9758653]     Ответить | Цитировать Сообщить модератору
 Re: Помогите по dbms_metadata  [new]
Elic
Member

Откуда:
Сообщений: 29990
sdvsamara
У нас не редкость процедура в 309 Кб.
Не может быть, чтобы такие писатели не знали про различные варианты DSQL. Спроси у них, пусть и тебя научат. На худой конец почитай сам в ADG-F.
11 ноя 10, 09:53    [9758791]     Ответить | Цитировать Сообщить модератору
 Re: Помогите по dbms_metadata  [new]
sdvsamara
Member

Откуда: Самара
Сообщений: 201
Elic,

Что-то я не понял? Разговор про dbms_sql? Так там тоже varchar2. У меня вопрос был, какую привилегию dbms_metadata.put от меня требует. Самое весёлое, в прошлом году нечто подобное делал, всё работало на ура. С тех пор среду разработки несколько раз пересоздавали и вот теперь требует.
11 ноя 10, 10:14    [9758940]     Ответить | Цитировать Сообщить модератору
 Re: Помогите по dbms_metadata  [new]
sdvsamara
Member

Откуда: Самара
Сообщений: 201
Elic,

Если же разговор идёт про встроенную Java, то в эту сторону я думал. Но уж больно удобно этот пакет использовать для смены схемы объекта.
11 ноя 10, 10:18    [9758971]     Ответить | Цитировать Сообщить модератору
 Re: Помогите по dbms_metadata  [new]
Elic
Member

Откуда:
Сообщений: 29990
sdvsamara
Разговор про dbms_sql? Так там тоже varchar2.
Не только.
11 ноя 10, 10:21    [9758992]     Ответить | Цитировать Сообщить модератору
 Re: Помогите по dbms_metadata  [new]
sdvsamara
Member

Откуда: Самара
Сообщений: 201
Elic,

Имеется в виду тип varchar2s (давненько я в описание этого пакета не залазил)? Да, можно. Но хочется через dbms_metadata. И хочется понять, какой же привилегии не хватает.
11 ноя 10, 10:38    [9759087]     Ответить | Цитировать Сообщить модератору
 Re: Помогите по dbms_metadata  [new]
Elic
Member

Откуда:
Сообщений: 29990
sdvsamara
Привилегия на создание процедур везде, у меня есть.
ТОП №4?
11 ноя 10, 11:02    [9759332]     Ответить | Цитировать Сообщить модератору
 Re: Помогите по dbms_metadata  [new]
sdvsamara
Member

Откуда: Самара
Сообщений: 201
Elic,

Нет. Про это я знаю и привилегия выдана напрямую, а не через роль.
11 ноя 10, 11:04    [9759364]     Ответить | Цитировать Сообщить модератору
 Re: Помогите по dbms_metadata  [new]
sdvsamara
Member

Откуда: Самара
Сообщений: 201
Ёкарный бабай. Вот ведь же... Короче, действительно не так давно выдавал привилегию напрямую. Но не так давно (видать при последнем пересоздании среды) кто-то из админов перевесил на роль...
Разумеется теперь всё заработало.
11 ноя 10, 11:13    [9759454]     Ответить | Цитировать Сообщить модератору
 Re: Помогите по dbms_metadata  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
sdvsamara
Тынцкнул. Там всё про получение DDL.


The very first line of Тынц:

1. Stored objects with definer rights are executed on behalf of object owner and ignore role based privileges.

What can be clearer?

SY.
11 ноя 10, 15:45    [9761920]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить