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