powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-31603 при использовании DBMS_METADATA.DEG_DDL
44 сообщений из 44, показаны все 2 страниц
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #32998886
McMurfy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер!
Хочу выгрузить DDL для Constraint'ов с помощью такого (например) кода:
Код: plaintext
1.
select DBMS_METADATA.GET_DDL('CONSTRAINT','MY_CONSTR','SCOTT') from dual
При этом получаю ошибку:
автор
ORA-31603: object "MY_CONSTR" of type CONSTRAINT not found in schema "SCOTT"

Constraint существует, запрос к DBA_Constraints это подтверждает.
Может быть кто-нибудь знает, в чем дело? Заранее спасибо!
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #32998972
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I do not see anything wrong with syntax:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> SET LONG  1000 
SQL> select DBMS_METADATA.GET_DDL('CONSTRAINT','PK_EMP','SCOTT') from dual;

DBMS_METADATA.GET_DDL('CONSTRAINT','PK_EMP','SCOTT')
--------------------------------------------------------------------------------

  ALTER TABLE "SCOTT"."EMP" ADD CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
  USING INDEX PCTFREE  10  INITRANS  2  MAXTRANS  255 
  STORAGE(INITIAL  65536  NEXT  65536  MINEXTENTS  1  MAXEXTENTS  2147483645 
  PCTINCREASE  0  FREELISTS  1  FREELIST GROUPS  1  BUFFER_POOL DEFAULT)
  TABLESPACE "INDEX_SMALL"  ENABLE



SQL> 

What happens when you issue:

Код: plaintext
1.
2.
3.
4.
SELECT  CONSTRAINT_TYPE
  FROM  DBA_CONSTRAINTS
  WHERE OWNER = 'SCOTT'
    AND CONSTRAINT_NAME = 'MY_CONSTR'
/

SY.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #32999000
McMurfy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получаю 'R', это внешний ключ.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #32999014
McMurfy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только что попробовал, приведенная конструкция отлично отрабатывает для Constraint'ов всех типов ('C','P','U'), кроме внешних ключей ('R'). Интересно, почему...
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #32999026
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For a foreign key you must use REF_CONSTRAINT:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> SET LONG  1000 
SQL> select DBMS_METADATA.GET_DDL('REF_CONSTRAINT','FK_DEPTNO','SCOTT') from dual;

DBMS_METADATA.GET_DDL('REF_CONSTRAINT','FK_DEPTNO','SCOTT')
--------------------------------------------------------------------------------

  ALTER TABLE "SCOTT"."EMP" ADD CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
          REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE



SQL> 

SY.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #32999041
McMurfy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное спасибо! Исчерпывающий ответ!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37574509
AcMuHor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всех приветствую!
И вновь к этому вопросу)...теперь про стандартный планировщик!
(Oracle Database 10g Enterprise Edition Release 10.2.0.4.0)

Код: plsql
1.
2.
3.
4.
5.
SELECT dbms_metadata.get_ddl('PROCOBJ','FGR$AUTOPURGE_JOB', 'SYS') from dual;

или

SELECT dbms_metadata.get_ddl('PROCOBJ','AUTO_SPACE_ADVISOR_JOB', 'SYS') from dual;



