puis-je placer une requête sql dans un espace réservé hana sql

Dec 15 2020

puis-je placer une requête SQL dans un espace réservé hana SQL ?

la requête suivante fonctionne:

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

J'essaye de passer quelque chose comme ce qui suit:

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

Obtention actuelle d'une erreur de syntex

Réponses

1 astentx Dec 21 2020 at 16:33

Comme erreur vous dit, les expressions ne sont pas pris en charge pour le paramètre de vue de la colonne: Can't use column expression as column view parameter.

Cependant, il existe des options pour le calculer:

  • Si la valeur de votre paramètre est sémantiquement liée à cette vue calculée (par exemple, vous avez besoin d'une valeur par défaut pour cette vue qui est calculée selon une logique), vous pouvez créer une procédure stockée avec un paramètre de sortie pour calculer la valeur et utiliser le type de paramètre Dérivé de la procédure / fonction scalaire . Pour rendre cette valeur ajustable depuis le frontend, vous pouvez la marquer comme entrée activée . Ou si la valeur calculée est basée sur l'entrée utilisateur, vous pouvez mapper les paramètres d'entrée de la procédure aux paramètres d'entrée de la vue de calcul dans la section Paramètres / Variables -> Procédures / Fonctions scalaires pour les paramètres d'entrée .
create procedure sp_dummy (
  in dummy nvarchar(10) default '0',
  out val nvarchar(10)
)
as begin
  val = to_char(current_date, 'yyyymmdd');
end;

  • Si la valeur de votre paramètre n'est pas liée à la vue de calcul et que vous utilisez simplement la vue de calcul pour obtenir des données pour cette valeur, vous pouvez utiliser la fonctionnalité de jeu de résultats de la procédure stockée / bloc SQLScript. Si votre exécuteur SQL n'essaie pas d'analyser l'instruction SQL (par exemple, SAP BO vérifie SELECTcomme premier mot SQL après certains SP, donc cette méthode ne sera pas valide pour cela) et obtient simplement l'ensemble de résultats sous forme de métadonnées pour les définitions de colonne, alors vous pouvez éviter un objet supplémentaire pour envelopper la logique de calcul.

Pour renvoyer un jeu de résultats, utilisez une instruction SELECT car les blocs anonymes n'ont aucun paramètre défini.

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;

Cela avec vue de calcul basée sur le tableau RSPCLOGCHAINfiltré par sortie de la procédure déclarée ci-dessus me donne

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

Non, ce n'est pas pris en charge.

L'interface des paramètres est réservée aux chaînes de caractères . Les SELECT ou expressions ne seront pas évalués par HANA.

Pour obtenir des paramètres de sélection dynamique (par exemple, la date actuelle ou il y a trois semaines ), vous pouvez envisager de définir les valeurs par défaut via des procédures stockées ou de calculer les valeurs souhaitées dans l'outil client (frontal).