Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 DBMS_METADATA.GET_DDL  [new]
_Майор
Guest
Какие права должен иметь пользователь, чтобы читать метаданные из другой схемы. Почему то только из своей схемы получается...
Пожалуйста поможите чем можите...
21 фев 05, 14:29    [1335450]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Владимор Конев
Member

Откуда:
Сообщений: 3451
_Майор
Какие права должен иметь пользователь, чтобы читать метаданные из другой схемы. Почему то только из своей схемы получается...
Пожалуйста поможите чем можите...


SELECT_CATALOG_ROLE???
21 фев 05, 17:13    [1336264]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
vitalych
Member

Откуда: Москва
Сообщений: 391
SELECT_CATALOG_ROLE - чисто из SYSa
21 фев 05, 18:12    [1336451]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
vitalych
Member

Откуда: Москва
Сообщений: 391
SELECT ANY TABLE - думаю прокатит
21 фев 05, 18:14    [1336456]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Zontik
Member

Откуда: Кемерово
Сообщений: 47
Скажите пожалуйста select dbms_metadata.get_ddl работает с параметром <<тип объекта>>-PACKAGE. У меня не получилось, выдает ошибку.
ORA-06502: PL/SQL:
LPX-00216: INVALID CHARACTER 255(0xFF) ошибка числа или значения
ORA-06512: на "SYS.UTL_XML", line 0
ORA-06512: на "SYS.DBMS_METADATA_INT", line 4175
ORA-06512: на "SYS.DBMS_METADATA", line 481
ORA-06512: на "SYS.DBMS_METADATA", line 616
ORA-06512: на "SYS.DBMS_METADATA", line 1205
ORA-06512: на line 1
В чем причина. Заранее благодарен.
8 сен 05, 04:41    [1857055]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Что-то в консерватории не то
tst> connect system/manager@tst
Connected.
tst> select * from v$version where rownum=1;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.7.0 - Production

tst> create user u3 identified by u3;

User created.

tst> grant create session, create procedure to u3;

Grant succeeded.

tst> connect u3/u3@tst
Connected.
tst> create package p1 as
  2  procedure test;
  3  end;
  4  /

Package created.

tst> create package body p1 as
  2  procedure test is
  3  begin
  4      null;
  5  end;
  6  end;
  7  /

Package body created.

tst> set long 5000
tst> select dbms_metadata.get_ddl('PACKAGE', 'P1') from dual;

DBMS_METADATA.GET_DDL('PACKAGE','P1')
--------------------------------------------------------------------------------

  CREATE OR REPLACE PACKAGE "U3"."P1" as
procedure test;
end;

CREATE OR REPLACE PACKAGE BODY "U3"."P1" as
procedure test is
begin
    null;
end;
end;

8 сен 05, 05:22    [1857067]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
_AndreyP
Member

Откуда: Krsk-->SPb
Сообщений: 429
apdev@ORCL10G>edit
Wrote file afiedt.buf

  1  select  dbms_metadata.get_ddl('PACKAGE'
  2                                ,'DISCIP'
  3                                ,'DBADMIN'
  4                                ,'COMPATIBLE'
  5                                ,'ORACLE'
  6                                ,'DDL')
  7* from dual
apdev@ORCL10G>/

DBMS_METADATA.GET_DDL('PACKAGE','DISCIP','DBADMIN','COMPATIBLE','ORACLE','DDL')
--------------------------------------------------------------------------------

  CREATE OR REPLACE PACKAGE "DBADMIN"."DISCIP"
  IS
   type rc is ref cursor;
   procedure get_list_kurs_discip(list_data in out rc,iden in integer);
   procedure get_kurs_data(list_data in out rc,iden in integer);

   procedure insert_discip_record(id_unit in integer, caption in varchar2, res i
n varchar2);
   procedure update_umk_record(inform in varchar2, iden in integer);
   procedure insert_umk_record(inform in varchar2, iden in integer);
   procedure update_author_record(iden_user in integer, iden_kurs in integer);
END;

CREATE OR REPLACE PACKAGE BODY "DBADMIN"."DISCIP"
IS......................................

и т.д.

автор
В чем причина

