国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

用DBMS_DDL包重編譯PL/SQL對象

2024-07-21 02:08:42
字體:
來源:轉載
供稿:網友
  • 網站運營seo文章大全
  • 提供全面的站長運營經驗及seo技術!

  •  

    用dbms_ddl包重編譯pl/sql對象

     



        本篇文章,我們將會看到怎樣用dbms_ddl包中的alter_compile過程重新編譯已存儲在數據庫的對象.

     

     alter_compile過程
     這個過程等價于如下語句
     alter procedure|function|package [<schema>.] <name> compile [body]
        語法
     dbms_ddl.alter_compile (
         type   varchar2,
        schema varchar2,
         name   varchar2);
     參數:

                 

    type

    數據庫對象的類型.正確值如下:

    procedure –重編譯指定的過程

    function –重編譯指定的函數

    package -重編譯指定的包頭和包體

    package_body -重編譯指定的包體

    trigger -重編譯指定的觸發器

    schema

     

    重編譯對象的方案名稱,若為null,則為當前方案名稱(大小寫敏感)

    name

     

    重編譯對象的名稱(大小寫敏感)

          

         現在,如果想重編譯一個程序,oracle首先會重編譯被標識invalid的程序所依賴的所有對象.

     

     例1:
     編譯myuser方案的access_rights過程:
     dbms_ddl.alter_compile('procedure','myuser','access_rights');

     

     例2:
     差不多每個實例中,pl/sql對象名稱以大寫方式存儲,如果創建時指定一個雙引號的對象名稱,那么當編譯時應指定同樣的方式.


     如果指定不正確,則會報以下的錯誤
     sql> dbms_ddl.alter_compile('procedure','myuser','access_rights');
     begin dbms_ddl.alter_compile('procedure','myuser','access_rights'); end;
     *
     error at line 1:
     ora-20000: unable to compile procedure "myuser"."access_rights",
      insufficient privileges or does not exist
     ora-06512: at "sys.dbms_ddl", line 68
     ora-06512: at line 1

     因此如果你創建如下的對象:
     create or replace procedure "my_object" is
     begin
     ...
     得使用:
     dbms_ddl.alter_compile('procedure','myuser','my_object');

     也可以使用alter procedure <procedure name> compile命令來編譯對象,用dbms_ddl包最大的優勢在于可以在以后的程序或pl/sql中編譯,這將擁有完全的靈活性以創建強有力的使用價值(請參照如下例子)

     

     例3:
     這個例子將獲得所有無效的對象并且重新編譯
     set termout on
     set serverout on
     declare
     cursor cur_invalid_objects is
     select object_name, object_type from user_objects where status='invalid';
     rec_columns cur_invalid_objects%rowtype;
     err_status numeric;
      begin
      dbms_output.enable(10000);
      open cur_invalid_objects;
      loop
      fetch cur_invalid_objects into rec_columns;
      exit when cur_invalid_objects%notfound;

      dbms_output.put_line
       ('recompiling ' || rec_columns.object_type || '  ' || rec_columns.object_name);
      dbms_ddl.alter_compile(rec_columns.object_type,null,rec_columns.object_name);
      end loop;
      close cur_invalid_objects;
      exception
      when others then
      begin
      err_status := sqlcode;
      dbms_output.put_line(' recompilation failed : ' || sqlerrm(err_status));
     
      if ( cur_invalid_objects%isopen) then
       close cur_invalid_objects;
      end if;
     
      exception when others then
      null;
     end;
     end;
     /


    總結:
      alter_compile可以代替手工而自動編譯對象,查找那些無效的對象從而一個一個地編譯.
    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 达日县| 云浮市| 麻阳| 洞头县| 甘孜县| 万山特区| 方正县| 贡嘎县| 西乡县| 吉安县| 弥渡县| 青州市| 钟山县| 景宁| 塔城市| 高邑县| 勐海县| 垣曲县| 祁门县| 尚志市| 河西区| 弥渡县| 安泽县| 宝兴县| 安吉县| 巫溪县| 遂昌县| 鹤山市| 屯门区| 阿鲁科尔沁旗| 崇文区| 丹东市| 武安市| 山东省| 当阳市| 象州县| 辉南县| 长白| 绥中县| 峨眉山市| 富蕴县|