PL/SQL存储过程结合IDEA使用会出错的地方[前方高能请注意!]

database

PL/SQL中存储过程" title="存储过程">存储过程结合IDEA

一.存储过程是什么呢?

存储过程时被命名的PL/SQL块,存储于数据库中,是数据库对象的一种,应用程序可以调用存储过程,执行相应的逻辑

 

二.语法:

create [or replace] procedure 存储过程名称

--三种参数模式:

-- IN 传入参数(默认,可以省略)

-- OUT 传出参数 ,主要用于返回程序运行结果

--IN OUT 传入传出参数 ↓

(参数名 参数模式 类型,参数名2 参数模式 类型,....) --参数只指定类型,不指定长度

is|as

--变量声明

begin

--逻辑代码

end;

 

主要有两种操作; 一种是有返回值,一种是返回值

1.无返回值: 案例

--无返回值

--使用存储过程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.有返回值 ; 案例

--有返回值

--使用存储过程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 如果不加就会报错如下,

 

所以划线的地方都是缺一不可,只要全都加上,问题就可以解决正常运行了!!

 

 

看完恭喜你,又知道了一点点!!!

你知道的越多,不知道的越多! 

~感谢志同道合的你阅读,  你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!

以上是 PL/SQL存储过程结合IDEA使用会出错的地方[前方高能请注意!] 的全部内容, 来源链接: utcz.com/z/534012.html

回到顶部