我可以在 sql hana 占位符中放置 sql 查询吗

can I place a sql query in a sql hana place holder

我可以在 sql hana 占位符中放置 sql 查询吗?

以下查询有效:

     Select * From table1
     ('PLACEHOLDER' = ('$$IP_ShipmentDate$$', '2020-01-01'))

我正在尝试传递如下内容:

      Select * From table1
     ('PLACEHOLDER' = ('$$IP_ShipmentDate$$', 
       Select TO_VARCHAR(min("some_date"),'YYYY-MM-DD') from Table2)

当前出现句法错误

不,不支持。

参数接口仅针对字符串。 HANA 不会评估 SELECT 或表达式。

要实现动态选择参数(例如,当前日期或三周前),您可能需要考虑设置default values via stored procedures 或在客户端(前端)工具中计算所需的值。

正如您所说的错误,列视图参数不支持表达式:Can't use column expression as column view parameter

但是,有计算它的选项:

  • 如果您的参数值在语义上与此计算视图相关(例如,您需要此视图的一些默认值是根据某种逻辑计算的),那么您可以创建一个带有一个输出参数的存储过程来计算该值,并使用参数类型 Derived From Procedure/Scalar Function。要从前端调整该值table,您可以将其标记为启用输入。或者,如果计算值基于用户输入,您可以在 Parameters/Variables -> Procedures/Scalar functions for input parameters[=34= 部分将过程的输入参数映射到计算视图的输入参数].
create procedure sp_dummy (
  in dummy nvarchar(10) default '0',
  out val nvarchar(10)
)
as begin
  val = to_char(current_date, 'yyyymmdd');
end;

  • 如果您的参数值与计算视图无关,而您只是使用计算视图获取该值的一些数据,则可以使用存储的 procedure/SQLScript 块的 result set feature。如果您的 SQL 执行程序不尝试解析 SQL 语句(例如,SAP BO 检查 SELECT 作为某些 SP 之后的第一个 SQL 单词,所以这种方式将对其无效)并且只获取结果集作为列定义的元数据,然后您可以避免额外的对象来包装计算逻辑。

To return a result set, use a SELECT statement because anonymous blocks do not have any parameters defined.

do begin
  declare lv_param nvarchar(100);
  select max('some_date')
    into lv_param
  from dummy /*your_table*/;
  
  select *
  from "_SYS_BIC"."path.to.your.view/CV_TEST" (
    PLACEHOLDER."$$P_DUMMY$$" => :lv_param
  );
end;

基于table RSPCLOGCHAIN 的计算视图由上面声明的过程的输出过滤给了我

LOG_ID                    | DATUM    | INPUT_PARAM | CUR_DATE
--------------------------+----------+-------------+----------
8FRV39X1O8814X6IJMLPI47PV | 20201221 | some_date   | 20201221
C7S9EY3J0GYA76Y2S9CIA39QR | 20201221 | some_date   | 20201221
35R8A3RFUG00EBY8MZQWJLIXF | 20201221 | some_date   | 20201221
850MVHOJIKIDD7EVY6WFIYPZN | 20201221 | some_date   | 20201221