16.20 - macro_name - Teradata Database - Teradata Vantage NewSQL Engine

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

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Release Date
2019年3月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-162K-JPN
Language
日本語 (日本)

新しいマクロの名前。完全修飾名を指定しなければ、デフォルトのデータベースまたはユーザーが使用されます。

データベース オブジェクトの命名ルールについては、<Teradata Vantage™ SQL基礎、B035-1141>を参照してください。

マクロ名は、格納先ユーザーまたはデータベース内で固有でなければなりません。

database_name
macro_nameの格納先データベースの名前(現在のデータベース以外の場合)。
user_name
macro_nameの格納先ユーザーの名前(現在のユーザー以外の場合)。

例: INSERT操作とその後のSELECT検査操作

次のリクエストでは、最初にemployee(従業員)テーブルに新しい従業員の行を挿入し、次にその情報が正しく入力されたことを確認するためにSELECTリクエストを実行するマクロを作成することを示します。

    CREATE MACRO new_emp1oyee (
      number   INTEGER, 
      name     VARCHAR(12), 
      dept     INTEGER    DEFAULT 900, 
      position VARCHAR(12) 
      sex      CHARACTER, 
      dob      DATE       FORMAT 'MMMbDDbYYYY', 
      edlev    BYTEINT )  AS
      (INSERT INTO employee (empno,name,deptno,jobtitle,sex,dob,edlev)
       VALUES (:number, :name, :dept, :position, :sex, :dob, :edlev);
       --   The following select verifies the insert       
       SELECT * 
       FROM employee 
       WHERE empno = :number; );

-- 注釈構文を使用して、マクロ内に注釈を含めます。--の後から行末までのテキストは、実行されません。

このマクロをANSIセッション モードで実行した場合、INSERTはまだコミットされていません。これは、Teradataセッション モードでも同じです。Teradataセッション モードでは、このマクロは明示的なトランザクションの一部として実行されています。

例: INSERT操作とその後のUPDATE操作

この例では、employeeテーブルに新しい従業員のための行も挿入するマクロを作成し、SELECTリクエストではなくUPDATEリクエストを実行します。UPDATEリクエストは、:deptパラメータの値と一致する部門番号を含む行の従業員数を1つ増やして数えて、departmentテーブルを変更します。

     CREATE MACRO new_employee_2 (
      (number   INTEGER, 
       name     VARCHAR(12), 
       dept     INTEGER     DEFAULT 900, 
       position VARCHAR(12), 
       sex      CHARACTER, 
       dob      DATE        FORMAT 'MMMbDDbYYYY', 
       edlev    BYTEINT)   AS
     (INSERT INTO employee (empno,name,deptno,jobtitle,sex,dob,edlev)
      VALUES (:number, :name, :dept, :position, :sex, :dob, :edlev) ;
      UPDATE department 
      SET empcount=empcount+1 
      WHERE deptno = :dept; );

このマクロをANSIセッション モードで実行した場合、INSERT文およびUPDATEリクエストはまだコミットされていません。これは、Teradataセッション モードでも同じです。Teradataセッション モードでは、このマクロは明示的なトランザクションの一部として実行されています。

例: REPLACE MACROの使用

以下の文はマクロを置換します。

    REPLACE MACRO new_employee(name VARCHAR(12) NOT NULL, 
     street CHARACTER(30), 
     city   CHARACTER(20), 
     number INTEGER NOT NULL, 
     dept   SMALLINT DEFAULT 999) AS
    (INSERT INTO employee (name, street, city, empno, deptno) 
      VALUES (:name, :street, :city, :number, :dept); 
    UPDATE department 
    SET empcount = empcount + 1 
    WHERE deptno = :dept ;);