Выходит та же самая ошибка ORA-31603((( что здесь то не так не пойму??

Хотя в базе есть такой scheduler:

select * from dba_scheduler_jobs where owner = 'SYS' and job_name = 'FGR$AUTOPURGE_JOB';
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37574691
AcMuHor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если рассматривать далее.
Создаю задание:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
BEGIN 
dbms_scheduler.create_job('JOB_TEST',
job_type=>'PLSQL_BLOCK', job_action=>
'begin 
 null;
 end;'
, number_of_arguments=>0,
start_date=>'30.11.11 10:02:37,000000 +00:00', repeat_interval=> 
'FREQ=DAILY;BYHOUR=1;BYMINUTE=0;BYSECOND=0'
, end_date=>NULL,
job_class=>'DEFAULT_JOB_CLASS', enabled=>FALSE, auto_drop=>FALSE,comments=>
'Тестовый робот для форума SQL.RU'
);
COMMIT; 
END; 



Проверяю создание задания:

Код: plsql
1.
select j.job_name, j.job_type from dba_scheduler_jobs j where j.owner = 'SYS' and j.job_name = 'JOB_TEST';



JOB_NAME JOB_TYPE
------------------------------------ ----------------------
JOB_TEST PLSQL_BLOCK


Пытаюсь выдернуть DLL:

Код: plsql
1.
SELECT dbms_metadata.get_ddl('PROCOBJ', 'JOB_TEST', 'SYS') from dual;



[1]: ORA-31603: объект "JOB_TEST" с типом PROCOBJ не найден в схеме "SYS"

Да что же не так??

Хотя следующий запрос отрабатывает на ура:

Код: plsql
1.
SELECT dbms_metadata.get_ddl('PROCOBJ', 'MGMT_STATS_CONFIG_JOB', 'ORACLE_OCM') from dual;




DBMS_METADATA.GET_DDL('PROCOBJ','MGMT_STATS_CONFIG_JOB','ORACLE_OCM')
---------------------------------------------------------------------------
(CLOB)
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37575018
dba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcMuHor,

что-нибудь вообще (из других схем) показывается ?
Код: plsql
1.
select dbms_metadata.get_ddl('PROCOBJ',j.job_name,j.owner) from dba_scheduler_jobs j where j.owner <> 'SYS';
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37575030
dba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dba123,

не заметил,
что Вы в схеме sys создаете джоб

попробуйте в своей или посмотрите что там за права даны oracle_ocm
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37575033
AcMuHor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да показывает! все без проблем выбирает...так что получается у самого sys-a невозможно посмотреть свои же созданные задания??
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37575186
AcMuHor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У пользователя ORACLE_OCM следующие привилегии:

Код: plsql
1.
select * from  dba_tab_privs t where t.grantee = 'ORACLE_OCM';



Результат:

GRANTEE OWNER TABLE_NAME GRANTOR
------------------------------------ ------------------------------------ --------------------------------
ORACLE_OCM SYS ORACLE_OCM_CONFIG_DIR SYS
ORACLE_OCM SYS ORACLE_OCM_CONFIG_DIR SYS

Вообщем не знаю что это скажет Вам))

Просто очень интересно почему так получается).
Вручную просто не хотелось все заново создавать на другой БД, т.к. полный дамп DBMS_DATAPUMP не выгружает эти задания((
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37575200
AcMuHor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.к. под SYSTEM все работает так и придется пересоздать под ним все задания))...

Спасибо за помощь!
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37575292
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересный обход бага
Dbms_metadata.Get_ddl Can Not Capture Ddl For Scheduler Jobs [ID 567504.1]

Спасибо, полезно.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37609155
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня при выполнении
Код: plsql
1.
select DBMS_METADATA.GET_DDL('TABLE', 'SD_EXPIRE_PACKS', 'BIS') from DUAL

получается сообщение об ошибке:
ORA-31603: объект "SD_EXPIRE_PACKS" c типом TABLE не найден в схеме "BIS"
ORA-06512: на "SYS.DBMS_METADATA", line 4018
ORA-06512: на "SYS.DBMS_METADATA", line 5843
ORA-06512: на line 1

Я пытался разрапить SYS.DBMS_METADATA, но не получилось .
При этом запрос select * from bis.SD_EXPIRE_PACKS нормально работает, никаких ошибок не выдаёт, выборка не пуста.
В чём может быть проблема?

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37609227
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic,

Код: plsql
1.
select object_type from dba_objects where object_name='SD_EXPIRE_PACKS' and owner='BIS';
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37609272
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PasticORA-31603: объект "SD_EXPIRE_PACKS" c типом TABLE не найден в схеме "BIS"select_catalog_role
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #37609377
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pravednikPastic,

Код: plsql
1.
select object_type from dba_objects where object_name='SD_EXPIRE_PACKS' and owner='BIS';



Возвращает 1 строку со значением TABLE.

-2-PasticORA-31603: объект "SD_EXPIRE_PACKS" c типом TABLE не найден в схеме "BIS"select_catalog_role

Похоже, это то, что нужно.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #38872255
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток!
Эта же ошибка возникает при таких обстоятельствах.
Есть две схемы. Условно USER_DBA (с правами DBA) и USER.
Есть DDL в схеме USER_DBA в котором используется DBMS_METADATA.GET_DDL - здесь и возникает ошибка
Код: plsql
1.
2.
3.
4.
5.
6.
procedure test
is
 c clob;
begin
   c:= dbms_metadata.get_ddl(object_type=>'TRIGGER',name=> 'TR1',schema=>'USER');
end;  



если выполнить для извлечения данных схемы USER_DBA - ошибки нет

Код: plsql
1.
2.
3.
4.
5.
6.
procedure test
is
 c clob;
begin
   c:= dbms_metadata.get_ddl(object_type=>'TRIGGER',name=> 'TR2',schema=>'USER_DBA');
end;  





Причем, если вызывать не из DDL - работает

Код: plsql
1.
select dbms_metadata.get_ddl(object_type=>'TRIGGER',name=> 'TR1',schema=>'USER') into c from dual;



