nullnull PL/SQLを使用してユーザーを作成する文を取得

6226 ワード

この文章を書く前に、xxxはnullnullのテーマを変える文章をいくつか書いたことがあります.知りたい人は前の文章をめくってもいいです.
    Create procedure:
create or replace procedure get_case_sqls_for_ddls_ver1 as
  cursor get_username is
    select username from dba_users;

begin
  for l_user in get_username loop
  
    DBMS_OUTPUT.PUT_LINE('-----------------------');
    DBMS_OUTPUT.PUT_LINE('select (case');
    DBMS_OUTPUT.PUT_LINE('        when ((select count(*)');
    DBMS_OUTPUT.PUT_LINE('               from   dba_users');
    DBMS_OUTPUT.PUT_LINE('               where  username = ''' ||
                         l_user.username || ''') > 0)');
    DBMS_OUTPUT.PUT_LINE('        then  dbms_metadata.get_ddl (''USER'', ''' ||
                         l_user.username || ''')');
    DBMS_OUTPUT.PUT_LINE('        else  to_clob (''   -- Note: User not found!'')');
    DBMS_OUTPUT.PUT_LINE('        end ) "--Extracted_DDL" from dual');
    DBMS_OUTPUT.PUT_LINE('UNION ALL');
  
    DBMS_OUTPUT.PUT_LINE('-----------------------');
    DBMS_OUTPUT.PUT_LINE('select (case');
    DBMS_OUTPUT.PUT_LINE('        when ((select count(*)');
    DBMS_OUTPUT.PUT_LINE('               from   dba_ts_quotas');
    DBMS_OUTPUT.PUT_LINE('               where  username = ''' ||
                         l_user.username || ''') > 0)');
    DBMS_OUTPUT.PUT_LINE('        then  dbms_metadata.get_granted_ddl (''TABLESPACE_QUOTA'',
''' || l_user.username || ''')');
    DBMS_OUTPUT.PUT_LINE('        else  to_clob (''   -- Note: No TS Quotas found!'')');
    DBMS_OUTPUT.PUT_LINE('        end )  from dual');
    DBMS_OUTPUT.PUT_LINE('UNION ALL');
  
    DBMS_OUTPUT.PUT_LINE('-----------------------');
    DBMS_OUTPUT.PUT_LINE('select (case');
    DBMS_OUTPUT.PUT_LINE('        when ((select count(*)');
    DBMS_OUTPUT.PUT_LINE('               from   dba_role_privs');
    DBMS_OUTPUT.PUT_LINE('               where  grantee = ''' ||
                         l_user.username || ''') > 0)');
    DBMS_OUTPUT.PUT_LINE('        then  dbms_metadata.get_granted_ddl (''ROLE_GRANT'',
''' || l_user.username || ''')');
    DBMS_OUTPUT.PUT_LINE('        else  to_clob (''   -- Note: No granted roles found!'')');
    DBMS_OUTPUT.PUT_LINE('        end ) from dual');
    DBMS_OUTPUT.PUT_LINE('UNION ALL');
  
    DBMS_OUTPUT.PUT_LINE('-----------------------');
    DBMS_OUTPUT.PUT_LINE('select (case');
    DBMS_OUTPUT.PUT_LINE('        when ((select count(*)');
    DBMS_OUTPUT.PUT_LINE('               from   dba_sys_privs');
    DBMS_OUTPUT.PUT_LINE('               where  grantee = ''' ||
                         l_user.username || ''') > 0)');
    DBMS_OUTPUT.PUT_LINE('        then  dbms_metadata.get_granted_ddl (''SYSTEM_GRANT'',
''' || l_user.username || ''')');
    DBMS_OUTPUT.PUT_LINE('        else  to_clob (''   -- Note: No System Privileges found!'')');
    DBMS_OUTPUT.PUT_LINE('        end ) from dual');
    DBMS_OUTPUT.PUT_LINE('UNION ALL');
  
    DBMS_OUTPUT.PUT_LINE('-----------------------');
    DBMS_OUTPUT.PUT_LINE('select (case');
    DBMS_OUTPUT.PUT_LINE('        when ((select count(*)');
    DBMS_OUTPUT.PUT_LINE('               from   dba_tab_privs');
    DBMS_OUTPUT.PUT_LINE('               where  grantee = ''' ||
                         l_user.username || ''') > 0)');
    DBMS_OUTPUT.PUT_LINE('        then  dbms_metadata.get_granted_ddl (''OBJECT_GRANT'',
''' || l_user.username || ''')');
    DBMS_OUTPUT.PUT_LINE('        else  to_clob (''   -- Note: No Object Privileges found!'')');
    DBMS_OUTPUT.PUT_LINE('        end ) from dual');
    DBMS_OUTPUT.PUT_LINE('/');
    DBMS_OUTPUT.PUT_LINE('----------------------------------------------------------------------');
  
  end loop;
end;
/

    毎日同じ理屈
航行者は木を方向を導く街灯にたとえ、労働者は木を風雨を遮る傘にたとえ、詩人は木を筆の下の精霊にたとえ、私は木を教師にたとえなければならない.それは私たちのために風雨を遮る傘で、方向を示す街灯で、知識の殿堂の金の鍵を開けることだ.
    The above proc when called with the foll. will give the SQLs for all users:
    
set head off
set pages 0
set serveroutput on size unlimited
spool /tmp/sqls_gathered_frm_trial_run_1.sql
exec get_case_sqls_for_ddls_ver1 
spool off

    These SQLs generated can in turn be run as follows to get the master-list of all the grants in the database:
    
spool /tmp/grants_by_running_trial3_ver0.0.sql
conn  / as sysdba
set head off
set long 1000000000
set pages 0
exec DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR',TRUE);
@/tmp/sqls_gathered_frm_trial_run_1.sql
spool off

    
文章は终わってみんなに次のプログラマーのいくつかのジョークの语录を分かち合います:1匹の犬が街をぶらぶらして、ショーウインドーの中で1枚の掲示を见ます:“プログラマーを募集します.プログラミングができて、チームワークの精神があって、少なくとも2つの言语に精通します.均等な机会.”その犬は中に入って申请して、しかし断られました.「犬を雇って会社で仕事をするわけにはいかない」と社長は言った.犬は不服で、告示の「均等な機会」を指さして抗議した.社長は仕方なく、ため息をついて、「プログラミングができますか」と尋ねた.その犬は黙ってパソコンの前に出て、プログラムを作って、正確に動いた.「チームワークはありますか?」マネージャーが尋ねた.その犬は振り向いてドアの外を見て、野良犬の群れが外で虎視眈々としている.「私は本当に犬を雇ってこの仕事をすることはできません」社長は怒って言った.「プログラミングができて、チームワークがあっても、必要な従業員は少なくとも2つの言語に精通しなければならない」その犬はマネージャーを見上げて言った.「ニャー.」