Могу ли я разместить запрос sql в заполнителе места sql hana
Могу ли я разместить sql-запрос в заполнитель sql hana ?
следующий запрос работает:
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)
В настоящее время возникает ошибка Syntex
Ответы
Как ошибка говорит вам, выражения не поддерживаются для параметра вида столбца: Can't use column expression as column view parameter
.
Однако есть варианты для его расчета:
- Если значение вашего параметра семантически связано с этим вычисляемым представлением (например, вам нужно какое-то значение по умолчанию для этого представления, которое рассчитывается на основе некоторой логики), то вы можете создать хранимую процедуру с одним выходным параметром для вычисления значения и использовать тип параметра Получено из процедуры / скалярной функции . Чтобы сделать это значение настраиваемым из внешнего интерфейса, вы можете пометить его как входящий . Или, если вычисленное значение основано на вводе пользователя, вы можете сопоставить входные параметры процедуры с входными параметрами представления вычислений в разделе Параметры / Переменные -> Процедуры / Скалярные функции для входных параметров .
create procedure sp_dummy (
in dummy nvarchar(10) default '0',
out val nvarchar(10)
)
as begin
val = to_char(current_date, 'yyyymmdd');
end;


- Если значение вашего параметра не связано с представлением вычислений, и вы просто используете представление вычислений для получения некоторых данных для этого значения, вы можете использовать функцию набора результатов хранимой процедуры / блока SQLScript. Если ваш исполнитель SQL не пытается выполнить синтаксический анализ оператора SQL (например, SAP BO проверяет его
SELECT
как первое слово SQL после некоторого SP и далее, поэтому этот способ не будет действителен для него) и просто получает набор результатов как метаданные для определений столбцов, тогда вы можете избежать лишнего объекта для логики вычислений.
Чтобы вернуть набор результатов, используйте оператор SELECT, поскольку для анонимных блоков не определены параметры.
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;
Это с расчетным представлением на основе таблицы, 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
Нет, это не поддерживается.
Интерфейс параметров предназначен только для символьных строк . SELECT или выражения не будут оцениваться HANA.
Для достижения параметров динамического выбора (скажем, текущая дата или три недели назад ) вы можете захотеть установить значения по умолчанию с помощью хранимых процедур или вычислить желаемые значения в клиентском (интерфейсном) инструменте.