Поручается, ошибка возникает только при вызове из DDL.

Где копать?

Пробовал выполнять это же из схемы USER в DLL - работает нормально, из чего я сделал вывод что не в правах дело.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #38872283
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorDиз чего я сделал вывод что не в правах дело.Топ №4
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #38872474
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,
SELECT_CATALOG_ROLE присутствует, а ошибка есть
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #38872518
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorDSELECT_CATALOG_ROLE присутствует, а ошибка есть

Медитируй на тему что есть SELECT_CATALOG_ROLE:

Код: 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.
SQL> create user u1 identified by u1
  2  default tablespace users
  3  quota unlimited on users
  4  /

User created.

SQL> grant create session,
  2        create procedure
  3    to u1
  4  /

Grant succeeded.

SQL> grant select_catalog_role
  2    to u1
  3  /

Grant succeeded.

SQL> connect u1@sol11
Enter password: **
Connected.
SQL> create or replace
  2  procedure p1
  3  is
  4   c clob;
  5  begin
  6     c:= dbms_metadata.get_ddl(object_type=>'TABLE',name=> 'EMP',schema=>'SCOTT');
  7  end;
  8  /

Procedure created.

SQL> exec p1
BEGIN p1; END;

*
ERROR at line 1:
ORA-31603: object "EMP" of type TABLE not found in schema "SCOTT"
ORA-06512: at "SYS.DBMS_METADATA", line 5088
ORA-06512: at "SYS.DBMS_METADATA", line 7589
ORA-06512: at "U1.P1", line 5
ORA-06512: at line 1


SQL> create or replace
  2  procedure p1
  3  authid current_user
  4  is
  5   c clob;
  6  begin
  7     c:= dbms_metadata.get_ddl(object_type=>'TABLE',name=> 'EMP',schema=>'SCOTT');
  8  end;
  9  /

Procedure created.

SQL> exec p1

PL/SQL procedure successfully completed.

SQL> 
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #38872541
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,
Помогло! СПАСИБО!
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39140142
uZverrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Вопрос все еще частично актуален:

create or replace procedure USER1.test authid current_user is
Result clob;
begin
select dbms_metadata.get_ddl('PACKAGE_BODY', 'PKG_NAME', 'USER2') into result from dual;

end test;

При вызове от имени USER1 ругается:
Ошибка: ORA-31603: объект 'PKG_NAME' с типом 'PACKAGE_BODY' не найден в схеме 'USER2'

Что-то уже идеи заканчиваются. Помогите понять что к чему?
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39140154
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39140188
uZverrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeaGate,

правильно ли понимаю:
1. при вызове функции от имени владельца я никак не получу данные объектов других схем
2. но если вызывать эту функцию от имени других пользователей, предоставив грант на EXECUTE, то конечно возможно (это проверил).

Но почему именно PACKAGE_BODY не выбирает?
А функции, процедуры, спецификации пакетов нормально берет.

ЗЫ: при выборе через функцию данных из all_source объекти типа PACKAGE_BODY тоже НЕ видит.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39140230
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uZverrr,

uZverrr1. при вызове функции от имени владельца я никак не получу данные объектов других схем
2. но если вызывать эту функцию от имени других пользователей, предоставив грант на EXECUTE, то конечно возможно (это проверил).

Но почему именно PACKAGE_BODY не выбирает?
А функции, процедуры, спецификации пакетов нормально берет.
Privileged user для DBMS_METADATA это SYS или пользователь, с ролью SELECT_CATALOG_ROLE.
Соответственно, если не SYS и definer rights, то да, по документации мы сами метаданные объектов не видим.
Касаемо того, почему не выбирает PACKAGE_BODY, а что-то выбирает: проше будет, если будет конкретный тест-кейс и версия.
Без этого сложно сказать.
Например, в первой попавшейся БД 11.2.0.3 запустил DBMS_METADATA.GET_DDL('PACKAGE', 'PKG_NAME', 'USER..') имея права на EXECUTE и получил ту же ошибку ORA-31603.
На нижнем уровне DBMS_METADATA делает запрос:
Код: plsql
1.
2.
PARSING IN CURSOR #139702392430560 len=204 dep=1 uid=236 oct=3 lid=236 tim=1451400028741414 hv=467340155 ad='41d602fe8' sqlid='2xajmwndxq2vv'
SELECT /*+rule*/ SYS_XMLGEN(VALUE(KU$), XMLFORMAT.createFormat2('FULL_PACKAGE_T', '7')), KU$.OBJ_NUM FROM SYS.KU$_FULL_PKG_VIEW KU$ WHERE KU$.SCHEMA_OBJ.NAME=:NAME1 AND  KU$.SCHEMA_OBJ.OWNER_NAME=:SCHEMA2


