SQLクエリをSQLハナプレースホルダーに配置できますか

Dec 15 2020

SQLクエリをSQLHANAプレースホルダーに配置できますか?

次のクエリが機能します。

     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)

現在、シンテックスエラーが発生しています

回答

1 astentx Dec 21 2020 at 16:33

エラーが示すように、式は列ビューパラメータではサポートされていませんCan't use column expression as column view parameter

ただし、それを計算するオプションがあります。

  • パラメータの値がこの計算されたビューに意味的に関連している場合(たとえば、何らかのロジックに基づいて計算されたこのビューのデフォルト値が必要な場合)、値を計算するために1つの出力パラメータを持つストアドプロシージャを作成し、パラメータタイプを使用できます手順/スカラー関数から派生。その値をフロントエンドから調整可能にするには、入力を有効としてマークします。または、計算値がユーザー入力に基づいている場合は、[パラメーター/変数]-> [プロシージャ/入力パラメータのスカラー関数]セクションで、プロシージャの入力パラメータを計算ビューの入力パラメータにマップできます
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がSELECTSP以降の最初のSQLワードとしてチェックするため、この方法は無効になります)、列定義のメタデータとして結果セットを取得するだけの場合、そうすれば、計算ロジックをラップするための余分なオブジェクトを回避できます。

匿名ブロックにはパラメータが定義されていないため、結果セットを返すには、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
1 LarsBr. Dec 16 2020 at 11:41

いいえ、サポートされていません。

パラメータインターフェイスは文字列専用です。SELECTまたは式はHANAによって評価されません。

動的な選択パラメーター(たとえば、現在の日付または3週間前)を実現するには、ストアドプロシージャを使用してデフォルト値を設定するか、クライアント(フロントエンド)ツールで目的の値を計算することを検討してください。