我可以在 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
我可以在 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