uid=236 - это SYS_CONTEXT('USERENV','CURRENT_USERID').
Запрос возвращает 0 строк:
Код: plsql
1.
FETCH #139702392430560:c=1000,e=369,p=0,cr=31,cu=0,mis=0,r=0,dep=1,og=3,plh=1091844984,tim=1451400028914129


Т.к. в коде KU$_FULL_PKG_VIEW, например:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create or replace force view ku$_full_pkg_view of ku$_full_pkg_t
  with object identifier (obj_num) as
  select '1','1',
         oo.obj#,
         value(o),
         value(p),
         (select value(pb) from ku$_pkgbdy_view pb
          where oo.name  = pb.schema_obj.name
          and o.owner_name  = pb.schema_obj.owner_name)
  from   sys.ku$_edition_obj_view oo, ku$_edition_schemaobj_view o, ku$_pkg_view p
  where oo.type# = 9
    and oo.obj#  = o.obj_num
    and oo.obj#  = p.schema_obj.obj_num
         AND (SYS_CONTEXT('USERENV','CURRENT_USERID') IN (o.owner_num, 0) OR
              EXISTS ( SELECT * FROM sys.session_roles
                       WHERE role='SELECT_CATALOG_ROLE' ))


Т.е. проверка на то, что: пользователь владелец, SYS или имеет SELECT_CATALOG_ROLE.
Таким образом, в первой попавшейся 11.2.0.3 спецификации пакетов - не берет, что соответствует документации.
Поэтому и нужен тест кейс и версия, чтобы предметно посмотреть.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39140287
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeaGate,

Перечитай мой ответ, особенно выделенное желтым:

Код: plsql
1.
authid current_user



Так-что повторю:

Код: 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.
95.
96.
97.
98.
99.
100.
101.
SQL> drop user u1 cascade;

User dropped.

SQL> create user u1 identified by u1
  2  default tablespace users
  3  quota unlimited on users
  4  /

User created.

SQL> grant create session,create procedure to u1
  2  /

Grant succeeded.

SQL> grant select_catalog_role to u1
  2  /

Grant succeeded.

SQL> create or replace
  2    package pkg1
  3      is
  4        procedure p1;
  5  end;
  6  /

Package created.

SQL> create or replace
  2    package body pkg1
  3      is
  4        procedure p1
  5          is
  6          begin
  7              null;
  8        end;
  9  end;
 10  /

Package body created.

SQL> connect u1/u1@pdb1sol12
Connected.
SQL> create or replace
  2    function f1
  3      return clob
  4      is
  5      begin
  6          return dbms_metadata.get_ddl(object_type=>'PACKAGE_BODY',name=> 'PKG1',schema=>'SCOTT');
  7  end;
  8  /

Function created.

SQL> select  f1
  2    from  dual
  3  /
ERROR:
ORA-31603: object "PKG1" of type PACKAGE_BODY not found in schema "SCOTT"
ORA-06512: at "SYS.DBMS_METADATA", line 6069
ORA-06512: at "SYS.DBMS_METADATA", line 8666
ORA-06512: at "U1.F1", line 5



no rows selected

SQL> create or replace
  2    function f1
  3      return clob
  4      authid current_user
  5      is
  6      begin
  7          return dbms_metadata.get_ddl(object_type=>'PACKAGE_BODY',name=> 'PKG1',schema=>'SCOTT');
  8  end;
  9  /

Function created.

SQL> set long 1000
SQL> select  f1
  2    from  dual
  3  /

F1
--------------------------------------------------------------------------------

  CREATE OR REPLACE EDITIONABLE PACKAGE BODY "SCOTT"."PKG1"
    is
      procedure p1
        is
        begin
            null;
      end;
end;


SQL> 



SY.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39140292
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeaGateПоэтому и нужен тест кейс и версия, чтобы предметно посмотреть.

Что тут смотреть? Ты эмпирически (а мог-бы просто покурить доку) вывел "проверка на то, что: пользователь владелец, SYS или имеет SELECT_CATALOG_ROLE". Но затем тебя вдруг понесло "имея права на EXECUTE и получил ту же ошибку ORA-31603". Тут две проблемы. Первая как говорит дока и как ты эмпирически вывел - DBMS_METADATA не реагирует ни на какие привилегии - ты или owner, или sys или имеешь select_catalog_role. А можешь ты выполнять пакет или нет - по-барабану. Вторая - привилегия execute позволяет выполнять пакет, но не позволяет видеть текст (DBA/ALL_SOURCE.TEXT) пакета. Чтобы видеть текст (DBA/ALL_SOURCE.TEXT) чужого пакета требуется привилегия debug.

