sql - 存储过程输出变量被存储为输入/输出类型
问题描述
我正在尝试使用 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
?
解决方案
正如@GSerg 评论的那样,你不能。
在 SQL 中,OUTPUT
参数同时充当INPUT
and OUTPUT
,请参阅此答案
INOUT
由于用于引用 ORACLE 过程参数类型(它们是 和 )的映射,IN
您OUT
正在获取一个值INOUT
。
作为模式传递的变量
IN
始终是只读的。变量使用IN
模式可以被过程/函数读取和使用,但不能更改,也不能是赋值操作的接收者。传入模式的变量
OUT
用于将信息从过程传递回调用程序。它是一个只写变量,在块为其赋值之前没有任何值。传入
INOUT
模式的变量具有模式IN
和OUT
模式的特征。变量值被传入并且可以被过程读取。该过程还可以更改该值,并且在该过程完成时将其复制回传递的变量。
推荐阅读
- git - 使两个非常相似的 Vue 项目与 Git 保持同步的最佳方法是什么?
- reactjs - react-lottie:动画不会显示
- powershell - 有没有办法用 exportToCsv 对结果集进行分区?
- javascript - Firebase云功能:从文档创建中执行查询,然后删除除新创建的结果之外的结果
- python - TypeError:迭代 0-d 张量
- spring - SessionCreationPolicy.STATELESS 时显示 spring 安全认证对象
- flutter - 等效于 Riverpod 中的 ChangeNotifierProvider 小部件
- mysql - 字符串部分搜索
- gnuplot - Inkscape 裁剪使用 gnuplot 生成的 eps 文件
- nix - Nix:将其他派生的子目录添加到 PATH