а что как пишешь ?
8 сен 05, 05:30    [1857073]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Zontik
Member

Откуда: Кемерово
Сообщений: 47
Вячеслав Любомудров

Oracle9i Enterprise Edition Release 9.2.0.7.0 - Production


Oracle9i Enterprise Edition Release 9.0.1.1.1 может из за этого, хотя везде пишут что для пакета dbms_metadata версия должна быть не ниже 9.
8 сен 05, 05:32    [1857074]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
На всех пакетах ломается?

Попробуй сделать простой тестовый пакетик (как в моем предыдущем посте) и проверь на нем

Возможно, какой-либо кривой символ в пакете встречается...
8 сен 05, 05:37    [1857077]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Zontik
Member

Откуда: Кемерово
Сообщений: 47
_AndreyP

а что как пишешь ?

Пишу:
select dbms_metadata.get_ddl('PACKAGE','ИМЯ ПАКЕТА','СХЕМА' ) AS txt from dual
т.е три параметра всего передаю.
Что значат остальные ?
8 сен 05, 05:40    [1857079]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Zontik
Member

Откуда: Кемерово
Сообщений: 47
На которых пробовал да.
А с простым работает. Спасибо.
Вячеслав Любомудров

Возможно, какой-либо кривой символ в пакете встречается...

что за символы о который запинается, и как это можно решить или обойти.
8 сен 05, 05:50    [1857084]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Судя по
Zontik
ORA-06502: PL/SQL:
LPX-00216: INVALID CHARACTER 255(0xFF) ошибка числа или значения
попробуй

select * from user_source where instr(text, chr(255)) > 0
8 сен 05, 06:06    [1857091]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Zontik
Member

Откуда: Кемерово
Сообщений: 47
так он не чего не выводит
select text, instr(text, chr(255)) from user_source
везде возращает нули кроме пустых строк там то же пустые строки.
как я понимаю мы ищем плохой символ "255" из ошибки и как я понимаю его там нет. Может это пустые строки ?
8 сен 05, 06:25    [1857101]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Похоже-таки это баг 4057408 - сказано, что он поправлен в 10.

Но все же, если пакет небольшой (и не шибко секурный ;-))- выложи сюда результаты
select text from user_source where name=<pkg_name> order by type, line;
select dbms_metadata.get_ddl('PACKAGE_SPEC', 'P1') from dual;
select dbms_metadata.get_ddl('PACKAGE_BODY', 'P1') from dual;
select dbms_metadata.get_ddl('PACKAGE', 'P1') from dual;
8 сен 05, 06:45    [1857114]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Есть похожий баг. Вот так он проявляется на 9.2.0.3
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.3.0 - Production

suse> select dbms_metadata.get_ddl('PACKAGE', 'DBMS_PSP', 'SYS') from dual;
select dbms_metadata.get_ddl('PACKAGE', 'DBMS_PSP', 'SYS') from dual
       *
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error
LPX-00216: invalid character 12 (0xC)
ORA-06512: at "SYS.UTL_XML", line 0
ORA-06512: at "SYS.DBMS_METADATA_INT", line 4157
ORA-06512: at "SYS.DBMS_METADATA", line 458
ORA-06512: at "SYS.DBMS_METADATA", line 615
ORA-06512: at "SYS.DBMS_METADATA", line 1221
ORA-06512: at line 1
И так оно ловится
suse> select distinct owner, name, type
  2  from dba_source where instr(text, chr(12)) > 0;

OWNER                          NAME                           TYPE
------------------------------ ------------------------------ ------------
SYS                            DBMS_PSP                       PACKAGE BODY
8 сен 05, 07:10    [1857137]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Zontik
Member

Откуда: Кемерово
Сообщений: 47
Пакет показать не могу, башку оторвут.
А спотыкается фун. на рус. комментариях (вывел научным путем-"методом тыка") только на какой букве еще не знаю. Разгадаю напишу.
8 сен 05, 08:05    [1857173]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Zontik
Member

Откуда: Кемерово
Сообщений: 47
Спасибо за помощь. С помощью ваших примеров я ее поймал это буква "я".
8 сен 05, 08:48    [1857248]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Zontik
Member

