Java Stored proc给出错误
Posted
技术标签:
【中文标题】Java Stored proc给出错误【英文标题】:Java Stored proc giving an error 【发布时间】:2017-06-27 11:09:21 【问题描述】:我正在尝试通过以下方式创建存储过程:
DROP procedure IF EXISTS plus1inout
/;
CREATE procedure plus1inout (IN arg int, OUT res int)
BEGIN ATOMIC
set res = arg + 1;
END
/;
我收到以下错误:
Msg 156, Level 15, State 1.
Incorrect syntax near the keyword 'IF'.
Msg 156, Level 15, State 1.
Incorrect syntax near the keyword 'IN'. (Line 3)
【问题讨论】:
这不是Sql Server
语法
提示:create or replace procedure
.
您使用的是 Oracle 语法,但错误消息肯定来自 Ms Sql-server。检查您是否连接到正确的服务器
【参考方案1】:
您的语法在 sql server 中无效。
使用object_id
函数检查是否存在
IF OBJECT_ID('plus1inout', 'P') IS NOT NULL
DROP PROCEDURE plus1inout
对于输入参数,您不必提及IN
关键字。对于OUTPUT
参数,在末尾使用关键字OUT
。 Sql Server
中的参数也以@
开头
CREATE PROCEDURE Plus1inout (@arg INT,
@res INT output)
AS
BEGIN
SET @res = @arg + 1;
END
在SQL SERVER 2016
中,他们介绍了您用于检查过程是否存在的语法
DROP procedure IF EXISTS plus1inout
【讨论】:
【参考方案2】:几件事。那个“/”来自oracle。如果你愿意,你可以使用GO这个词。要检查是否存在:您使用以下代码:
IF OBJECT_ID('plus1inout', 'P') IS NOT NULL
DROP PROC plus1inout
GO
然后创建过程。 在创建中,参数声明错误。
CREATE procedure plus1inout (@arg int, @res int out)
BEGIN ATOMIC
set @res = @arg + 1;
END;
【讨论】:
参数列表中的IN也不是sql-server。您可能还会提到CREATE PROC
应该是什么样子
取决于它是 oracle 还是 sql-server 或其他数据库以上是关于Java Stored proc给出错误的主要内容,如果未能解决你的问题,请参考以下文章
Spring JcbcTemplate 调用 Oracle Stored Proc。春天 3.2
MySQL5.7: Paging using Mysql Stored Proc
NAVICATE 修改存储过程提示PROCEDURE _Navicat_Temp_Stored_Proc already exists 解决方法
mysql stored routine (存储例程) 中 definer 的作用 和实例
外键错误 - 错误 1005 (HY000) ... 无法创建表 ... `stored_on` (errno: 150)