関数、スクリプト、変数の使用

スクリプトを使用した変数の初期化

Objective

After completing this lesson, you will be able to スクリプトの作成

スクリプト

スクリプトは、関数を呼び出し、ジョブまたはワークフローで値を割り当てるために使用されるシングルユースオブジェクトです。

スクリプト使用

スクリプトには多くのユースケースがあります。以下を含みます。

  • ジョブの初期化
  • ファイルの存在
  • 電子メールアラート
  • ステータステーブルのチェックと更新

初期化ステップのデータフローの前にスクリプトを実行して、ジョブの他の部分に渡される値を計算したり、変数に値を割り当てることができます。

スクリプトを実行して関数を実行し、ファイルの存在などをチェックすることができます。これにより、ジョブで条件式を使用して実行パスを決定することができます。

ワークフローおよびデータフローの後にスクリプトを実行して、通知を送信したり、実行情報 (時間など) やデータセットの行数の変更を記録したりすることもできます。

Data Services スクリプト言語

Data Services スクリプト言語を使用すると、変数に値を割り当て、関数を呼び出し、標準の文字列演算子と数学演算子を使用できます。構文は、WHERE 句やスクリプトなどの両方の式で使用できます。

スクリプト文

スクリプトには、次の文を含めることができます。
  • 代入文
  • 汎用モジュール呼出
  • If 文
  • While 文

式は、特定のデータ型の値に評価される定数、演算子、関数、および変数の組み合わせです。スクリプト文内で式を使用するか、データフローオブジェクトに式を追加します。

Basic 構文

Data Services スクリプト言語で式を作成する場合は、以下の基本構文ルールに従います。

  • 各文はセミコロン (;) で終わります。
  • 変数名はドル記号 ($) で開始します。
  • 文字列値は一重引用符 (' ') で囲みます。
  • コメントは番号記号 (#) で開始します。
  • 関数呼び出しでパラメータを使用しない場合でも、関数呼び出しでパラメータを指定します。
  • 式の値を角かっこで置き換えます。次に例を示します。

    Print(’The value of the start date is:[sysdate()+5]’);

  • 式の値を一重引用符で囲み、中括弧で囲みます。次に例を示します。

    $StartDate = sql(’demo_target’, ’SELECT ExtractHigh FROM Job_Execution_Status WHERE JobName = {$JobName}’);

式におけるカラムとテーブル参照の構文

式は、データフローオブジェクト内で使用でき、列名を含めることができます。

Data Services スクリプト言語では、特別な構文なしで列名とテーブル名が認識されます。たとえば、クエリの [マッピング] タブで、start_date 列を関数の入力としてとして指定できますto_char(start_date, ’dd.mm.yyyy’)

start_date は、クエリの入力スキーマに含まれている必要があります。クエリの入力スキーマに同じ名前のカラムが複数ある場合は、カラム名をテーブル名で修飾して、式に含まれるカラムを指定します。たとえば、テーブルステータスのstart_date をとして示しますstatus.start_date

SQL 文字列の一部としての列名およびテーブル名には、SQL を評価する RDBMS に基づく特別な構文が必要になる場合があります。たとえば、CUSTOMER テーブルの LAST_NAME 列からすべての行を sql(’oracle_ds’,’select CUSTOMER.LAST_NAME from CUSTOMER’) として選択します。

引用符

引用符、エスケープ文字、後続ブランクがすべて誤って使用されると、スクリプトに悪影響を及ぼす可能性があります。

文字列で使用する引用符のタイプは、識別子と定数のどちらを使用しているかによって異なります。

識別子

  • 識別子は、テーブル、列、データフロー、関数などのオブジェクトの名前です。
  • 識別子に英数字以外の文字が含まれる場合は、二重引用符を使用します。
  • たとえば、文字列 "compute large numbers" には空白が含まれているため、二重引用符を使用します。

定数

  • 定数は、計算で使用される固定値です。
  • 定数には、以下の 2 つのタイプがあります。
    • 文字列定数 (例: 'Hello'、'2007.01.23')
    • 数値定数 (2.14 など)
  • 文字列定数では一重引用符を使用し、数値定数では引用符を使用しません。

エスケープ文字

文字列内で正しく評価するには、一重引用符やバックスラッシュなどの特殊文字の前にエスケープ文字を付ける必要があります。Data Services では、次の表に示すようにバックスラッシュがエスケープ文字として使用されます。

文字
一重引用符 (')'World\'s Books'
バックスラッシュ (\)'C:\\temp'

NULL、空の文字列、末尾の空白

Data Services では、NULL、空の文字列、および後続ブランクを処理するときに ANSI VARCHAR 標準に準拠します。

  • 空の文字列 (' ') を NULL 値ではなく長さ 0 の varchar 値として処理します。
  • 演算子 Equal (=) および Not Equal (<>) を使用して NULL 値と比較する場合は、FALSE の値を返します。
  • NULL 値をテストするための IS NULL 演算子と IS NOT NULL 演算子を提供します。
  • すべてのソースからの読み込み時に、後続ブランクを削除するのではなく、通常の文字として扱います。
  • トランスフォームおよび関数の比較で末尾の空白を無視します。

空の文字列 (' ') を変数に割り当てると、Data Services では変数の値が長さ 0 の文字列として扱われます。

varchar ではない変数に空の文字列を割り当てると、エラーが発生します。NULL 定数を使用して、NULL 値を任意の型の変数に割り当てます。

以下の式を使用して、列 (COLX) が Null であるかどうかをチェックします。

  • COLX は NULL
  • COLX が NOT NULL

NULL 値を削除するには、NVL 関数を使用します。Data Services では、データ列の NULL 値はチェックされません。

スクリプト言語の詳細については、デザイナガイドを参照してください。

https://help.sap.com/docs/SAP_DATA_SERVICES/e54136ab6a4a43e6a370265bf0a2d744/576c4c256d6d1014b3fc9283b0e91070.html?locale=en-US

および参照ガイド

https://help.sap.com/docs/SAP_DATA_SERVICES/e54136ab6a4a43e6a370265bf0a2d744/576c4c256d6d1014b3fc9283b0e91070-2224.html?locale=en-US

試してみる

初期化スクリプトの登録例を紹介します。