SY.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39140426
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,
SYТы эмпирически (а мог-бы просто покурить доку) вывел "проверка на то, что: пользователь владелец, SYS или имеет SELECT_CATALOG_ROLE".

1. Я привык проверять то, про что я читаю.
2. К чему про "мог-бы просто покурить доку", если дока уже была изучена (все тома заново не успел прочитать, но Security Model по диагонали прочел):
SeaGatePrivileged user для DBMS_METADATA это SYS или пользователь, с ролью SELECT_CATALOG_ROLE.
Соответственно, если не SYS и definer rights, то да, по документации мы сами метаданные объектов не видим.

SYА можешь ты выполнять пакет или нет - по-барабану.

1. Извини, может что-то я не увидел, но вот uZverrr пишет:
uZverrr2. но если вызывать эту функцию от имени других пользователей, предоставив грант на EXECUTE, то конечно возможно (это проверил).
...
Но почему именно PACKAGE_BODY не выбирает?
А функции, процедуры, спецификации пакетов нормально берет.

Что я трактую как: "есть execute", видит PACKAGE_SPEC, PACKAGE_BODY - не видит (ORA-31603).
Что не совпадает с документацией и моим, собранным на коленке, тестом.
Поэтому я и попросил предоставить тест кейс, чтобы проверить, что я правильно понимаю его задачу.
2. про "по-барабану" и почему я еще начал эмпирически проверять: да просто потому, что DBMS_METADATA не самая простая и беспроблемная часть ORACLE.
Особенно, начиная с 11g, когда представления словаря были доработаны с поддержкой EBR.
Например, вот один из первых моих багов 2012 года после адаптации EBR, с подобным я до сих пор сталкиваюсь в 11.2.0.4 с летним PSU (не на VIEW, уже на TYPE):
Bug 15922287 : DBMS_METADATA FOR A VIEW FAILED WITH ERROR ORA-1427
К слову, по этому багу было несколько итераций с предоставлением патчей. Видимо, громоздкий код DBMS_METADATA(и используемого ей кода) и/или плохие разработчики Oracle, что за несколько итераций не могут патч нормальный выкатить.
EBR это верхушка айсберга, просто из наболевшего. Баги оптимизатора с каждой версией прибывают/убывают и много чего еще из серии known unknowns и unknown unknowns.
Поэтому если я читаю про то, что DBMS_METADATA работает не так, как описано в документации, то я прошу предоставить пример.
SYПеречитай мой ответ, особенно выделенное желтым:
authid current_user

Прочитал, откровения не увидел. Про invoker rights, роль SELECT_CATALOG_ROLE и влияние на DBMS_METADATA я в курсе.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39140553
uZverrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ночь перекурил и вроде допонял кой-чего...
Все делаем от имени USER1:
1.
Код: plsql
1.
select dbms_metadata.get_ddl('PACKAGE_BODY','PKG_NAME', 'USER2') from dual;


Просто селект работает для объектов любой схемы.
2.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
create or replace function USER1.test(rc out sys_refcursor) return number  is
  Result number;
begin
  open rc for
  select dbms_metadata.get_ddl('PACKAGE_BODY','PKG_NAME', 'USER2') from dual;            

  return 1;
end test;


Такой вариант (без authid current_user) выдает ошибку 31603
3.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
create or replace function USER1.test(rc out sys_refcursor) return number authid current_user is
  Result number;
begin
  open rc for
  select dbms_metadata.get_ddl('PACKAGE_BODY','PKG_NAME', 'USER2') from dual;            

  return 1;
end test;


Такой вариант работает для любых посторонних схем.

Итого: фактически вызов всегда идет от USER1, но получается, что при вызове функции у которой не прописано authid current_user, вызов происходит будто не от USER1 или не подхватываются гранты какие.... Не знаю как правильно это обозвать.

Для такого варианта при наличии authid current_user тож вроде все работает:
Код: plsql
1.
2.
3.
4.
SELECT t.owner, t.type, t.name, dbms_metadata.get_ddl(decode(t.type,'PACKAGE BODY','PACKAGE_BODY',t.type), t.name, t.owner)
FROM all_source t
WHERE owner = 'USER2'
group by t.owner, t.type, t.name;



SeaGate, SY большое спасибо за участие. Надеюсь далее вопросов не возникнет.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39140725
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uZverrr,
uZverrrТакой вариант работает для любых посторонних схем.

Это идет вразрез с документацией и, к сожалению, я не могу это воспроизвести в ближайшей 12.1.0.2.
Ниже пример, который это демонстрирует:

Код: 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.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
SQL> drop user user1 cascade;

