关于sql存储过程在IDE或数据库中执行报错的解决办法

最近由于项目中有些业务要用到存储过程来写,所以在数据库中添加了一个简单的存储过程,如下:

ALTER PROCEDURE [dbo].[Test_addperson]
  @name AS varchar(20) ,
  @password AS varchar(20) ,
  @age AS int,
	@allCount int = 0 output--总数
AS
BEGIN
 insert into z_person_test (name,password,age) values (@name,@password,@age)
SET @allCount = @@rowcount
END

这是一个向person表中插入数据的简单存储过程,语法我就不一一介绍了,相信大家肯定都比我牛b!

但是当这段语句在Navicat中运行时,报出下面的错误

必须声明标量“xxxx”,也就是你想输出的数据信息,调试了好久,也找不到错误处在哪里。

最后不得已在项目中添加了Person的实体类和Service和Dao,然后用Junit测试!

下面只写了iml的代码,接口的代码此处就省略了!

PersonServiceImpl.java

@Transactional
@Service(value="personService")
public class PersonServiceImpl implements PersonService{

	@Autowired
	private PersonDao personDao;

	public void add(Person p) throws Exception {
		personDao.add(p);
	}
}

PersonServiceDaoImpl.java

@Repository(value="personDao")
public class PersonDaoImpl extends SqlSessionDaoSupport implements PersonDao{

	public void add(Person p) throws Exception {

		getSqlSession().selectOne("person.add", p);
		System.out.println("------------"+p.getAllCount());  //此处的allCount变量要在Person实体类中定义,不然取不到存储过程反回的输出数据。
		}catch(Exception e){
			e.printStackTrace();
			throw new Exception(e.getMessage());
		}
	}
	}

Person-mapper.xml

	<select id="add" statementType="CALLABLE" parameterType="java.util.HashMap" resultType="person"> <--此处的标签,如果使用存储过程一定要使用select标签 -->
		<![CDATA[
		{#{allCount,mode=OUT,jdbcType=INTEGER}=call Test_addperson(
		#{name,mode=IN,jdbcType=VARCHAR},
		#{password,mode=IN,jdbcType=VARCHAR},
		#{age,mode=IN,jdbcType=INTEGER},
		#{allCount,mode=OUT,jdbcType=INTEGER}
		)}
		]]>
	</select>

然后运行代码,发现存储过程原来是没问题的,添加的反回数据也可以添加成功

	@Test
	public void Test2(){
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("conf/spring-*.xml");
		PersonService personService = (PersonService) applicationContext.getBean("personService");
		Person person = new Person();
		person.setAge(19);
		person.setName("AAAA");
		person.setPassword("BBBB");
		try {
			personService.add(person);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

从上面可以看出,有些存储过程在某些IDE中提示的错误,并不能完全的代表是存储过程出错了,我们可能是被某些数据库的操作软件坑了!

时间: 2024-10-09 20:58:07

关于sql存储过程在IDE或数据库中执行报错的解决办法的相关文章

20170514002Oracle 11g R2安装过程中遇到的报错及解决办法

Oracle 11g R2安装过程中遇到的报错及解决办法 1.提示Check if the DISPLAYvariable is set.    Failed<<<< 解决方案: #xhost +  //切换到root用户输入 #su – Oracle  //切换到oracle用户 $./runInstaller  //执行安装程序 xhost 是用来控制X server访问权限的. 通常当你从hostA登陆到hostB上运行hostB上的应用程序时, 做为应用程序来说,hostA

eclipse中的js文件报错的解决办法

在使用别人的项目的时候,导入到eclipse中发现js文件报错,解决办法是关闭eclipse的js校验功能. 三个步骤: 1. Eclipse代码   右键点击项目->properties->Validation->Errors/Warming 将Enable Javascript Sematic validation前面的钩子去掉 2.打开.project 文件下面代码去掉 Eclipse代码   <buildCommand> <name>org.eclipse

python代码在linux终端中执行报错:Unable to init server: Could not connect: Connection refused

python代码在linux终端中执行时报错: Unable to init server: Could not connect: Connection refused Unable to init server: 无法连接: Connection refused 解决办法: 在要执行的python文件里加入以下两句代码: 切记:在最开头添加. import matplotlib matplotlib.use('Agg') 原文地址:https://www.cnblogs.com/ming-4/

Microsoft SQL Server 2008 R2附加数据库报错5120解决办法

Microsoft SQL Server 2008 R2数据库附加报错5120,是权限的问题解决办法:邮件数据库文件的属性选中Authenticated Users 然后选中编辑把完全控制勾选上 单击确定,然后就可以附加数据库了 ! 若有疑问可以联系我www.jiangyong.net.cn,里面有我的QQ

关于数据库新建用户提示“用户、组或角色‘’XXX‘’在当前数据库中已已存在”的解决办法

一般在还原数据库后,给这个数据库添加一个登录名时出现. 例如数据库备份文件中已经包含了用户abc,现在还原了数据库,然后发现现有数据库中没有abc这个用户,想要新建一个abc用户,作为该数据库的owner,便会出现这个问题. http://blog.csdn.net/cjh200102/article/details/8669166 这篇文章做了详细的介绍. 可以理解为登录名和用户是两个不同的概念,虽然名称相同.在新建登录名的时候,如果不添加该数据库映射则不会报错. 添加数据库映射相当于给该数据

JS 调试中常见的报错的解决办法

报错:Uncaught SyntaxError: Unexpected token o in JSON at position 1 at JSON.parse (<anonymous>) at Function.m.parseJSON (jquery.js:8515) at Object.success (crud.html:45) at j (jquery.js:3143) at Object.fireWith [as resolveWith] (jquery.js:3255) at x (

zabbix &nbsp; 监控平台搭建过程中的报错与解决方法总结

1.php    option  post_max_size 2.php    option  max_execution_time 3.php    option  max_input_time 4.php    time   zone 5.php     bcmath 6.php     mbstring 解决1-3的报错修改php文件 vim  /etc/php.ini 修改相应参数为Required值 解决4报错:修改date.timezone=/Asia/Shanghai  注意去掉该

向工程中导入libqrencode报错的解决办法

项目需要用到二维码生成.网上找了大多推荐使用libqrencode.下下来导入工程按习惯先编译了下,22个错误 ,预想中的,先百度搜了下解决办法.试完了所有答案居然都没解决, 硬着头皮去stackoverflow找答案.还是国外大神牛逼.一句话就解决了:.pch配置文件中把全局引用的.h文件全放在 #ifdef __OBJC__ #endif 之中.到处问题完美解决.

Oracle数据库误删文件导致rman备份报错RMAN-06169解决办法

可能是误删文件导致在使用rman备份时候出现以下提示 RMAN-06169: could not read file header for datafile 15 error reason 1 解决办法 查看数据15文件是什么 SQL> select file#,name from v$datafile; 出现一个/MISSING00015的文件 看来是MISSING00006文件,不是系统,也不是用户的数据. 看MISSING00006基于那个表空间,然后删除该表空间    SQL> sel