Kann ich eine SQL-Abfrage in einem SQL-Hana-Platzhalter platzieren?

Dec 15 2020

Kann ich eine SQL-Abfrage in einem SQL-Hana- Platzhalter platzieren?

Die folgende Abfrage funktioniert:

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

Ich versuche so etwas wie das Folgende zu bestehen:

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

Derzeit wird ein Syntex-Fehler angezeigt

Antworten

1 astentx Dec 21 2020 at 16:33

Wie der Fehler sagt, werden Ausdrücke für den Parameter der Spaltenansicht nicht unterstützt : Can't use column expression as column view parameter.

Es gibt jedoch Optionen zur Berechnung:

  • Wenn der Wert Ihres Parameters semantisch mit dieser berechneten Ansicht zusammenhängt (z. B. benötigen Sie einen Standardwert für diese Ansicht, der auf der Grundlage einer Logik berechnet wird), können Sie eine gespeicherte Prozedur mit einem Ausgabeparameter erstellen, um den Wert zu berechnen, und den Parametertyp verwenden Abgeleitet von Prozedur / Skalarfunktion . Um diesen Wert vom Frontend aus einstellbar zu machen, können Sie ihn als Eingabe aktiviert markieren . Wenn der berechnete Wert auf Benutzereingaben basiert, können Sie die Eingabeparameter der Prozedur den Eingabeparametern der Berechnungsansicht im Abschnitt Parameter / Variablen -> Prozeduren / Skalarfunktionen für Eingabeparameter zuordnen .
create procedure sp_dummy (
  in dummy nvarchar(10) default '0',
  out val nvarchar(10)
)
as begin
  val = to_char(current_date, 'yyyymmdd');
end;

  • Wenn der Wert Ihres Parameters nicht mit der Berechnungsansicht zusammenhängt und Sie nur die Berechnungsansicht verwenden, um einige Daten für diesen Wert abzurufen , können Sie die Ergebnismengenfunktion der gespeicherten Prozedur / des SQLScript-Blocks verwenden. Wenn Ihr SQL-Executor nicht versucht, die SQL-Anweisung zu analysieren (z. B. SAP BO prüft SELECTnach einigen SPs als erstes SQL-Wort, sodass diese Methode für dieses nicht gültig ist) und nur die Ergebnismenge als Metadaten für Spaltendefinitionen erhält, Dann können Sie vermeiden, dass ein zusätzliches Objekt die Berechnungslogik umschließt.

Verwenden Sie zum Zurückgeben einer Ergebnismenge eine SELECT-Anweisung, da für anonyme Blöcke keine Parameter definiert sind.

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;

Das mit Berechnungsansicht basierend auf der Tabelle, RSPCLOGCHAINgefiltert nach Ausgabe der oben deklarierten Prozedur, gibt mir

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
1 LarsBr. Dec 16 2020 at 11:41

Nein, das wird nicht unterstützt.

Die Parameterschnittstelle ist nur für Zeichenfolgen . SELECTs oder Ausdrücke werden von HANA nicht ausgewertet.

Um dynamische Auswahlparameter (z. B. das aktuelle Datum oder vor drei Wochen ) zu erreichen, sollten Sie die Standardwerte über gespeicherte Prozeduren festlegen oder die gewünschten Werte im Client-Tool (Front-End) berechnen.