内容发布更新时间 : 2024/11/18 2:48:04星期一 下面是文章的全部内容请认真阅读。
存储过程的使用教程步骤
第一步:在plsql中的新建一个存储过程文件
点击这个文件夹,右键新建
输入存储过程的名字,然后确定即ok
第二步:编写sql语句
这个我就不在这说了,自己会写就好。
第三步:编写存储过程 1. 不传参数
如果是不传参数的过程,则将第一行的(Nameinouttype,Nameinouttype, ...)去掉
则效果如下:
createorreplaceproceduretestis begin
endtest;
然后在里边定义一个v_sql,这个数值最大是4000(sql语句的长度) 则效果如下:
createorreplaceproceduretestis v_sql varchar2(4000); begin
endtest;
然后将写好的sql语句直接粘贴在begin和end之间,连接符使用v_sql 则效果如下:
createorreplaceproceduretestis v_sql varchar2(4000); begin
v_sql:=v_sql ||’ select * from tb_user’; endtest;
然后是打印sql语句(可选择是否添加),再添加一些固定格式 则效果如下(最终效果):
createorreplaceproceduretestis v_sql varchar2(4000); begin
v_sql:=v_sql ||’ select * from tb_user’;
dbms_output.put_line(v_sql); executeimmediatev_sql; commit;
EXCEPTION
whenothersthen
DBMS_OUTPUT.put_line(sqlcode); endtest;
2. 传参数
如果是传参数的过程,则修改一下默认的输入和输出,这里就传一个时间(类型最好定义成string)、一个userid、一个username、一个类型为例 则效果如下:
createorreplaceproceduretest(p_userid in number,
p_username in varchar2, p_date in varchar2, p_typeint number,
p_cursor out sys_refcursor)is
begin
endtest;
然后对传的参数的判断,需要再定义一个变量,并在需要判断的地方引用。(查询userid、username的集合) 则效果如下(最终效果):
createorreplaceproceduretest(p_userid in number,
p_username in varchar2, p_date in varchar2, p_typeint number,
p_cursor out sys_refcursor)is
v_sqlvarchar(4000);
v_conditionvarchar(100); v_condition1varchar(100);
begin
v_condition := ’’;
ifp_type is not null then ifp_type = 1 then
v_condition :=v_condition || ’t.userid=’; v_condition :=v_condition || p_userid; v_condition := v_condition || ’’’; else
v_condition := v_condition || ’t.userid= 1’; end if; end if;
v_condition1 := ’’; ifp_dateisnotnullthen
v_conditon1:= v_conditon1||' and t.add_date=to_date('''; v_conditon1:= v_conditon1||p_date; v_conditon1:= v_conditon1||' 00:00:00'',''YYYY-MM-DD HH24:MI:SS'')'; end if;
v_sql := v_sql ||’ select t.userid,t.username from tb_user t where t.username=’’;
v_sql := v_sql ||p_username;
v_sql := v_sql ||’’ and ’; v_sql := v_sql ||v_condition; v_sql := v_sql ||’and ’;
v_sql := v_sql || v_condition1;
v_sql := v_sql ||’order by t.add_date’;
dbms_output.put_line(v_sql); executeimmediatev_sql; commit;
EXCEPTION
whenothersthen
DBMS_OUTPUT.put_line(sqlcode);
endtest;
备注:如果是字符串类型的就需要用 ’’括起来;那个日期是使用的字符串,所以使用了to_date(p_date,''YYYY-MM-DD HH24:MI:SS'')转化为了date类型。
第四步:编写的代码 1. 新建一个实体类,
建立一个临时存储的实体类(该实体类不使用注解生成表),表字段的多少就是
查询的字段的多少,保证一个字段存一个字段。
2. 编写Dao层的代码
public List
return (List
public Object doInHibernate(Session session) throwsHibernateException, SQLException { List
Connection con=session.connection(); ResultSetrs=null;
CallableStatement call=null; try{
call=con.prepareCall(\); call.setString(1,userid); call.setFloat(2,username); call.setFloat(3,type); call.setString(4, date);
call.registerOutParameter(5, OracleTypes.CURSOR); call.executeQuery();
rs = (ResultSet) call.getObject(5);
while(rs.next()){
Test test=new Test();
test.setUserid(Integer.parseInt(rs.getString(1)));
test.setUsername(rs.getString(2)); list.add(sta);
}
}catch(SQLException e){
e.printStackTrace(); try {
if(rs!=null){ }
if(call!=null){ }
call.close(); rs.close();
}finally{