java - SQL Server 中的存储过程需要输出参数作为输入

标签 java sql-server stored-procedures

我正在从 Java 代码中调用存储过程。在存储过程中进行一些计算后,我将返回状态。

这是存储过程:

ALTER PROCEDURE [dbo].[SAMPLE_ENTRIES]
    (@ID INTEGER, 
     @PERIOD_ID INTEGER, 
     @RUN_ID INTEGER, 
     @TYPE CHAR, 
     @RESULT_OUTPUT varchar(100) OUTPUT)
/**Here goes some computation**/
IF @RESULT_OUTPUT IS NULL  
BEGIN   
   set @RESULT_OUTPUT = 'SUCCESS';    
   select @RESULT_OUTPUT as RESULT_OUTPUT;  
END; 

END

正如您所看到的,我将 4 个参数传递给存储过程,第 5 个参数是输出。但我收到一个错误,以下是错误:

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Procedure or function 'SAMPLE_ENTRIES' expects parameter '@RESULT_OUTPUT', which was not supplied.

at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216) at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:404)

我是存储过程的新手。

感谢您提前提供的帮助。

最佳答案

OUTPUT 参数仍然是输入参数;存储过程不存在“非输入”参数。您仍然需要将变量传递给参数,因为一旦 SP 完成,OUTPUT 参数的值将被分配给该变量。

如果您使用 T-SQL 执行 SP,它将如下所示:

CREATE PROC dbo.MyProc @MyParam int OUTPUT AS
BEGIN

    SET @MyParam = 1;
END;
GO

DECLARE @MyParam int;
EXEC dbo.MyProc @MyParam OUTPUT;

PRINT @MyParam; --1

DB<>Fiddle

关于java - SQL Server 中的存储过程需要输出参数作为输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59305171/

相关文章:

mysql - ID 的字符串分割并与 MySQL 中的名称连接

java - 找不到符号变量activity_main

sql-server - 按比例在帐户之间拆分 SQL 2008

json - 在存储过程中多次访问 OPENJSON 解析的 JSON?

mysql - 在具有用户定义表类型的 SQL 中选择 DBNULL

参数为列表的 MySQL 存储过程

sql - 使用 SQL 插入重复记录

java - 在 Scala 中创建一个 Json 数组

java - 从选择查询中查找列名和元数据而不执行查询

java - 在另一个布局上访问 textview