1.~写。编写一个最最单的存储q程Q给它v个名字叫?
proc_helloworld CREATE OR
REPLACE PROCEDURE
proc_helloworld IS BEGIN
DBMS_OUTPUT.put_line ('Hello World!'); END; /
2.创徏。在sqlplus命o行界面创存储q程 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.q行。两U方法运行存储过E?/span> 1).需要在屏幕上显C出"DBMS_OUTPUT.put_line"的输出字W串Q需要做一个小的讄 sec@ora10g> show serveroutput serveroutput OFF sec@ora10g>set
serveroutput on sec@ora10g> show serveroutput serveroutput ON SIZE 10000 FORMAT WORD_WRAPPED
3).在一个无名PL/SQL块内q行存储q程 BEGIN proc_helloworld; END; /
sec@ora10g> BEGIN 2 proc_helloworld; 3 END; 4 / Hello World!
PL/SQL procedure successfully
completed.
4.修改。修改一个存储过E只需要将修改好的存储q程在sqlplus界面先重新执行一下即可,因ؓ在创
E中使用的是"CREATE OR REPLACE PROCEDURE"Q也是说如果没有就创徏Q如果已l存在了q个存储q程Q就替换?/span> CREATE OR REPLACE PROCEDURE proc_helloworld IS BEGIN
DBMS_OUTPUT.put_line ('Hello World! '||chr(10)||'I am a Happy DBA
Secooler!'); END; / 或?/span> 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.调试。对于非常复杂的存储q程的调试是真正体现个h力和能力的地方Q往往需要很多的l验Q这个急不得,
只能慢慢?Take it easy. 在sqlplus下调试存储过E时Q如果出现错误,时刻使用"show
errors"命o查看哪里出错了,例如Q?/span> 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.
通过提示Q问题出现在END后面没有分号l束W号Q修改后问题得到处理 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语句删除存储q?
E?/span> 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.获取。在l护存储q程的过E中往往
需要快速的获取存储q程的SQL创徏语句Q我l常使用的有如下两种Ҏ 1).使用DBMS_METADATA包获?/span> sec@ora10g>SELECT
DBMS_METADATA.get_ddl ('PROCEDURE', 'PROC_HELLOWORLD') from dual;
CREATE OR REPLACE PROCEDURE
"SEC"."PROC_HELLOWORLD" IS BEGIN DBMS_OUTPUT.put_line ('Hello World!'); END;
2).使用"USER_SOURCE"
视图获得Q本人推荐用这U方法查看,格式标准Q内容也全面 sec@ora10g>SELECT text FROM user_source WHERE NAME =
'PROC_HELLOWORLD';
TEXT ------------------------------------------------------------------------------------------------------------------------------ PROCEDURE proc_helloworld IS BEGIN DBMS_OUTPUT.put_line ('Hello
World!'); END;