oracle procedurce很基礎(轉自:http://space.itpub.net/519536/viewspace-571504)

          本文通過一個最簡單的oracle存儲過程"proc_helloworld"的實驗,展現一下 存儲過程的開發和維護過程,適合超超超級初學小牛(like me)。

          1.編寫。編寫一個最最簡單的存儲過程,給它起個名字叫做 proc_helloworld
          CREATE OR REPLACE PROCEDURE proc_helloworld
          IS
          BEGIN
             DBMS_OUTPUT.put_line ('Hello World!');
          END;
          /

          2.創建。在sqlplus命令行界面創建該存儲過程
          sys@ora10g> conn sec/sec
          Connected.
          sec@ora10g> CREATE OR REPLACE PROCEDURE proc_helloworld
            2  IS
            3  BEGIN
            4     DBMS_OUTPUT.put_line ('Hello World!');
            5  END;
            6  /

          Procedure created.

          3.運行。兩種方法運行存儲過程
          1).需要在屏幕上顯示出"DBMS_OUTPUT.put_line"的輸出字符串,需要做一個小小的設置
          sec@ora10g> show serveroutput
          serveroutput OFF
          sec@ora10g>set serveroutput on
          sec@ora10g> show serveroutput
          serveroutput ON SIZE 10000 FORMAT WORD_WRAPPED

          2).在sqlplus命令行界面使用"EXECUTE"命令(簡寫 做"EXEC")執行
          sec@ora10g>exec proc_helloworld
          Hello World!

          PL/SQL procedure successfully completed.

          3).在一個無名PL/SQL塊內運行存儲過程
          BEGIN
             proc_helloworld;
          END;
          /

          sec@ora10g> BEGIN
            2     proc_helloworld;
            3  END;
            4  /
          Hello World!

          PL/SQL procedure successfully completed.

          4.修改。修改一個存儲過程只需要將修改好的存儲過程在sqlplus界面先重新執行一下即可,因為在創建過 程中使用的是"CREATE OR REPLACE PROCEDURE",也就是說如果沒有就創建,如果已經存在了這個存儲過程,就替換它
          CREATE OR REPLACE PROCEDURE proc_helloworld
          IS
          BEGIN
             DBMS_OUTPUT.put_line ('Hello World! '||chr(10)||'I am a Happy DBA Secooler!');
          END;
          /
          或者
          CREATE OR REPLACE PROCEDURE proc_helloworld
          IS
          BEGIN
             DBMS_OUTPUT.put_line ('Hello World!
          I am a Happy DBA Secooler!');
          END;
          /

          sec@ora10g> CREATE OR REPLACE PROCEDURE proc_helloworld
            2  IS
            3  BEGIN
            4     DBMS_OUTPUT.put_line ('Hello World! '||chr(10)||'I am a Happy DBA Secooler!');
            5  END;
            6  /

          Procedure created.

          看一下執行效果:
          sec@ora10g> exec proc_helloworld;
          Hello World!
          I am a Happy DBA Secooler!

          PL/SQL procedure successfully completed.

          5.調試。對于非常復雜的存儲過程的調試是真正體現個人魅力和能力的地方,往往需要很多的經驗,這個急不得, 只能慢慢來 Take it easy.
          在sqlplus下調試存儲過程時,如果出現錯誤,時刻使用"show errors"命令查看哪里出錯了,例如:
          sec@ora10g> CREATE OR REPLACE PROCEDURE proc_helloworld
            2  IS
            3  BEGIN
            4     DBMS_OUTPUT.put_line ('Hello World!');
            5 END
            6  /

          Warning: Procedure created with compilation errors.

          sec@ora10g> show errors
          Errors for PROCEDURE PROC_HELLOWORLD:

          LINE/COL ERROR
          -------- -----------------------------------------------------------------
          5/3      PLS-00103: Encountered the symbol "end-of-file" when expecting
                   one of the following:
                   ; <an identifier> <a double-quoted delimited-identifier>
                   delete exists prior <a single-quoted SQL string>
                   The symbol ";" was substituted for "end-of-file" to continue.

          通過提示,問題出現在END后面沒有分號結束符號,修改后問題得到處理
          sec@ora10g> CREATE OR REPLACE PROCEDURE proc_helloworld
            2  IS
            3  BEGIN
            4     DBMS_OUTPUT.put_line ('Hello World!');
            5  END;
            6  /

          Procedure created.

          6.刪除。使用drop語句刪除存儲過 程
          sec@ora10g> select object_name,object_type,status from user_objects where OBJECT_TYPE='PROCEDURE';

          OBJECT_NAME                    OBJECT_TYPE         STATUS
          ------------------------------ ------------------- -------
          PROC_HELLOWORLD                PROCEDURE           VALID

          sec@ora10g>DROP PROCEDURE proc_helloworld;

          Procedure dropped.

          sec@ora10g> select object_name,object_type,status from user_objects where OBJECT_TYPE='PROCEDURE';

          no rows selected

          7.獲取。在維護存儲過程的過程中往往 需要快速的獲取存儲過程的SQL創建語句,我經常使用的有如下兩種方法
          1).使用DBMS_METADATA包獲得
          sec@ora10g>SELECT DBMS_METADATA.get_ddl ('PROCEDURE', 'PROC_HELLOWORLD') from dual;

          DBMS_METADATA.GET_DDL('PROCEDURE','PROC_HELLOWORLD')
          --------------------------------------------------------------------------------

            CREATE OR REPLACE PROCEDURE "SEC"."PROC_HELLOWORLD"
          IS
          BEGIN
             DBMS_OUTPUT.put_line ('Hello World!');
          END;

          2).使用"USER_SOURCE" 視圖獲得,本人推薦使用這種方法查看,格式標準,內容也全面
          sec@ora10g>SELECT text FROM user_source WHERE NAME = 'PROC_HELLOWORLD';

          TEXT
          ------------------------------------------------------------------------------------------------------------------------------
          PROCEDURE proc_helloworld
          IS
          BEGIN
             DBMS_OUTPUT.put_line ('Hello World!');
          END;

          8.小結
          上面的實驗,我通過編寫、創建、運行、修改、調試、刪除和獲取七個內容描述了一個存儲過程的開發和維護過程。
          試驗,實驗還有實踐,技術工作者永遠不變的途徑!
          Goodluck Friends!

          -- The End --

          posted on 2010-04-16 15:40 duduli 閱讀(1768) 評論(1)  編輯  收藏 所屬分類: 數據庫業余DBA

          評論

          # re: oracle procedurce很基礎(轉自:http://space.itpub.net/519536/viewspace-571504) 2010-06-17 18:01 53中文網

          來留個言吧  回復  更多評論   

          <2010年4月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          導航

          統計

          公告

          welcome to my place.

          常用鏈接

          留言簿(5)

          我參與的團隊

          隨筆分類

          隨筆檔案

          新聞分類

          石頭JAVA擺地攤兒

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          @duduli
          主站蜘蛛池模板: 江津市| 阜南县| 福鼎市| 临湘市| 通辽市| 元谋县| 长子县| 新安县| 宜川县| 武川县| 厦门市| 安达市| 邻水| 普格县| 华池县| 龙胜| 蒲城县| 镇巴县| 德江县| 崇阳县| 资溪县| 鸡泽县| 亚东县| 贺州市| 安吉县| 酒泉市| 从化市| 台安县| 年辖:市辖区| 浪卡子县| 苍山县| 文水县| 郸城县| 鲁甸县| 基隆市| 文登市| 平度市| 周口市| 峡江县| 阿鲁科尔沁旗| 收藏|