17.00 - 17.05 - DBCExtension.GLOP_Changeストアド プロシージャ - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1147-170K-JPN
Language
日本語 (日本)

目的

GLOPデータおよび以下の設定のいずれかを変更するには、GLOP_Changeを使用します。
  • 既存のページの場合、GLOP_Data
  • 読み取り専用GLOPデータの場合、エージング時間
  • GLOPデータのフィールドを無効にする
  • マップするGLOPデータの長さ

GLOP_Changeを使用してGLOPデータを削除したり、既存のセットに追加したりすることはできません。

定義

REPLACE PROCEDURE DBCExtension.GLOP_Change
   (IN Set_name     VARCHAR(257) CHARACTER SET UNICODE,
    IN Type_g       CHAR(2) CHARACTER SET LATIN,
    IN Dependency   CHAR(4) CHARACTER SET LATIN,
    IN Association  VARCHAR(257) CHARACTER SET UNICODE,
    IN Data Name    VARCHAR(128) CHARACTER SET UNICODE,
    IN Map_Index    BYTEINT,
    IN Disable      CHAR(1) CHARACTER SET LATIN,
    IN Ageing       INTEGER,
    IN Length       INTEGER,
    IN Page         INTEGER,
    IN Data         BLOB(2097088000)
   )

説明

Set_name
GLOPセットの名前またはテーブルの名前(Type_g引数の値によって決まります)。
Type_gが次の場合:
  • 非NULLの場合は、Set_nameは変更するGLOPセットの名前です。名前が完全修飾されていない場合、現行のデフォルト データベースが想定されます。名前が存在しない場合、システムによりエラーが報告されます。
  • NULLの場合は、Set_name は、変更するGLOPセットの複数のローに同等のデータが含まれているテーブルの名前です。テーブルが現行のデフォルト データベースに置かれていない場合、名前は完全修飾されていなければなりません。

    その他のすべての引数は無視されるので、NULLに設定しなければなりません。

    テーブルに指定されていなければならない定義について詳しくは、使用上の注意を参照してください。

Type_g
変更するGLOPの型。有効な値は次のとおりです。
  • 'SY': システムGLOPを指します。
  • 'RO': ロールGLOPを指します。
  • 'US': ユーザーGLOPを指します。
  • 'SE': セッションGLOPを指します。
  • 'TR': トランザクションGLOPを指します。
  • 'RE': リクエストGLOPを指します。
  • 'XR': 外部ルーチンGLOPを指します。
  • NULLは、Set_name引数が、データを入れるテーブルの名前を提供することを意味します。

GLOP型の意味の詳細については、GLOP型を参照してください。

Dependency
特定のGLOPを変更すると、メモリでアクティブになります。これにはGLOP置換従属性情報が含まれています。

値はNULL (従属性がないことを意味する)を渡して、すぐに変更する必要があります。他の値は、将来のリリース用に予約されています。

Association
特定のGLOP型の関係。
Type_gが次の場合:
  • 'RO': 関連性はロールの名前です。
  • 'US': 関連性はユーザー名です。
  • 'XR': 関連性は外部ルーチン名です。

    外部ルーチンが現行のデフォルト データベースに置かれていない場合、名前は完全修飾されていなければなりません。UDFの場合、外部ルーチン名はルーチンの固有の名前でなければなりません。

  • その他の値の場合には、関連性はすべて無視し、NULLに設定します。

association名がデータベースに存在しない場合、システムによりエラーが報告されます。

Data_Name
変更するGLOPデータの名前。名前が存在しない場合、システムによりエラーが報告されます。
Map_Index
GLOPアドレスが外部ルーチンで設定されるマップ配列内の位置。有効な値は0から7です。
Disable
データを有効にするか、無効にするか。有効な値は次のとおりです。
  • 'D': データを無効にするよう指定します。
  • 'E': GLOPを有効にするよう指定します。
  • NULL: 値を変更しないよう指定します。
Ageing
指定された時間(分)、マップされないときに、読み取り専用GLOPをメモリ不足でエージングするかどうか。有効な値は次のとおりです。
  • > 0: 指定された時間(分)マップされないときにGLOPをメモリ不足でエージングするかどうかを指定します。
  • 0: GLOPをメモリ不足でエージングしないよう指定します。
  • NULL: 値を変更しないよう指定します。
Length
データの実際の長さとは関係のない、GLOPデータのマップ後の長さ。データが長い場合、マップ時に切り捨てられます。データが短い場合、マップ時に残りの長さがゼロにリセットされます。有効な値は次のとおりです。
  • > -1: 長さを指定された値に設定するよう指定します。
  • NULL: 現在の長さを保存するよう指定します。
  • -1: セットID、セット型、およびマップ インデックスについて、長さを最大GLOPページのサイズに設定するよう指定します。
