SAP HANA存储过程输出类型以及如何在SQLScript中重用/捕获输出

时间:2017-08-17 06:58:30

标签: stored-procedures hana

在SAP HANA中,我可以使用in和output参数创建一个过程。即使没有输出参数,程序也可以输出表格。

我注意到存储过程中有三个版本的输出:

  1. 程序结束时的选择 - 不声明结构。
  2. 输出参数out parameter varhcar(100)
  3. 在函数参数之后和关键字returns table (var1 varchar(10))
  4. 之前的隐式表定义LANGUAGE SQLSCRIPT

    这些有什么区别,我如何在其他存储过程中重用这些输出参数?

    我唯一知道的是

    1. call procedure(input1, input1, outputVar)
    2. 不幸的是,我不知道如何在不创建物理表的情况下将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;
      

      为什么分为两个功能?

      如果在调用语句

      之后,声明游标会导致编译器错误

2 个答案:

答案 0 :(得分:1)

甚至还有第四个选项可以从HANA SQLScript过程获取结果集:结果视图(从HANA2开始不再支持)。

但是,不要让人更加困惑。 不同的选项可以在不同的场景中使用:

  1. 过程IN / OUT参数用于将数据导入过程并导致过程结果。 OUT参数可以绑定到其他SQLScript变量(当您从另一个过程调用过程时),或者HANA客户端可以读取为TABLE类型的每个OUT参数创建的结果集。例如,JDCB客户端会在执行过程后找到多个结果集,并会获取这些结果集。

  2. 表函数,即返回表的函数,可以像表或视图一样使用:

    SELECT * FROM <tablefunction>( in_param1, in_param2, ...);
    

    这提供了一个简单的选项,可以从函数中读回整个表或模拟参数化视图。

  3. 您提到的其余选项是所谓的&#34;默认结果集&#34;。这实际上仅对SQL编辑器或在过程执行后获取所有结果集的HANA客户端中的消耗有用。默认结果集不能绑定到任何SQLScript变量,也不能在SQL命令中引用。

答案 1 :(得分:0)

问题是joinOn被定义为输出参数:out joinOn nvarchar(1000)

这导致:

  1. 变量为null
  2. 未填充变量:joinOn := joinOn || 'a.' || col.item;导致null
  3. <强>解决方案

    1. out更改为inout
    2. 初始化参数joinOn := ''