--无参数的存储过程
create or replace procedure p_insert is
begin
insert into EMP.TBLJD values ('2006','湖南邵东');
commit;
end p_insert;
--没有参数的存储
create or replace procedure p_delete is
begin
delete EMP.TBLJD where jdid='2005';
commit;
end p_delete;
--存储调用存储
create or replace procedure p_execute is
begin
p_insert; --实现插入功能的存储
p_delete; --实现删除功能的存储
end p_execute;
--输入有参方法 PARAM1 IN VARCHAR2 (in 为传入参数)
CREATE OR REPLACE PROCEDURE PROC_IN(PARAM1 IN VARCHAR2,PARAM2 IN VARCHAR2)IS
BEGIN
INSERT INTO EMP.TBLJD (JDID,JDNAME)VALUES(PARAM1,PARAM2);
COMMIT;
END PROC_IN;
--输入输出方法
CREATE OR REPLACE PROCEDURE PROC_INOUT(newjdidv IN VARCHAR2,newjdnamev in varchar2, newjdid OUT VARCHAR,newjdname OUT VARCHAR)IS
BEGIN
select jdid ,jdname into newjdid,newjdname from emp.TBLJD WHERE jdid=newjdidv and jdname=newjdnamev;
END PROC_INOUT;
/****java 调用存储过程的方法****/
/*输入方法*/
/*
Produce proObj = new Produce();
CallableStatement proc = null;
try {
Connection conn = proObj.getConn();
proc=conn.prepareCall("{call PROC_IN(?,?)}");
proc.setString(1, "10001");
proc.setString(2, "中兴通讯");
proc.execute();
} catch (Exception e) {
e.printStackTrace();
}
*/
/*用存储过程的方式执行SQL*/
/*
Produce proObj = new Produce();
try{
Connection conn = proObj.getConn();
CallableStatement proc = null;
String sql="insert into TBLJD(JDID,JDNAME) values(?,?)";
proc = conn.prepareCall(sql);
proc.setString(1,"2000");
proc.setString(2,"留仙洞");
proc.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}*/
/*copy 的一些基础知识介绍*/
CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它;
IS关键词表明后面将跟随一个PL/SQL体。
BEGIN关键词表明PL/SQL体的开始。
NULL PL/SQL语句表明什么事都不做,这句不能删去,因为PL/SQL体中至少需要有一句;
END关键词表明PL/SQL体的结束
存储过程创建语法:
create or replace procedure 存储过程名(param1 in type,param2 out type)
as
变量1 类型(值范围); --vs_msg VARCHAR2(4000);
变量2 类型(值范围);
Begin
Select count(*) into 变量1 from 表A where列名=param1;
If (判断条件) then
Select 列名 into 变量2 from 表A where列名=param1;
Dbms_output。Put_line(‘打印信息’);
Elsif (判断条件) then
Dbms_output。Put_line(‘打印信息’);
Else
Raise 异常名(NO_DATA_FOUND);
End if;
Exception
When others then
Rollback;
End;
注意事项:
1, 存储过程参数不带取值范围,in表示传入,out表示输出
类型可以使用任意Oracle中的合法类型。
2, 变量带取值范围,后面接分号
3, 在判断语句前最好先用count(*)函数判断是否存在该条操作记录
4, 用select 。。。into。。。给变量赋值
5, 在代码中抛异常用 raise+异常名