User dropped.

SQL> drop user user2 cascade;

User dropped.

SQL> drop user user3 cascade;

User dropped.

SQL>
SQL> grant connect to user1 identified by user1;

Grant succeeded.

SQL> grant create procedure to user1;

Grant succeeded.

SQL>
SQL> grant connect to user2 identified by user2;

Grant succeeded.

SQL> grant create procedure to user2;

Grant succeeded.

SQL>
SQL> grant connect to user3 identified by user3;

Grant succeeded.

SQL>
SQL> conn user2/user2
Connected.
SQL>
SQL> create or replace package pkg_name
  2  is
  3    procedure p;
  4  end;
  5  /

Package created.

SQL>
SQL> create or replace package body pkg_name
  2  is
  3    procedure p
  4    is
  5    begin
  6      null;
  7    end;
  8  end;
  9  /

Package body created.

SQL>
SQL> conn user1/user1
Connected.
SQL>
SQL> create or replace function USER1.test(rc out sys_refcursor) return number
  2    authid current_user
  3  is
  4    Result number;
  5  begin
  6    open rc for
  7    select dbms_metadata.get_ddl('PACKAGE_BODY','PKG_NAME', 'USER2') ddl from dual;
  8
  9    return 1;
 10  end test;
 11  /

Function created.

SQL>
SQL> grant execute on test to user3;

Grant succeeded.

SQL>
SQL> conn user3/user3
Connected.
SQL>
SQL> select * from session_roles;

ROLE
--------------------------------------------------------------------------------
CONNECT

SQL> select authid from all_procedures where owner='USER1' and object_name='TEST';

AUTHID
------------
CURRENT_USER

SQL>
SQL> var rc refcursor
SQL>
SQL> set autop on long 100000
SQL>
SQL> exec dbms_output.put_line( user1.test(:rc))

PL/SQL procedure successfully completed.

ERROR:
ORA-31603: object "PKG_NAME" of type PACKAGE_BODY not found in schema "USER2"
ORA-06512: at "SYS.DBMS_METADATA", line 6069
ORA-06512: at "SYS.DBMS_METADATA", line 8666
ORA-06512: at line 1



no rows selected



Чтобы заработало не под SYS и владельцем пакета нужно выдать вызывающему пользователю SELECT_CATALOG_ROLE:

Код: 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.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
SQL> drop user user1 cascade;

User dropped.

SQL> drop user user2 cascade;

User dropped.

SQL> drop user user3 cascade;

User dropped.

SQL>
SQL> grant connect to user1 identified by user1;

Grant succeeded.

SQL> grant create procedure to user1;

Grant succeeded.

SQL> grant connect to user2 identified by user2;

Grant succeeded.

SQL> grant create procedure to user2;

Grant succeeded.

SQL>
SQL> grant connect to user3 identified by user3;

Grant succeeded.

SQL> grant select_catalog_role to user3;

Grant succeeded.

SQL>
SQL> conn user2/user2
Connected.
SQL>
SQL> create or replace package pkg_name
  2  is
  3    procedure p;
  4  end;
  5  /

Package created.

SQL>
SQL> create or replace package body pkg_name
  2  is
  3    procedure p
  4    is
  5    begin
  6      null;
  7    end;
  8  end;
  9  /

Package body created.

SQL>
SQL> conn user1/user1
Connected.
SQL>
SQL> create or replace function USER1.test(rc out sys_refcursor) return number
  2    authid current_user
  3  is
  4    Result number;
  5  begin
  6    open rc for
  7    select dbms_metadata.get_ddl('PACKAGE_BODY','PKG_NAME', 'USER2') ddl from dual;
  8
  9    return 1;
 10  end test;
 11  /

Function created.

SQL>
SQL> grant execute on test to user3;

Grant succeeded.

SQL>
SQL> conn user3/user3
Connected.
SQL>
SQL> select * from session_roles;

ROLE
--------------------------------------------------------------------------------
CONNECT
SELECT_CATALOG_ROLE
HS_ADMIN_SELECT_ROLE

SQL> select authid from all_procedures where owner='USER1' and object_name='TEST';

AUTHID
------------
CURRENT_USER

SQL>
SQL> var rc refcursor
SQL>
SQL> set autop on long 100000
SQL>
SQL> exec dbms_output.put_line( user1.test(:rc))

PL/SQL procedure successfully completed.


DDL
--------------------------------------------------------------------------------

  CREATE OR REPLACE EDITIONABLE PACKAGE BODY "USER2"."PKG_NAME"
is
  procedure p
  is
  begin
    null;
  end;
end



С definer rights можно решить задачу, например, с помощью CBAC (Code Based Access Control, 12c):

