如何在SAP Hana SQL Script中读取过程的out表类型参数的内容?
示例程序:
create procedure "MYSCHEMA".ReturnTypeTest(out OUTPUT_TABLE "MYSCHEMA"."RESOUT")
as
begin
create local temporary table #temp ("COL1" bigint, "COL2" bigint, "COL3" bigint);
insert into #temp values(1, 2, 3);
insert into #temp values(4, 5, 6);
insert into #temp values(7, 8, 9);
OUTPUT_TABLE = select * from #temp;
drop table #temp;
end;
表格类型(输出参数):
create type "MYSCHEMA"."RESOUT" as table ("COL1" bigint, "COL2" bigint, "COL3" bigint);
当我调用以下过程时,它会在SAP Hana Studio的结果窗格中显示整个内容,但是如何以编程方式获取它?
call "MYSCHEMA"."RETURNTYPETEST"(?);
答案 0 :(得分:0)
程序中的输出变量只能分配给SQLScript上下文中的变量 例外情况是默认结果集绑定到过程中执行的最后一个SELECT命令 如果您打算生成可以选择的内容,则可能需要使用表类型用户定义函数(TUDF)。
对您的示例代码提出两条评论:
使用临时表并不是一个好主意。虽然命令式代码经常出现 为了更直观,它真的倾向于阻止并行性 声明执行。
通过包含数据操作,计算和结果集,非常(太)容易过载单个过程功能 回报。如果可能的话,选择较小的功能单元和 将功能分解为多个对象。
好的,在您澄清实际上只是想在SQLScript中而不是在纯SQL中访问结果集之后,我可以将其添加到我的答案中: 检查我在第一句中写的内容!您可以简单地将过程中的任何输出变量分配给相应的变量。 该文档包含HANA documentation: CALL的示例。 例如,如果输出结构是包含用户信息的表,则它可能如下所示:
DECLARE uaccounts TABLE (USERID bigint, USERNAME NVARCHAR(256), CREATED date);
DECLARE expdate date := current_date;
/* In this example the procedure 'get_expired_useraccounts_by date' has got
the IN parameter expiry_date (date) and
the OUT parameter expired_accounts (table structure).
By assigning the variable uaccounts to the OUT parameter, the result set
automatically gets bound to uaccounts.*/
call get_expired_useraccounts_by_date (:expdate, :uaccounts);
/* from here you can use :uaccounts like a table variable*/
SELECT count(*) FROM :uaccounts;
当然,所有这些都是参考文档和开发人员指南的一部分......
答案 1 :(得分:0)
请您检查以下SQLScript
declare lt_list "MYSCHEMA"."RESOUT";
call "MYSCHEMA"."RETURNTYPETEST"(lt_list);
select * from :lt_list;
这应该使用最后一个SELECT语句
显示输出参数表答案 2 :(得分:0)
在理解了与Lars' Q& A,是:在调用者过程代码中定义一个表变量
DECLARE temp TABLE(n int); DECLARE temp MY_TABLE_TYPE;
然后将被调用者的输出参数分配给它。
答案 3 :(得分:-1)
您可以在系统视图中查询元数据 请检查以下SQLScript选择
select table_type_schema, table_type_name, *
from PROCEDURE_PARAMETERS
where
schema_name = UPPER('MYSCHEMA') and
procedure_name = UPPER('ReturnTypeTest') and
parameter_name = UPPER('OUTPUT_TABLE')
我希望它有所帮助