DECLARE CURSOR (選択形式) - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLストアド プロシージャおよび埋め込みSQL

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/vqj1592443206677.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1148
Product Category
Software
Teradata Vantage

選択形式のDECLARE CURSORでは、カーソルと、SELECT文などのデータを返す文を関連付けます。

ANSI準拠

ANSI/ISO SQL:2011準拠(Teradata拡張機能を追加)。

必要な権限

なし。

構文

DECLARE cursor_name [ SCROLL ] CURSOR FOR {
  COMMENT |
  EXPLAIN |
  HELP |
  SHOW |
  SELECT |
  SELECT AND CONSUME
}

構文要素

cursor_name
このカーソルに割り当てる名前。
この名前は、任意の有効なSQL識別子にします。
SCROLL
宣言されたカーソルが、FETCH指向の宣言に基づいて応答セット内の行を取り出せます。
SCROLLを指定しない場合、カーソルは応答セット内の次の行にのみスクロールできる。これは、デフォルトです。
SQL文がSELECT文である場合に限ってSCROLLを使用してください。
COMMENT
コメントを返す有効なSQL COMMENT文。
EXPLAIN
有効なSQL EXPLAINリクエスト修飾子。
HELP
有効なSQL HELP文。
SHOW
有効なSQL SHOW文。
SELECT
有効な埋め込みSQL SELECT文。
SELECT AND CONSUME
有効な埋め込みSQL SELECT AND CONSUME文。

使用上の注意

  • 使用上の注意(すべての形式)
  • SQL WITH…BY句を指定することはできません。
  • カーソル宣言に指定された全てのテーブル、またはそれらのテーブルを格納するデータベースに対するSELECT権限が必要です。
  • カーソル指定で参照される各ホスト変数は、DECLARE CURSOR文より先に定義しなければなりません。
  • FROM句で識別するテーブルはグループ ビュー(GROUP BY句を使用して定義されたビュー)であり、table_expression内では以下の句を使うことはできません。
    • WHERE
    • GROUP BY
    • HAVING
  • UNION演算子を指定する場合、合併内の各結果表の記述は、列名を除いて同一でなければなりません。結果テーブルの合併によって形成されるスプール テーブルのすべての列には名前がありません。
  • 結果はUNION内の各クエリーの個々の結果テーブルの合併になり、重複行は除去されます。
  • ORDER BY句を指定すると、それぞれの列指定では、スプール テーブルの列を名前で指定する必要があります。
  • ORDER BY句の符号無し整数列参照には、スプール テーブルの列を相対番号で指定する必要があります。
  • 名前付き列は、列指定または符号無し整数のいずれかによって参照できます。
  • 名前のない列は、符号無し整数によって参照しなければなりません。
  • SELECT AND CONSUMEカーソルに対するDELETEまたはUPDATE埋め込みSQL文は指定できません。
  • キュー テーブルのカーソルは、PP2 ANSIモードでは常に読み取り専用になります。このため、PP2 ANSIモードのキュー テーブル カーソルに対しては、位置指定されたDELETEまたはUPDATE(つまり、最後に取り出されたカーソル行の削除または更新)を指定できません。
  • PP2 ANSIモードの複文リクエストでは、スクロール可能カーソルを使用できません。

例: DECLARE CURSORを使用したproj_idによるプロジェクトの整列

DECLARE ex1 CURSOR FOR
SELECT *
FROM project
ORDER BY proj_id

例: DECLARE CURSORを使用した番号によるプロジェクトの整列

DECLARE ex3 CURSOR FOR
SELECT a, b, ’X’
FROM tablex
WHERE a > b
   
UNION
    
(SELECT a, b, ’Y’
FROM tabley
WHERE a > b
    
INTERSECT
   
SELECT a, b, ’Y’
FROM tablez
WHERE a > b)
ORDER BY 1,2

例: DECLARE CURSORを使用したdeptnameとnameによるプロジェクトの整列

DECLARE ex2 CURSOR FOR
EXPLAIN SELECT deptname, name
FROM employee, department
WHERE employee.deptno = department.deptno
ORDER BY deptname, name

例: HELP TABLE employeeに対するDECLARE CURSORの使用

DECLARE ex4 CURSOR FOR
HELP TABLE employee

関連情報

  • SCROLLについては、FETCH (埋め込みSQL形式)を参照してください。
  • COMMENTおよびSHOWについては、<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>を参照してください。
  • EXPLAINについては、<Teradata Vantage™ - SQLデータ操作言語、B035-1146>を参照してください。
  • SELECTおよびSELECT AND CONSUMEについては、使用上の注意の制限を参照してください。