大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说PL/SQL存储过程 结合IDEA 使用会出错的地方[前方高能请注意!]「终于解决」,希望您对编程的造诣更进一步.
PL/SQL中存储过程结合IDEA
一.存储过程是什么呢?
存储过程时被命名的PL/SQL块,存储于数据库中,是数据库对象的一种,应用程序可以调用存储过程,执行相应的逻辑
二.语法:
create [or replace] procedure 存储过程名称
--三种参数模式:
-- IN 传入参数(默认,可以省略)
-- OUT 传出参数 ,主要用于返回程序运行结果
--IN OUT 传入传出参数 ↓
(参数名 参数模式 类型,参数名2 参数模式 类型,....) --参数只指定类型,不指定长度
is|as
--变量声明
begin
--逻辑代码
end;
代码100分
主要有两种操作; 一种是有返回值,一种是返回值
1.无返回值: 案例
代码100分
--无返回值
--使用存储过程t_area添加数据id,name
--要求: id自动增长(先查询序列,获得数据,再执行insert)
--步骤1;创建存储过程
create procedure add_area
(v_name in varchar2) --定义存储参数类型时,一定不能大写
is
--声明变量
v_id t_area.id%type;
begin
--从序列中查询id,并赋值给v_id
select seq_stuno.nextval into v_id from dual;
--插入语句
insert into t_area(id,name) values(v_id,v_name);
--提交
commit;
end;
如何调用呢?
--方式一
call p_add("tom",1,"1-4","30412",sysdate,1);
--方式二:在过程中调用
begin
p_add("lucy",1,"1-5","30413",sysdate,1);
end;
2.有返回值 ; 案例
代码100分--有返回值
--使用存储过程t_area添加数据id,name,并调用存储过程时,打印id
create procedure add_area2
(
v_id out number,
v_name in varchar2
)
is
--声明变量
begin
--查询序列,并将结果赋值v_id
select seq_stuno.nextval into v_id from dual;
--插入数据
insert into t_area(id,name) values(v_id,v_name);
--提交
commit;
end;
如何调用呢?
declare
v_id t_area.id%type;
begin
add_area2(v_id,"煌");
dbms_output.put_line(v_id);
end;
三. 结合IDEA:
1.无返回值:
测试类:
/**
* 存储过程; 无返回值 添加
*/
@Test
public void testproAddarea(){
//调用add_area 存储过程
areaMapper.addArea("煌1");
}
Mapper:
/**
* 存储过程; 无返回值 添加
* @param name
*/
@Insert("call add_area(#{name})")
// 如果运行出错,添加下面注解,表示执行的是存储过程
// @Options(statementType = StatementType.CALLABLE)
public void addArea(@Param("name") String name);
划线: 可是很好用的东西,如果运行报错,直接使用,他能在运行报错时,添加了以后,解决报错噢!!
当然,现在无返回值中用不用都影响不是很大,还是可以正常运行的,接着看下面噢!!
2.有返回值:
测试类:
/**
* 存储过程; 有返回值 添加
*/
@Test
public void testproAddarea2(){
//调用add_area2存储过程
Area area = new Area();
area.setName("煌3");
areaMapper.addArea2(area);
System.out.println(area.getId());
}
Mapper:
/**
* 存储过程; 有返回值 添加
* @param area
*/
//mode=OUT 添加成功,让返回的数据不为null,
@Insert("call add_area2(#{id, mode=OUT,jdbcType=INTEGER},#{name})")
//只要出错直接加下面该注解可解决
@Options(statementType = StatementType.CALLABLE)
public void addArea2(Area area);
这里需要注意;如果@Insert里面对参数id需要加对应的类型以及状态
mode=OUT, 让返回的数据不为null, 否则就是报错null
jdbcType=INTEGER 如果不加就会报错如下,
所以划线的地方都是缺一不可,只要全都加上,问题就可以解决正常运行了!!
看完恭喜你,又知道了一点点!!!
你知道的越多,不知道的越多!
~感谢志同道合的你阅读, 你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8056.html