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 参数,在末尾使用关键字OUTSql 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)

UDF 中的返回位