использование DBMS_METADATA?

Aliona
Дата: 19.12.2012 15:37:06
Получаю метаданные
SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT',u.grantee)||'/'
FROM SYS.DBA_ROLE_PRIVS u
where u.grantee='SCOTT';

получаю такой скрипт:
автор
GRANT "CONNECT" TO "SCOTT"

GRANT "SELECT_CATALOG_ROLE" TO "SCOTT"
/


Как добиться того, чтобы в скрипте все предложения разделялить ; или / ?
jan2ary
Дата: 19.12.2012 15:40:53
Например, так:
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR',true);
Aliona
Дата: 19.12.2012 15:54:15
Спасибо !
Aliona
Дата: 19.12.2012 16:15:33
еще одна неприятность

EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR',true);
SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT',u.grantee)||'/'
FROM SYS.DBA_ROLE_PRIVS u
where u.grantee='OWNER19';

получаю 4 раза одно и тоже
автор
PL/SQL procedure successfully completed.

DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT',U.GRANTEE)||'/'
--------------------------------------------------------------------------------

GRANT "CONNECT" TO "OWNER19" WITH ADMIN OPTION;

GRANT "RESOURCE" TO "OWNER19" WITH ADMIN OPTION;

GRANT "DBA" TO "OWNER19" WITH ADMIN OPTION;

GRANT "IPS" TO "OWNER19";
/

GRANT "CONNECT" TO "OWNER19" WITH ADMIN OPTION;

GRANT "RESOURCE" TO "OWNER19" WITH ADMIN OPTION;

GRANT "DBA" TO "OWNER19" WITH ADMIN OPTION;

GRANT "IPS" TO "OWNER19";
/

DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT',U.GRANTEE)||'/'
--------------------------------------------------------------------------------
GRANT "CONNECT" TO "OWNER19" WITH ADMIN OPTION;

GRANT "RESOURCE" TO "OWNER19" WITH ADMIN OPTION;

GRANT "DBA" TO "OWNER19" WITH ADMIN OPTION;

GRANT "IPS" TO "OWNER19";
/

GRANT "CONNECT" TO "OWNER19" WITH ADMIN OPTION;

GRANT "RESOURCE" TO "OWNER19" WITH ADMIN OPTION;

GRANT "DBA" TO "OWNER19" WITH ADMIN OPTION;

GRANT "IPS" TO "OWNER19";
/

4 rows selected.
dba123
Дата: 19.12.2012 16:21:00
Aliona,

FROM DUAL
jan2ary
Дата: 19.12.2012 16:23:35
Это потому что из dba_role_privs приходят четыре строки по заданному условию (т.е. четыре роли выдано пользователю/роли OWNER19), для каждой из них для этого пользователя/роли вызывается GET_GRANTED_DDL.
GET_GRANTED_DDL возвращает clob, т.е. в одной строке все ддли запрошенного типа GET_xxx_DDL.
Aliona
Дата: 19.12.2012 16:39:07
dba123
Aliona,

FROM DUAL

это действительно выдаёт данные один раз, но мне не совсем удобно так писать
Aliona
Дата: 19.12.2012 16:48:22
jan2ary
Это потому что из dba_role_privs приходят четыре строки по заданному условию (т.е. четыре роли выдано пользователю/роли OWNER19), для каждой из них для этого пользователя/роли вызывается GET_GRANTED_DDL.
GET_GRANTED_DDL возвращает clob, т.е. в одной строке все ддли запрошенного типа GET_xxx_DDL.

я так и поняла.
Если GRANTED_DDL будет у пользователя n, получу n*n строк
А если пользователей будет m, то получим m*n*n строк


Вот эти функции такого не делают, их результат меня устраивает
автор
SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT',a.username)||'/'
from sys.dba_users a where a.username='OWNER19';

SELECT DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT',a.username)||'/'
from sys.dba_users a where a.username='OWNER19';
Вячеслав Любомудров
Дата: 20.12.2012 02:20:15
Aliona
dba123
Aliona,

FROM DUAL

это действительно выдаёт данные один раз, но мне не совсем удобно так писать
Почему, если не секрет?

И почему через sys.dba_users (у всех есть туда доступ?) удобнее?

PS. Создается впечатление, что ты только изредка выходишь из больницыработаешь с ораклом
не_могу_пройти_мимо
Дата: 20.12.2012 08:41:07
Aliona
Вот эти функции такого не делают, их результат меня устраивает
...
SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT',a.username)||'/'
from sys.dba_users a where a.username='OWNER19';

бррр, Aliona вы же не "первый год замужем", вам же сказали причину.

Чем хуже такой вариант
SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT','OWNER19')||'/'    
    from dual;

требование начальства наличия dba_users для солидности ?