Откуда: Кемерово
Сообщений: 47
Появилось еще два вопроса
1) Работает ли это функция с SEQUENCE
2) И можно ли в параметре ИМЯ ОБЪЕКТА указать как нибудь <<все>> и как это возможно сделать.
8 сен 05, 09:55    [1857481]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
tst> connect u1/u1@tst
Connected.
tst> create sequence s1;

Sequence created.

tst> create sequence s2;

Sequence created.

tst> var mh number
tst> var n number
tst> exec :mh := dbms_metadata.open('SEQUENCE')

PL/SQL procedure successfully completed.

tst> exec :n := dbms_metadata.add_transform(:mh, 'DDL')

PL/SQL procedure successfully completed.

tst> set long 5000
tst> select dbms_metadata.fetch_clob(:mh) from all_objects where rownum < 3;

DBMS_METADATA.FETCH_CLOB(:MH)
--------------------------------------------------------------------------------

   CREATE SEQUENCE  "U1"."S1"  MINVALUE 1 MAXVALUE 1.00000000000000E+27 INCREMEN
T BY 1 START WITH 1 CACHE 20 NOORDER  NOCYCLE



   CREATE SEQUENCE  "U1"."S2"  MINVALUE 1 MAXVALUE 1.00000000000000E+27 INCREMEN
T BY 1 START WITH 1 CACHE 20 NOORDER  NOCYCLE


tst> exec dbms_metadata.close(:mh)

PL/SQL procedure successfully completed.
8 сен 05, 10:03    [1857516]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Zontik
Member

Откуда: Кемерово
Сообщений: 47
я ему
exec :mh := dbms_metadata.open('SEQUENCE')
он мне
ORA-31600: недопустимое входное значение SEQUENCE параметра OBJECT_TYPE в функции OPEN
8 сен 05, 11:35    [1858039]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
MinistrBob
Member

Откуда: Москва
Сообщений: 281
Zontik
Спасибо за помощь. С помощью ваших примеров я ее поймал это буква "я".


Далась же буржуйским разработчикам эта буква Я :-) Многие ftp-сервера тоже об нее спотыкаються. Пришлось на ftp-сервере переименовывать все русские названия файлов и папок без буквы Я иначе пользователи их не видят.
8 сен 05, 12:19    [1858330]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Zontik
Member

Откуда: Кемерово
Сообщений: 47
Все же что делать со SEQUENCE, помогите очень надо.
9 сен 05, 04:38    [1861398]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
tst> create sequence s1;

Sequence created.

tst> column txt format a80 word_wrap
tst> select 'CREATE SEQUENCE "'||USER||'"."'||sequence_name||
  2         '" MINVALUE '||min_value||' MAXVALUE '||max_value||
  3         ' INCREMENT BY '||increment_by||' START WITH '||last_number|| -- (?)/min_value(?)
  4         decode(cache_size, 0, ' NOCACHE', ' CACHE '||cache_size)||
  5         decode(order_flag,'Y', ' ORDER', ' NOORDER')||
  6         decode(cycle_flag, 'Y', ' CYCLE', ' NOCYCLE') txt
  7  from user_sequences
  8  /

TXT
--------------------------------------------------------------------------------
CREATE SEQUENCE "U1"."S1" MINVALUE 1 MAXVALUE 999999999999999999999999999
INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE

9 сен 05, 05:05    [1861405]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Zontik
Member

Откуда: Кемерово
Сообщений: 47
Я имел в виду с помощью функций, а таким способом решить меня давно осенило,просто хотелось верить что один пакет все мои проблемы решит, но если другого выхода нет придется делать так. Как всегда в бочке меда ложка дегтя.
Спасибо большое !!! А в форум ваш я все больше влюбленный.
9 сен 05, 05:26    [1861411]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_METADATA.GET_DDL  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Ну дык, проапгрейдись и будет тебе счастье - тебе же не раз показали, что в новых версиях таких проблем нет.

Давно замечено, что в продакшн лучше не использовать первые релизы, тем более что 9iR2 доступен уже несколько лет
9 сен 05, 05:31    [1861414]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить