例1:カーソルを使用するストアド プロシージャのコンパイルと実行 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - データベースの管理

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/rgu1556127906220.ditamap
dita:ditavalPath
ja-JP/rgu1556127906220.ditaval
dita:id
B035-1093
Product Category
Software
Teradata Vantage

ほとんどの状況で、大容量のテーブルの更新にカーソルを使用することは最適な方法ではありません。詳細は、以下を参照してください。 http://developer.teradata.com/blog/georgecoleman。

しかし、一連の動的SQL文を生成する場合はカーソル論理が必要です。この例では、Sales_Dept_Grant.sqlという名前のファイルがあることを前提にしています。このファイルには次のような手順が収められています。

REPLACE PROCEDURE Sales_Dept_Grant ( )
BEGIN
Declare GrantStmt VARCHAR(77) Default '';
For UserList as UserList CURSOR FOR
       Select User_Name, Admin_Ind From Sales_Dept_Users
Do
       CASE UserList.Admin_Ind
       WHEN 0 Then
		         Set GrantStmt = 'GRANT SELECT on Sales_Dept to ' || UserList.User_Name;
       ELSE
		         Set GrantStmt = 'GRANT ALL on Sales_Dept to ' || UserList.User_Name || ' 
With Grant Option';
       END CASE;
       CALL DBC.SysExecSql( :GrantStmt );
END For;
END;

このファイルを含むディレクトリが現行ディレクトリである場合は、BTEQを起動し、次のコマンドを入力します。

.LOGON <IP-addr>/<User-ID>
[Enter the Password]
.COMPILE FILE=Sales_Dept_Grant.sql  /* This compiles the procedure */
CALL Sales_Dept_Grant();            /* This invokes the procedure */

このファイルを含むディレクトリが現行ディレクトリでない場合は、コンパイル コマンド内にファイルのパスを記述します。

.COMPILE FILE=C:\Teradata\Procs\Sales_Dept_Grant.sql
他のクライアント ツールからこのプロシージャをコンパイルするためには、Sales_Dept_Grant.sqlの内容をコマンド ウィンドウにコピー アンド ペーストしてください。BTEQの場合のみ、.COMPILEコマンドを使用します。

テストのバックグラウンド

この例は、次のようなテスト用のテーブルを使ってテストされました。

CT Sales_Dept (Acct varchar(44), Sale_Date DATE, Gross DEC(18,2), Net DEC(18,2);

 insert into Sales_Dept values ('Acme Bearings','2013-02-13',12345.00,1234.50)
 ;insert into Sales_Dept values ('Horse Hockey','2013-03-23',57890.00,5789.00)
 ;insert into Sales_Dept values ('My Jaxx','2013-04-02',678930.00,67893.00)
 
 CT Sales_Dept_Users (User_Name varchar(32), Admin_Ind BYTEINT);
 
 insert into Sales_Dept_Users values ('GenUser1',1)