sql—存储过程输出变量存储为输入/输出类型

tf7tbtn2  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(353)

我正在尝试使用JavaSQLAPI获取MicrosoftSQLServer中存储过程的元数据。
这是存储过程的结构:

CREATE PROCEDURE [dbo].[testproc] 
    (@rolloverType AS integer,
     @retval nvarchar(50) output)
AS
BEGIN
    SET NOCOUNT ON;

    SELECT @retval = [col1]
    FROM [dbo].[Table_1]
    WHERE col3 = @rolloverType;
END
GO

然而,javasqlapi说 @retval 是一个 INOUT 类型,并且microsoftsqlservermanagementstudio也将此参数显示为 Input/Output 类型。如何构造此存储过程以便 @retval 只属于类型 Output ?

vybvopom

vybvopom1#

正如@gserg所说,你不能。
在sql中,一种 OUTPUT 参数同时起作用 INPUT 以及 OUTPUT ,看到这个答案了吗
你得到了一个 INOUT 值,因为用于引用oracle过程参数类型的Map IN , OUT 以及 INOUT .
来自dba-oracle.com:
作为模式传递的变量 IN 总是只读的。变量使用 IN 模式可由过程/函数读取和使用,但不能更改,也不能作为赋值操作的接收器。
传入的变量 OUT 模式用于将信息从过程传递回调用程序。它是一个只写变量,在块给它赋值之前没有值。
传入的变量 INOUT 模式具有 IN 以及 OUT 模式。变量值被传入并可由过程读取。该过程还可以更改该值,并在过程完成时将其复制回传递的变量。

bttbmeg0

bttbmeg02#

如果管理工作室看到 @retval 作为 OUTPUT ,您将能够从外部读取此值。事实上 @retval 也被标记为输入不相关。

相关问题