在SAP Hana中读取表类型输出

时间:2017-01-25 13:48:12

标签: sap procedure hana

如何在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"(?);

4 个答案:

答案 0 :(得分:0)

程序中的输出变量只能分配给SQLScript上下文中的变量 例外情况是默认结果集绑定到过程中执行的最后一个SELECT命令 如果您打算生成可以选择的内容,则可能需要使用表类型用户定义函数(TUDF)

对您的示例代码提出两条评论:

    如果性能与您的应用程序有关,那么
  1. 使用临时表并不是一个好主意。虽然命令式代码经常出现 为了更直观,它真的倾向于阻止并行性 声明执行。

  2. 通过包含数据操作,计算和结果集,非常(太)容易过载单个过程功能 回报。如果可能的话,选择较小的功能单元和 将功能分解为多个对象。

  3. 好的,在您澄清实际上只是想在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;

然后将被调用者的输出参数分配给它。

https://help.sap.com/viewer/de2486ee947e43e684d39702027f8a94/2.0.01/en-US/ea5065d06d14426799d879234d8e3e7b.html

答案 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')

我希望它有所帮助