czy mogę umieścić zapytanie sql w elemencie zastępczym sql hana
czy mogę umieścić zapytanie sql w elemencie zastępczym sql hana ?
działa następujące zapytanie:
Select * From table1
('PLACEHOLDER' = ('$$IP_ShipmentDate$$', '2020-01-01'))
Próbuję przekazać coś takiego:
Select * From table1
('PLACEHOLDER' = ('$$IP_ShipmentDate$$',
Select TO_VARCHAR(min("some_date"),'YYYY-MM-DD') from Table2)
Obecnie pojawia się błąd składniowy
Odpowiedzi
Jako błąd mówi ci, wyrażenia nie są obsługiwane w kolumnie widoku parametru: Can't use column expression as column view parameter
.
Istnieją jednak opcje, aby to obliczyć:
- Jeśli wartość parametru jest semantycznie powiązana z tym widokiem obliczeniowym (np. Potrzebujesz pewnej wartości domyślnej dla tego widoku, która jest obliczana na podstawie jakiejś logiki), możesz utworzyć procedurę składowaną z jednym parametrem wyjściowym do obliczenia wartości i użyć typu parametru Pochodzi z procedury / funkcji skalarnej . Aby ustawić tę wartość z poziomu interfejsu, możesz oznaczyć ją jako wejście włączone . Lub jeśli obliczona wartość jest oparta na danych wprowadzonych przez użytkownika, można odwzorować parametry wejściowe procedury na parametry wejściowe widoku obliczeń w sekcji Parametry / Zmienne -> Procedury / Funkcje skalarne dla parametrów wejściowych .
create procedure sp_dummy (
in dummy nvarchar(10) default '0',
out val nvarchar(10)
)
as begin
val = to_char(current_date, 'yyyymmdd');
end;


- Jeśli wartość parametru nie jest powiązana z widokiem obliczeń i po prostu używasz widoku obliczeń, aby uzyskać dane dla tej wartości, możesz użyć funkcji zestawu wyników procedury składowanej / bloku SQLScript. Jeśli twój wykonawca SQL nie próbuje przeanalizować instrukcji SQL (na przykład SAP BO sprawdza
SELECT
jako pierwsze słowo SQL po pewnym SP, więc ten sposób nie będzie dla niego ważny) i po prostu pobierze zestaw wyników jako metadane dla definicji kolumn, wtedy możesz uniknąć dodatkowego obiektu do zawijania logiki obliczeniowej.
Aby zwrócić zestaw wyników, użyj instrukcji SELECT, ponieważ bloki anonimowe nie mają zdefiniowanych żadnych parametrów.
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;
To RSPCLOGCHAIN
daje mi widok obliczeń oparty na tabeli przefiltrowanej przez wynik powyższej procedury
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
Nie, to nie jest obsługiwane.
Interfejs parametrów jest przeznaczony tylko dla ciągów znaków . SELECTs lub wyrażenia nie będą oceniane przez HANA.
Aby uzyskać dynamiczne parametry wyboru (powiedzmy, bieżąca data lub trzy tygodnie temu ), warto przyjrzeć się ustawianiu wartości domyślnych za pomocą procedur składowanych lub obliczaniu żądanych wartości w narzędziu klienta (front-end).