首页 > 解决方案 > 存储过程输出变量被存储为输入/输出类型

问题描述

我正在尝试使用 Java SQL API 获取 Microsoft SQL Server 中存储过程的元数据。

这是存储过程的结构:

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

但是,Java SQL API 说这@retval是一种INOUT类型,Microsoft SQL Server Management Studio 也将此参数显示为一种Input/Output类型。我怎样才能构造这个存储过程,以便它@retval只是类型Output

标签: sqlsql-serverstored-procedures

解决方案


正如@GSerg 评论的那样,你不能。

在 SQL 中,OUTPUT参数同时充当INPUTand OUTPUT,请参阅此答案

INOUT由于用于引用 ORACLE 过程参数类型(它们是 和 )的映射,INOUT正在获取一个值INOUT

来自dba-oracle.com

作为模式传递的变量IN始终是只读的。变量使用IN模式可以被过程/函数读取和使用,但不能更改,也不能是赋值操作的接收者。

传入模式的变量OUT用于将信息从过程传递回调用程序。它是一个只写变量,在块为其赋值之前没有任何值。

传入INOUT模式的变量具有模式INOUT模式的特征。变量值被传入并且可以被过程读取。该过程还可以更改该值,并且在该过程完成时将其复制回传递的变量。


推荐阅读