Page
変更されるGLOPページの数。値がNULLの場合、データは変更されません。GLOPページが存在しない場合、システムによりエラーが報告されます。この値が必要となるのは読み取り専用GLOPデータの場合だけですが、読み取り/書き込みまたはグローバルに変更可能なGLOPデータの場合には値1を指定できます。
Data
変更される実際のデータ。この値がNULLの場合、データは変更されません。ゼロ長バイト列が渡される場合、データは削除されますが、GLOPページは保持されます。データは直接指定することもできますし、この引数にBLOBを戻すUDFを指定して生成することもできます。

許可

多数のユーザーのためにGLOPデータの変更を行なう管理者は、(DBCExtensionデータベース内の) GLOP_Set、GLOP_Map、およびGLOP_Dataの各テーブルに対するUPDATE権限を持っていなければなりません。Set_Name引数は、GLOPセットが変更されるデータベースが含まれるように完全修飾する必要があります。

(DBCExtensionデータベース内の) GLOP_Set、GLOP_Map、およびGLOP_Dataテーブルに対するUPDATE権限を持っていないときに、作成されたGLOPセットを変更するには、以下のようでなればなりません。
  • GLOPが変更されるデータベースに対してGLOPまたはDROP GLOP権限を持っている。
  • GLOPセットの作成者または所有者であり、GLOP MEMBER権限を持っている。

'RO'、'US'、または'XR' GLOPを変更するには、現行許可がロール、ユーザー、または外部ルーチンのそれぞれに対して少なくとも1つの権限を所有しているか、または持っている必要があります。

GLOPセット情報が入っているテーブルの名前がSet_name引数で渡される場合、プロシージャを実行するユーザーは、指定されたテーブルに対するSELECT権限を持っている必要があります。

使用上の注意

このプロシージャは、GLOPセットの属性またはデータを変更するために使用します。GLOPデータを削除したり、セットに追加したりする目的には使用しないでください。変更により、すでに変更済みのGLOPデータはすべてメモリ内で置き換えられます。

Type_g引数がNULLの場合、Set_name引数はGLOPセット内で変更されるデータが入っているテーブルの名前を指定する必要があります。テーブルには以下の定義がなければなりません。テーブルは一時テーブルでも構いません。

CREATE TABLE  GLOP_Change_Table
   (Sequence     INTEGER NOT NULL,
    Set_name     VARCHAR(257) CHARACTER SET UNICODE,
    Type_g       CHAR(2) CHARACTER SET LATIN,
    Dependency   CHAR(4) CHARACTER SET LATIN,
    Association  VARCHAR(128) CHARACTER SET UNICODE,
    Data_Name    VARCHAR(128) CHARACTER SET UNICODE,
    Map_Index    BYTEINT,
    Disable      CHAR(1) CHARACTER SET LATIN,
    Ageing       INTEGER,
    Length       INTEGER,
    Page         INTEGER,
    Data         BLOB(2097088000))
PRIMARY INDEX (Sequence);

定義済みの列の説明は、ストアド プロシージャの引数と同一で、同じ名前を持ちます。追加された列はSequence列のみで、ここにはデータが適用される順に増えていく番号が含まれていなければなりません。順序が増えていないと、システムによりエラーが報告されます。

Set_nameで変更が行なわれるか、または最後の行が処理されるまで、変更は永続的になりません。このような動作をするのは、従属性情報またはインデックスのマッピングをすぐに適用することで、部分的な変更によってGLOPマッピングが不適切なときに行なわれないようにするためです。ただし、エラーがあると、すべての変更はロールバックされます。

制限

GLOP_Changeはトランザクション内から呼び出さないでください。なぜなら、これはそれ自体のトランザクションを場合によっては複数個作成し、さらにDDL文を実行するかもしれないからです。

このプロシージャはTeradataモード セッションから実行するよう設計されています。

例: DBCExtension.GLOP_Change ストアド プロシージャ

以下に示す単純な例では、さまざまなアルミニウム合金について、'Engineering'セットのGLOPを新規のアルミニウム ストレス/強度の更新データで更新します。データはすでに存在しており、新規のデータで置き換えられるだけです。データは'Stress01' UDFで必要とされます。このUDFはデータを使用して、engineeringプロジェクトに関する構造体分析を行ないます。これは読み取り専用GLOPデータなので、'Stress01'が呼び出されたら、次のトランザクション用に置き換えられるだけです。

CALL DBCExtension.GLOP_Change(
   'Engineering',             -- Set name
   'XR',                      -- Type: UDF
   NULL,                      -- No dependency
   'Stress01',                -- UDF that uses data
   'Aluminum_Stress_Tables',  -- the name of GLOP
   NULL,                      -- No change to map index
   NULL,                      -- No change to disable setting
   NULL,                      -- Do not change ageing value
   -1,                        -- Set GLOP length to data size
   1,                         -- Change page 1
   Engin_Strs_Gen('Al')       -- UDF to create the stress data
   );