【发布时间】:2021-10-08 15:14:09
【问题描述】:
使用 SQL.callStoredProcedure 方法调用存储过程的正确方法是什么。
使用 CallableStatement 我可以从 MSSQL 存储过程中获取返回参数,但使用 SQL Scout 包装类不能。
我有一个名为“testproc”的示例 SP,它有两个参数,一组作为输出。
我试过了:
IntegerHolder holder = new IntegerHolder();
SQL.callStoredProcedure("testproc @in_par=:inPar, @out_par=:outPar INTO :holder", new NVPair("inPar", 1), new NVPair("outPar", 2), new NVPair("holder", holder));
这是执行的,两个IN参数是寄存器,一个OUT是寄存器。这是输出:
SQL with binds:
*** UNPARSED ***
TESTPROC @IN_PAR = :inPar , @OUT_PAR = :outPar INTO :holder
IN :inPar => ? [INTEGER 1]
IN :outPar => ? [INTEGER 2]
OUT :holder => ? [Integer]
null
Holder 值始终为空。
我正在使用 Scout v.11.0.24,在 Windows 10 64 位和最新的 Eclipse 上运行。 并使用 MSSQL JDBC:
<!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>7.2.1.jre8</version>
</dependency>
我还尝试使用 EXEC/CALL 使用 JDBC 语法,但没有使用 INTO,但没有任何效果。
在 Eclipse Scout 中使用 Scout SQL 包装器和 SQL.callStoredProcedure 调用存储过程的正确方法是什么?
注意:当使用 clear JDBC (CallableStatement) SP 时,SP 正在返回值,因此 SP 按预期工作。但是我想使用 Scout SQL 类来处理存储过程。
谢谢
【问题讨论】: