关系oracle数据库过程

       好久没有来到这里了,没有什么心思写东西了,因为说真的现在学的却不知道怎么去描述,自己随便写写,下面开始进入正题.

       在初级的时候没有涉及到数据库编程,只是简单的Java中传送一个sql语句到数据库,然后返回查询的结果在进行判断,说实话没有觉得有什么不对的,当然了,也看到过一些关于软件性能一些方面的东西,但是限于个人知识面的原因,那时候还没有仔细考虑,知道最近开始学习了数据库变成之后,才发现还有很大的提升,当然了,即便是现在这样,肯定还会有提升空间的,毕竟是新人么。

       先简单的说一下效率的问题,个人理解,先说一下初级的时候执行数据库的增删改查的时候都要传送一个sql语句,然后进入数据库之后执行,但是当大量的数据发生的时候,每一个都要发送一个sql语句的话就会造成资源的浪费。而过程呢就是将过程存储到数据库中,在Java中只要传一个对象过去,调用对应的方法,然后取到返回值,这样在效率上面就有了一定的提升了。

       简单的过程语法是

CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter_list)]
{IS|AS}
[local_declarations]
BEGIN
executable_statements
[EXCEPTION
exception_handlers]
END [procedure_name];

 

create or replace procedure proc_getEnameById(var_empno in number)
as
--在过程内部,变量直接定义,不需显示编写declare
var_ename varchar2(50);
begin
select ename into var_ename from emp where emp.empno=var_empno;
dbms_output.put_line('员工姓名为:'||var_ename);
end;

       过程现阶段就接触过很简单的一些,毕竟现在还在学习中,没有接触过太多

       我现阶段用到最多的应该就是增删改查了。

       1.添加用户的代码,以自己新建的userinfo表为标准,其中有userid,username,userpwd三个属性,另外创建了一个序列,seq_userinfo

create or replace procedure proc_addUser
(var_username in varchar2,var_userpwd in varchar2,var_count out number)

as

begin

insert into userinfo values(seq_userinfo.nextval,var_username,var_userpwd);

var_count:=1;

exception when others then

var_count:=0;

end;

     而调用呢分为Java中和数据库中调用了

     在oracle中的调用

--ORACLE中调用
declare
var_username varchar2(50):='李四';
var_userpwd varchar2(50):='ls123';
var_count number;
begin
proc_addUser(var_username,var_userpwd,var_count);
dbms_output.put_line(var_count);
end;

     在Java中调用

 String sql="{call proc_addUser(?,?,?)}";
con=DBUtil.getConnetion();//这个可以就是连接的,只是封装到一个类中了
CallableStatement cstm =con.prepareCall(sql);
//设置过程的参数 in,in ,out
//注意下标             1   2   3 
//out参数注册 index,Types(sql)
cstm.registerOutParameter(3, Types.INTEGER);
cstm.setString(1, "李四");
cstm.setString(2, "ls123");
//执行
cstm.execute();
//显示结果
int count=cstm.getInt(3);
if(count==1){
    System.out.println("添加用户");
}
else{
   System.out.println("用户不合法");
}

       增删改,个人认为还是一样的,只是在过程当众有那么一个sql语句是不一样的,其他方面应该没有太大的区别,下面应该就是最麻烦的查了。

       在查询的时候用到了游标,

create or replace procedure proc_emp(cur_emp out sys_refcursor)
is
begin
open cur_emp for select * from emp;
end;

 在oracle中调用

declare
cur_temp sys_refcursor;
var_emprow emp%rowtype;
begin
proc_emp(cur_temp); --这样这个游标就有值了
fetch cur_temp into var_emprow;
while cur_temp%found loop
dbms_output.put_line(var_emprow.empno||var_emprow.ename);
fetch cur_temp into var_emprow;
end loop;--由于可能不是一个值,所以要循环的
end;

      Java当众调用

String sql = "{call proc_emp(?)} ";
// 调用DBUtil 数据访问类的方法
Connection con = DBUtil.getConnetion();
CallableStatement cstm =con.prepareCall(sql);
cstm.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);
cstm.execute();
ResultSet rs = (ResultSet)cstm.getObject(1);
while(rs.next()){
System.out.println(rs.getString(1)+rs.getString(2)+rs.getString(3));}

 

--1完成用户信息表的所有信息查询
--2完成根据用户姓名模糊查询返回结果集过程

大体上就这些,其实还有其他的等一下在写写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值