设为首页 收藏本站
查看: 595|回复: 0

[经验分享] Oracle存储过程及JDBC调用大全

[复制链接]

尚未签到

发表于 2016-7-25 07:15:16 | 显示全部楼层 |阅读模式
Oracle存储过程及JDBC调用大全(原创)
-----------------无返回值示例------------------------
存储过程:
·添加学生,如果班级不存在,则先添加班级信息,再添加学生。
create or replace procedure sp_add_stu
(
  p_stu_id t_stu.s_id%type, --参数类型定义为字段类型
  p_s_name t_stu.s_name%type,
  p_c_id t_class.c_id%type
)
as
  num number;
  new_name t_stu.s_name%type;
begin
  --处理姓名(如果不从查询结果取值,用 := )
  new_name := substr(trim(p_s_name),1,8);
 
  --将查询结果保存到变量,只能用select into
   select count(*) into num from t_class c where c.c_id=p_c_id;
   if(num=0) then
       insert into t_class(c_id,c_name) values(p_c_id,'新班');
    end if;
   
  insert into t_stu(s_id,s_name,c_id,s_sex)
  values(p_stu_id,new_name,p_c_id,'1');
   
  commit;
 
  dbms_output.put_line('执行完毕');
end;
 -----------------在Oracle中调用(无返回值)-----------------
SQL> call sp_add_stu(800,'李小龙',88);
 
Method called
 
SQL>
 
-----------------JDBC调用(无返回值)-----------------
Connection conn = null;
CallableStatement cstmt = null;
conn = DriverManager.getConnection(url, user, password);
String procedure = "{call sp_add_stu(?,?,?)}";
cstmt = conn.prepareCall(procedure);
cstmt.setString(1, "2000");
cstmt.setString(2, "张三);
cstmt.setString(3, "40");
cstmt.executeUpdate();
-----------------返回结果值示例------------------------
·指定参数为out类型即可返回值
/**
存储过程与函数的区别:存储过程可以增删改,可以提交或回滚,而函数不能。
函数只能计算
 
如处理某个单据(进货单),如输入用户帐号,经过复杂处理以后,
返回此用户的欠费单据号
*/
create or replace procedure sp_value(
id1 in number,
id2 out number
)
as
begin
  id2 := id1*200;
end;
 
-----------------调用(有简单返回值)----------------
Connection conn = null;
CallableStatement cstmt = null;
conn = DriverManager.getConnection(url, user, password);
String procedure = "{call sp_value(?,?)}";
cstmt = conn.prepareCall(procedure);
--------------------JDBC获取存储过程中的值-------------------
//学号、姓名、班级编号
cstmt.setString(1, "2000");
//注册输出参数
cstmt.registerOutParameter(2, java.sql.Types.INTEGER);
cstmt.executeUpdate();
//从输出参数中获取值
int value = cstmt.getInt(2);
System.out.println("返回: "+value);
 
 
-----------------返回结果集示例------------------------
·建包,包中定义游标类型变量
CREATE OR REPLACE PACKAGE TESTPACKAGE  AS
    TYPE Test_CURSOR IS REF CURSOR; --自定义一个引用游标类型
end;
 
·存储过程返回指定游标类型变量
 
CREATE OR REPLACE PROCEDURE sp_select_stu
(
p_c_id t_class.c_id%type,
p_cursor       out TESTPACKAGE.Test_CURSOR
自定义变量名   输出  变量所对应的数据类型(在包中自定义的)    
) IS
BEGIN
OPEN p_CURSOR FOR
   SELECT s.stu_id,s.s_name,to_char(s.s_birthday,'yy.mm') FROM t_stu s
   where s.c_id=p_c_id
   order by s.s_name;
END;
 
-----------------JDBC获取存储过程中的结果集---------------
Connection conn = null;
CallableStatement cstmt = null;
conn = DriverManager.getConnection(url, user, password);
String procedure = "{call sp_select_stu(?,?)}";
cstmt = conn.prepareCall(procedure);
//学号、姓名、班级编号
cstmt.setString(1, "C01");
//注册输出参数
cstmt.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);
cstmt.execute();
//从输出参数中获取值
ResultSet rs = (ResultSet)cstmt.getObject(2);//第2个?所代表的参数
 
ResultSetMetaData rmd =rs.getMetaData();
while(rs.next()){
for(int i=0;i<rmd.getColumnCount();i++){
  System.out.print(rs.getString(i+1)+" ");
}
System.out.println("");
}
rs.close();

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-248833-1-1.html 上篇帖子: oracle学习之7管理用户 下篇帖子: ibatis调用oracle存储过程分页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表