在SAP HANA中,我可以使用in和output参数创建一个过程。即使没有输出参数,程序也可以输出表格。
我注意到存储过程中有三个版本的输出:
out parameter varhcar(100)
returns table (var1 varchar(10))
LANGUAGE SQLSCRIPT
醇>
这些有什么区别,我如何在其他存储过程中重用这些输出参数?
我唯一知道的是
call procedure(input1, input1, outputVar)
不幸的是,我不知道如何在不创建物理表的情况下将SQL结果绑定到输出参数。
此问题的原因
第1期
函数callBuildJoinOn返回空结果。由于SP_BUILD_JOIN_ON中的循环未执行 - 但列表是以拆分字符串构建的(均已测试)
Proceedure callBuildJoinOn
...
in colTable1 nvarchar(200)
out columnsTable1 "SCHEMA"."package::TT.STRING_LIST"
call "SCHEMA"."package::SP_SPLIT_STRING"(colTable1, columnsTable1);
call "SCHEMA"."package::SP_BUILD_JOIN_ON"(:columnsTable1, :columnsTable2, :joinOn);
SP_BUILD_JOIN_ON
columnsTable1 "SCHEMA"."package::TT.STRING_LIST"
declare cursor columnList for
select * from :columnsTable1;
for col as columnList do
joinOn := joinOn || 'a.' || col.item;
end for;
为什么分为两个功能?
如果在调用语句
之后,声明游标会导致编译器错误答案 0 :(得分:1)
甚至还有第四个选项可以从HANA SQLScript过程获取结果集:结果视图(从HANA2开始不再支持)。
但是,不要让人更加困惑。 不同的选项可以在不同的场景中使用:
过程IN / OUT参数用于将数据导入过程并导致过程结果。 OUT参数可以绑定到其他SQLScript变量(当您从另一个过程调用过程时),或者HANA客户端可以读取为TABLE
类型的每个OUT参数创建的结果集。例如,JDCB客户端会在执行过程后找到多个结果集,并会获取这些结果集。
表函数,即返回表的函数,可以像表或视图一样使用:
SELECT * FROM <tablefunction>( in_param1, in_param2, ...);
这提供了一个简单的选项,可以从函数中读回整个表或模拟参数化视图。
您提到的其余选项是所谓的&#34;默认结果集&#34;。这实际上仅对SQL编辑器或在过程执行后获取所有结果集的HANA客户端中的消耗有用。默认结果集不能绑定到任何SQLScript变量,也不能在SQL命令中引用。
答案 1 :(得分:0)
问题是joinOn
被定义为输出参数:out joinOn nvarchar(1000)
这导致:
joinOn := joinOn || 'a.' || col.item;
导致null
!<强>解决方案强>
out
更改为inout
joinOn := ''