初出茅庐,不知原来存储过程还可以写得如此复杂,而且还竟然可以调试!
好吧,得整理一下存储过程的一些语法,以备以后用到时可以查阅。
使用数据库:Oracle
数据库工具:PL/SQL Developer
在Oracle中使用存储过程可以声明单个存储过程,也可以使用包的方式一个存储过程包(PACKAGE)包含许多存储过程。
编写单个存储过程的格式可以参考下面这个例子,这是最简单的存储过程例子:
CREATE OR REPLACE PROCEDURE PROC_TEST IS /* 声明变量 */ count number; BEGIN /* SQL代码 */ select * from dual; /* 异常处理 */ EXCEPTIOIN WHEN NO_DATA_FOUND THEN --处理代码 WHEN OTHERS THEN --处理代码 END PROC_TEST; --这里也可以直接写成: "END;"
如果有许多存储过程,那么你可能需要用到存储过程包。在Oracle中使用存储过程包首先要先创建package声明存储过程,之后创建package body写存储过程的具体内容。
存储过程的package相当于Java中的接口,而package body就相当于Java中实现该接口的类。
1.声明存储过程
CREATE OR REPLACE PACKAGE PACK_ZOO IS /* 不带参数的存储过程 */ PROCEDURE WATCH_MONKEY; /* 带参数的存储过程 */ PROCEDURE FEED_MONKEY(p_food IN VARCHAR2, p_amount IN NUMBER); END PACK_ZOO;
①在oracle的存储过程中,形式参数(形参)声明用IN关键字。上面代码[p_food IN VARCHAR2] 中,p_food为变量名,IN为关键字,VARCAHR2为变量类型。
②在存储过程中声明参数,则是直接变量名后跟上变量类型,如下面代码中的name参数:[name VARCAHR2(12)]。
2.编写存储过程内容
CREATE OR REPLACE PACKAGE BODY PACK_ZOO IS /* * 不带参数的存储过程 */ PROCEDURE WATCH_MONKEY IS /* 参数声明 */ name VARCHAR2(12); BEGIN /* 处理体 */ SELECT * FROM DUAL; /* 异常处理 */ EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('无数据记录'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('异常代码:' + sqlcode); --sqlcode代表异常代码 DBMS_OUTPUT.PUT_LINE('异常信息:' + sqlerrm); --sqlerrm代表异常信息 END WATCH_MONKEY; /* *带参数的存储过程 */ PROCEDURE FEED_MONKEY(p_food IN VARCHAR2, p_amount IN NUMBER) IS /* 参数声明 */ name VARCHAR2(12); BEGIN /* 处理体 */ name := 'Hello Oracle!'; /* 异常处理 */ EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.put_line('CATCH EXCEPTIOIN'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('异常代码:' + sqlcode); --sqlcode代表异常代码 DBMS_OUTPUT.PUT_LINE('异常信息:' + sqlerrm); --sqlerrm代表异常信息 END FEED_MONKEY; END PACK_ZOO;
在方法体里要给一个变量赋值,应该使用符号 " := ",如:" name := 'Hello Oracle!' "。
这里用到的语法是PLSQL语法,想了解更多关于PLSQL语法的知识,可以看我的另一篇文章:PL/SQL基础语法
来源:https://www.cnblogs.com/chanshuyi/p/3834140.html