17.05 - 例: 行レベル セキュリティ関数の作成 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Release Date
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-175K-JPN
Language
日本語 (日本)

この例では、テーブルの制約列値を更新するための行レベル セキュリティ関数をいくつか作成します。これらの関数に関する注意点を以下にまとめます。

  • パラメータ名CURRENT_SESSIONでは、パラメータのソース データを、UDFに関連する制約のセッションで現在設定されている値として定義します。
  • パラメータ名INPUT_ROWでは、パラメータのソース データを、呼び出しリクエストの対象行の対応する制約列の値として定義します。
  • さまざまな関数例でこれらの制約に割り当てられているデータ型を見れば、実行するDML操作が分類制約に該当するのか、区画制約に該当するのかを確認できます。

insert_level関数は、入力としてセッションのレベル値(パラメータ名CURRENT_SESSIONで確認できる値)を使用して行を挿入し、その新しい行に割り当てるレベルを返します。CURRENT_SESSIONパラメータは、SMALLINTデータ型で定義されているので、挿入するレベル値は、階層型分類制約の1つの値にかかわっていることを確認できます。

     CREATE FUNCTION SYSLIB.insert_level (
       CURRENT_SESSION SMALLINT)
     RETURNS SMALLINT
     LANGUAGE C
     NO SQL
     PARAMETER STYLE TD_GENERAL
     EXTERNAL NAME 'CS!insertlevel!c:\cctests\insertlevel.c';

update_level関数は、入力としてセッションのレベル値(パラメータ名CURRENT_SESSIONで確認できる値)と、ターゲット行のレベル値(INPUT_ROWパラメータで確認できる値)を使用して、行を更新します。さらに、その更新行に割り当てるレベルを返します。CURRENT_SESSIONパラメータもINPUT_ROWパラメータも、SMALLINTデータ型で定義されているので、更新するレベル値は、階層型分類制約の1つの値にかかわっていることになります。

     CREATE FUNCTION SYSLIB.update_level (
       CURRENT_SESSION SMALLINT, 
       INPUT_ROW       SMALLINT)
     RETURNS SMALLINT
     LANGUAGE C
     NO SQL
     PARAMETER STYLE TD_GENERAL
     EXTERNAL NAME 'CS!updatelevel!c:\cctests\updatelevel.c';

delete_level関数は、入力としてターゲット行のレベル値(パラメータ名INPUT_ROWで確認できる値)を使用して、行を削除します。INPUT_ROWパラメータは、SMALLINTデータ型で定義されているので、削除するレベル値は、階層型分類制約の1つの値にかかわっていることになります。

このUDFに関連する外部関数、文字TまたはFを返します。Tは、指定の削除操作を実行できるという意味であり、Fは、指定の削除操作を実行できないという意味です。

     CREATE FUNCTION SYSLIB.delete_level (
       INPUT_ROW SMALLINT)
     RETURNS CHARACTER
     LANGUAGE C
     NO SQL
     PARAMETER STYLE TD_GENERAL
     EXTERNAL NAME 'CS!deletelevel!c:\cctests\deletelevel.c';

read_level関数は、入力としてセッションのレベル値(パラメータ名CURRENT_SESSIONで確認できる値)と、ターゲット行のレベル値(INPUT_ROWパラメータで確認できる値)を使用して、行を選択します。CURRENT_SESSIONパラメータもINPUT_ROWパラメータも、SMALLINTデータ型で定義されているので、読み取る行は、階層型分類制約の1つの値にかかわっていることになります。

このUDFに関連する外部関数、文字TまたはFを返します。Tは、選択操作を実行できるという意味であり、Fは、選択操作を実行できないという意味です。

     CREATE FUNCTION SYSLIB.read_level (
       CURRENT_SESSION SMALLINT, 
       INPUT_ROW       SMALLINT)
     RETURNS CHARACTER
     LANGUAGE C
     NO SQL
     PARAMETER STYLE TD_GENERAL
     EXTERNAL NAME 'CS!readlevel!c:\cctests\readlevel.c';

この関数は、入力としてセッションのカテゴリ値(CURRENT_SESSIONパラメータで確認できる値)を使用して、行を挿入します。CURRENT_SESSIONパラメータは、BYTE(8)データ型で定義されているので、挿入する行は、非階層型区画制約にかかわっていることを確認できます。

このUDFに関連する外部関数は、その新しい行に割り当てるカテゴリ値を返します。

     CREATE FUNCTION SYSLIB.insert_category (
       CURRENT_SESSION BYTE(8))
     RETURNS BYTE(8)
     LANGUAGE C
     NO SQL
     PARAMETER STYLE SQL
     EXTERNAL NAME 'CS!insert_category!c:\cctests\insert_category.c';

update_category関数は、入力としてセッションのカテゴリ値(パラメータ名CURRENT_SESSIONで確認できる値)と、ターゲット行のカテゴリ値(INPUT_ROWパラメータで確認できる値)を使用して、行を更新します。CURRENT_SESSIONパラメータもINPUT_ROWパラメータも、BYTE(8)データ型で定義されているので、更新する行は、非階層型区画制約にかかわっていることになります。

このUDFに関連する外部関数は、その更新行に割り当てるカテゴリ値を返します。

     CREATE FUNCTION SYSLIB.UpdateCategory (
       CURRENT_SESSION BYTE(8), 
       INPUT_ROW       BYTE(8))
     RETURNS BYTE(8)
     LANGUAGE C
     NO SQL
     PARAMETER STYLE SQL
     EXTERNAL NAME 'CS!updatecategory!c:\cctests\updatecategory.c';

行を削除する関数は、入力としてターゲット行のカテゴリ値(INPUT_ROWパラメータで確認できる値)を受け取り、文字TまたはFを返します。Tは、指定の削除操作を実行できるという意味であり、Fは、指定の削除操作を実行できないという意味です。

     CREATE FUNCTION SYSLIB.DeleteCategory (
       INPUT_ROW BYTE(8))
     RETURNS CHARACTER
     LANGUAGE C
     NO SQL
     PARAMETER STYLE SQL
     EXTERNAL NAME 'CS!deletecategory!c:\cctests\deletecategory.c';

行を選択する関数は、入力としてセッションのカテゴリ値(CURRENT_SESSIONパラメータで確認できる値)とターゲット行のカテゴリ値(INPUT_ROWパラメータで確認できる値)を受け取り、出力として文字TまたはFを返します。Tは、選択操作を実行できるという意味であり、Fは、選択操作を実行できないという意味です。

     CREATE FUNCTION SYSLIB.ReadCategory (
       CURRENT_SESSION BYTE(8), 
       INPUT_ROW       BYTE(8))
     RETURNS CHARACTER
     LANGUAGE C
     NO SQL
     PARAMETER STYLE SQL
     EXTERNAL NAME 'CS!readcategory!c:\cctests\readcategory.c';