Код: 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.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
SQL> drop user user1 cascade;

User dropped.

SQL> drop user user2 cascade;

User dropped.

SQL> drop user user3 cascade;

User dropped.

SQL>
SQL> grant connect to user1 identified by user1;

Grant succeeded.

SQL> grant create procedure to user1;

Grant succeeded.

SQL> grant select_catalog_role to user1 with delegate option;

Grant succeeded.

SQL>
SQL> grant connect to user2 identified by user2;

Grant succeeded.

SQL> grant create procedure to user2;

Grant succeeded.

SQL>
SQL> grant connect to user3 identified by user3;

Grant succeeded.

SQL>
SQL> conn user2/user2
Connected.
SQL>
SQL> create or replace package pkg_name
  2  is
  3    procedure p;
  4  end;
  5  /

Package created.

SQL>
SQL> create or replace package body pkg_name
  2  is
  3    procedure p
  4    is
  5    begin
  6      null;
  7    end;
  8  end;
  9  /

Package body created.

SQL>
SQL> conn user1/user1
Connected.
SQL>
SQL> create or replace function USER1.test(rc out sys_refcursor) return number
  2    --authid current_user
  3  is
  4    Result number;
  5  begin
  6    open rc for
  7    select dbms_metadata.get_ddl('PACKAGE_BODY','PKG_NAME', 'USER2') ddl from dual;
  8
  9    return 1;
 10  end test;
 11  /

Function created.

SQL>
SQL> grant select_catalog_role to function test;

Grant succeeded.

SQL>
SQL> grant execute on test to user3;

Grant succeeded.

SQL>
SQL> conn user3/user3
Connected.
SQL>
SQL> select * from session_roles;

ROLE
--------------------------------------------------------------------------------
CONNECT

SQL> select authid from all_procedures where owner='USER1' and object_name='TEST';

AUTHID
------------
DEFINER

SQL>
SQL> var rc refcursor
SQL>
SQL> set autop on long 100000
SQL>
SQL> exec dbms_output.put_line( user1.test(:rc))

PL/SQL procedure successfully completed.


DDL
--------------------------------------------------------------------------------

  CREATE OR REPLACE EDITIONABLE PACKAGE BODY "USER2"."PKG_NAME"
is
  procedure p
  is
  begin
    null;
  end;
end;



uZverrrИтого: фактически вызов всегда идет от USER1, но получается, что при вызове функции у которой не прописано authid current_user, вызов происходит будто не от USER1 или не подхватываются гранты какие.... Не знаю как правильно это обозвать.

Ну это конечно:
ТОП №4
Хотя я что-то не вижу, где там явно написано, что сами роли владельца (а не выданные им права) не видны в definer rights program unit,
поэтому вот документация, где это явно указано: Security Guide: How Roles Work in PL/SQL Blocks
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39144455
uZverrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще одна загадка...
У пользователя есть роль SELECT_CATALOG_ROLE.
Есть 2 функции:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create or replace function getSource return varchar2 is
  result varchar2(1000);
begin
  for c in (select v.type, count(*) cnt
              from (select t.owner, t.type
                      from all_source t
                     where t.TYPE in ('PACKAGE BODY', 'PACKAGE')
                     group by t.owner, t.type) v
             group by v.type) loop
    result := result || c.type || '-' || c.cnt || chr(13);
  end loop;
  return result;
end getSource;


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create or replace function getSource1 return varchar2 authid current_user is
  result varchar2(1000);
begin
  for c in (select v.type, count(*) cnt
              from (select t.owner, t.type
                      from all_source t
                     where t.TYPE in ('PACKAGE BODY', 'PACKAGE')
                     group by t.owner, t.type) v
             group by v.type) loop
    result := result || c.type || '-' || c.cnt || chr(13);
  end loop;
  return result;
end getSource1;



Результаты выполнения:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> select getsource from dual;
GETSOURCE
--------------------------------------------------------------------------------
PACKAGE-40
PACKAGE BODY-1

SQL> select getsource1 from dual;
GETSOURCE1
--------------------------------------------------------------------------------
PACKAGE-40
PACKAGE BODY-40

SQL> 


Почему не видит тела пакетов без authid current_user?
Хотя PACKAGE, FUNCTUIN и PROCEDURE видит.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39144746
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uZverrr,

