DECLARE CURSOR (リクエスト形式) - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
ft:locale
ja-JP
ft:lastEdition
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では、カーソルと、SQL文字列定数内で指定する複文リクエストなどの任意のTeradata SQLリクエストを関連付けます。

ANSI準拠

ANSI/ISO SQL:2011準拠。

必要な権限

なし。

構文

DECLARE cursor_name CURSOR FOR 'request_specification'

構文要素

cursor_name
宣言するカーソルの名前を指定します。
request_specification
単一引用符で囲んだリテラル文字列。セミコロンで区切った任意数のSQL文から成ります。
デフォルトでは、文字列は単一引用符(' ')で囲まれます。
QUOTESQLプリプロセッサ パラメータを使用して、このデフォルトをオーバーライドできます。単一引用符は、リクエスト カーソルの宣言を、カーソルの他のカテゴリから構文上区別します。

使用上の注意

  • 使用上の注意(すべての形式)
  • request_specification内の文には、次に示すどのSQL文も組み込むことができません。
    • CHECKPOINT
    • CLOSE
    • COMMIT
    • CONNECT
    • DATABASE
    • DESCRIBE
    • ECHO
    • EXECUTE
    • EXECUTE IMMEDIATE
    • FETCH
    • LOGON
    • OPEN
    • POSITION
    • PREPARE
    • REWIND
    • SET BUFFERSIZE
    • SET CHARSET
    • SET SESSION
  • クライアント言語の文字列リテラルの連結の構文に従って、request_specificationを複数行にわたって続けることができます(埋め込みSQLのみ)。
  • request_specification内の文は、Preprocessor2宣言であってはなりません(埋め込みSQLのみ)。
  • システムはカーソルを開いたときに、以下のいずれかの成功を反映させるようにSQLCAを更新します(SQLCODEのSQLCAは0に設定され、SQLSTATEは‘00000’に設定されます)。
    • リクエストの最初の文
    • 失敗が暗黙的なトランザクションのロールバックと定義されているリクエストの失敗
  • 失敗条件があるときは、常に成功報告をオーバーライドします。成功の場合は、SQLCA内の3番目のSQLERRD要素にアクティビティ カウントが示されます。リクエストの他の文の実行の結果を得るには、POSITION文を使用します(埋め込みSQLのみ)。
  • request_specification内のいずれかの文がデータを返す文の場合、アプリケーション プログラムは応答データセットを取得するために、POSITION文を使用して該当の結果セットに位置合わせしなければなりません。
  • OPENはその位置をリクエストの最初の文に自動的に設定するので、その場合はPOSITION文は必要ありません。
  • FETCH文に適切なホスト変数リスト(INTO句)を指定するか、または出力SQLDA (USING DESCRIPTOR句)を使用します(埋め込みSQLのみ)。

例: リテラル文字列の連結詳細の省略

以下の例では、複数行にわたるリテラル文字列の連結の詳細は省いています。そのルールはクライアント言語によって決められます。

DECLARE Ex CURSOR FOR
   ’UPDATE employee SET salary = salary * 1.08
    WHERE deptno = 500;
    SELECT deptname, name, salary
    FROM employee, department
    WHERE employee.deptno = department.deptno
    ORDER BY deptname, name’