oracle存储过程的使用教程步骤 下载本文

内容发布更新时间 : 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 quantity(finalintuserid,finalStringusername,finalinttype,final String date) {

return (List) super.getHibernateTemplate().execute(newHibernateCallback(){ @Override

public Object doInHibernate(Session session) throwsHibernateException, SQLException { List list=new ArrayList();

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{