Ты опять путаешь мягкое с тёплым. SELECT_CATALOG_ROLE разрешает выборку из DBA_XXX data dictionary views. А для ALL_XXX/USER_XXX он по-барабану. Чтобы видеть чужое в ALL_SOURCE необходим EXECUTE. Он дает возможность видеть "чужую" процедуру, функцию и спецификацию пакета. В этом и прелесть пакета - "чужие" с execute могут выполнять и смотреть спецификацию (число, порядок, типы параметров, etc.) но не тело пакета - нечего "чужим" знать как там на кухне. Для того что-бы видеть "чужую" кухню требуется DEGUG. Так-что у тебя владелец процедуры getsource скорее всего имеет доступ к "кухне" через роль. А роли с DEFINER RIGHTS игнорируются. Посему работает только getsource с AUTHID CURRENT_USER который роли не игнорирует.

SY.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39144840
uZverrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,
ну так чем чужая кухня типа "тело пакета" отличается от функции или процедуры?
Условно, если я фанатик чистых func&proc, то буду вести код не в пакетах, а отдельными func&proc.

Получится, что так я весь код увижу и без authid current_user...

Или тогда тут заморочка отдельная именно на тела пакетов...
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39144891
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uZverrrПолучится, что так я весь код увижу и без authid current_user...


Я ведь вроде понятно обьяснил: " В этом и прелесть пакета - "чужие" с execute могут выполнять и смотреть спецификацию (число, порядок, типы параметров, etc.) но не тело пакета - нечего "чужим" знать как там на кухне".

SY.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39145147
uZverrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,
ну теперь вроде окончательно понятно. Спасибо.
Просто для выгрузки всех объектов хотелось весь код запихнуть в один пакет. но из-за тел пакетов походу это не прокатит.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39145183
eev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uZverrrSY,
ну теперь вроде окончательно понятно . Спасибо.
Просто для выгрузки всех объектов хотелось весь код запихнуть в один пакет. но из-за тел пакетов походу это не прокатит . http://docs.oracle.com/database/121/SUTIL/GUID-EE2AA635-EA83-4265-9727-E9C659842CEF.htm#SUTIL1624 Note:
To access objects that are not in your own schema you must have the SELECT_CATALOG_ROLE role . However , roles are disabled within many PL/SQL objects (stored procedures, functions, definer's rights APIs). Therefore, if you are writing a PL/SQL program that will access objects in another schema (or, in general, any objects for which you need the SELECT_CATALOG_ROLE role), then you must put the code in an invoker's rights API.
один пользователь имеет код, который извлекает. другие пользователи его вызывают для своих схем.
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39184636
uZverrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите плиз:
1. Где найти список полей для DISABLE ключей, т.к. при отключении ключа связь с таблицей индексов пропадает.
2. И для FOREIGN ключей не могу найти где фиксируется список полей.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39583291
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал делать 2 запроса:
Код: plsql
1.
2.
select view_name from user_views
where dbms_lob.instr(dbms_metadata.get_ddl(object_type => 'VIEW', name => view_name), '@')>0;



и

Код: plsql
1.
2.
select view_name from user_views
where instr(dbms_metadata.get_ddl(object_type => 'VIEW', name => view_name), '@')>0;



оба выдают сообщение "ORA-31603: object "AB_STATE_PKG" of type VIEW not found in schema <имя схемы>". Но дело в том, что представления с таким именем в схеме нет:

Код: plsql
1.
select * from user_views where view_name='AB_STATE_PKG'



Этот запрос возвращает пустое множество.

Код: plsql
1.
select * from user_objects where OBJECT_NAME='AB_STATE_PKG'



А этот запрос возвращает 2 строки (спецификация и тело пакета).

Но причём здесь пакет, когда я делаю запросы из user_views?

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39583319
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic,

no_push_pred
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39583390
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

select /*+ no_push_pred(uv) */ view_name from user_views uv
where dbms_lob.instr(dbms_metadata.get_ddl(object_type => 'VIEW', name => view_name), '@')>0;

select /*+ no_push_pred(uv) */ view_name from user_views uv
where instr(dbms_metadata.get_ddl(object_type => 'VIEW', name => view_name), '@')>0;

- всё тоже самое: "ORA-31603: object "AB_STATE_PKG" of type VIEW not found in schema <имя схемы>"
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39583494
merch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
create or replace view tst_instr as select '@' str from dual; 

with view_list(view_name, rn) as
(
 select /*+ materialize*/ view_name, rownum from user_views uv
)
select view_name from view_list
where dbms_lob.instr(dbms_metadata.get_ddl(object_type => 'VIEW', name => view_name), '@') > 0;




VIEW_NAMETST_INSTR
...
Рейтинг: 0 / 0
ORA-31603 при использовании DBMS_METADATA.DEG_DDL
    #39584245
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
merch, да, шаманство сработало. Спасибо.
...
Рейтинг: 0 / 0
44 сообщений из 44, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-31603 при использовании DBMS_METADATA.DEG_DDL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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