<!--
$Header: /usr/prj/pg/cvsroot/doc/doc/src/sgml/ref/fetch.sgml,v 1.5 2001/09/07 11:33:19 i-kaori Exp $
Postgres documentation
-->

<refentry id="SQL-FETCH">
 <refmeta>
  <refentrytitle id="SQL-FETCH-TITLE">
   FETCH
  </refentrytitle>
  <refmiscinfo>SQL<!-- Language Statements -->言語</refmiscinfo>
 </refmeta>
 <refnamediv>
  <refname>
   FETCH
  </refname>
  <refpurpose>
   <!-- Gets rows using a cursor -->
   カーソルを使って行を取得します。<indexterm><primary>FETCH</primary></indexterm><indexterm><primary>SQL</primary><secondary>FETCH</secondary></indexterm><indexterm><primary sortas="かーそる">カーソル</primary><secondary sortas="ぎょうのしゅとく">行の取得</secondary></indexterm>
  </refpurpose>
 </refnamediv>
 <refsynopsisdiv>
  <refsynopsisdivinfo>
   <date>1999-07-20</date>
  </refsynopsisdivinfo>
<synopsis>
FETCH [ <replaceable class="PARAMETER">direction</replaceable> ] [ <replaceable class="PARAMETER">count</replaceable> ] { IN | FROM } <replaceable class="PARAMETER">cursor</replaceable>
FETCH [ FORWARD | BACKWARD | RELATIVE ] [ <replaceable class="PARAMETER">#</replaceable> | ALL | NEXT | PRIOR ] { IN | FROM } <replaceable class="PARAMETER">cursor</replaceable>
</synopsis>

  <refsect2 id="R2-SQL-FETCH-1">
   <refsect2info>
    <date>1998-09-01</date>
   </refsect2info>
   <title>
    <!-- Inputs -->入力
   </title>

    <variablelist>
     <varlistentry>
      <term><replaceable class="PARAMETER">direction</replaceable></term>
      <listitem>
       <para>
	<!-- <replaceable class="PARAMETER">selector</replaceable>
	defines the fetch direction. It can be one of
	the following: -->

        <replaceable class="PARAMETER">selector</replaceable> 
         行を取り出す方向を定義します。次のうちの1つを使用できます。
</para>

	<variablelist>
	 <varlistentry>
	  <term>FORWARD</term>
	  <listitem>
	   <para>
	    <!-- fetch next row(s). This is the default
	    if <replaceable class="PARAMETER">selector</replaceable> is omitted.
            -->

            後方の行を取り出します。これは、<replaceable class="PARAMETER">selector</replaceable>が省略された場合のデフォルト値です。
 
	   </para>
	  </listitem>
	 </varlistentry>
	 <varlistentry>
	  <term>BACKWARD</term>
	  <listitem>
	   <para>
	    <!-- fetch previous row(s). -->
            前方の行を取り出します。 

	   </para>
	  </listitem>
	 </varlistentry>
	 <varlistentry>
	  <term>RELATIVE</term>
	  <listitem>
	   <para>
	    <!-- Noise word for SQL92 compatibility. -->
             SQL92との互換性のためだけに用意されています。

	   </para>
	  </listitem>
	 </varlistentry>
	</variablelist>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><replaceable class="PARAMETER">count</replaceable></term>
      <listitem>
       <para>
	<!-- <replaceable class="PARAMETER">count</replaceable>
	determines how many rows to fetch. It can be one of the following:
        -->

        何行取り出すのかを決定します。次のうちの1つを使用できます。 
</para>

	<variablelist>
	 <varlistentry>
	  <term><replaceable class="PARAMETER">#</replaceable></term>
	  <listitem>
	   <para>
	    <!-- A signed integer that specifies how many rows to fetch.
	    Note that a negative integer is equivalent to changing the sense of
	    FORWARD and BACKWARD. -->

            取り出す行数の指定を行う符合付き整数です。負の整数値はFORWARDとBACKWARDの意味を切り替えることと同じであることに注意してください。

	   </para>
	  </listitem>
	 </varlistentry>

	 <varlistentry>
	  <term>
	   ALL
	  </term>
	  <listitem>
	   <para>
	    <!-- Retrieve all remaining rows. -->
             残っているすべての行を取り出します。 

	   </para>
	  </listitem>
	 </varlistentry>

	 <varlistentry>
	  <term>
	   NEXT
	  </term>
	  <listitem>
	   <para>
	    <!-- Equivalent to specifying a count of <command>1</command>. -->
            引数countに<command>1</command>を指定することと同じです。 

	   </para>
	  </listitem>
	 </varlistentry>

	 <varlistentry>
	  <term>
	   PRIOR
	  </term>
	  <listitem>
	   <para>
	    <!-- Equivalent to specifying a count of <command>-1</command>.
            -->

            引数countに<command>-1</command>を指定することと同じです。 

	   </para>
	  </listitem>
	 </varlistentry>
	</variablelist>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><replaceable class="PARAMETER">cursor</replaceable></term>
      <listitem>
       <para>
	<!-- An open cursor's name. -->
        開いているカーソルの名前です。
       </para>
      </listitem>
     </varlistentry>
    </variablelist>
  </refsect2>

  <refsect2 id="R2-SQL-FETCH-2">
   <refsect2info>
    <date>1998-04-15</date>
   </refsect2info>
   <title>
    <!-- Outputs -->出力
   </title>
   <para>
    <!-- 
    <command>FETCH</command> returns the results of the query 
    defined by the specified cursor.
    The following messages will be returned if the query fails: -->

    <command>FETCH</command>は、指定されたカーソルによって定義された問い合わせの結果を返します。問い合わせが失敗した場合には次のメッセージが返されます。 
</para>

    <variablelist>
     <varlistentry>
      <term><computeroutput>
NOTICE:  PerformPortalFetch: portal "<replaceable class="PARAMETER">cursor</replaceable>" not found
       </computeroutput></term>
      <listitem>
       <para>
        <!-- 
	If <replaceable class="PARAMETER">cursor</replaceable>
	is not previously declared.
	The cursor must be declared within a transaction block. -->

        <replaceable class="PARAMETER">cursor</replaceable>が事前に宣言されていない場合に返されます。カーソルはトランザクションブロック内で宣言されなければいけません。 

       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><computeroutput>
NOTICE:  FETCH/ABSOLUTE not supported, using RELATIVE
       </computeroutput></term>
      <listitem>
       <para>
        <!-- 
	<productname>Postgres</productname> does not support absolute
	positioning of cursors. -->

        <productname>Postgres</productname>はカーソルの絶対位置指定をサポートしていません。

       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term><computeroutput>
ERROR:  FETCH/RELATIVE at current position is not supported
       </computeroutput></term>
      <listitem>
       <para>
        <!-- 
	<acronym>SQL92</acronym> allows one to repetitively retrieve the cursor
	at its "current position" using the syntax -->

        <acronym>SQL92</acronym>では以下のような構文を使ってカーソルの「現在位置」から繰り返しデータを取り出すことができます。
</para>

<synopsis>
FETCH RELATIVE 0 FROM <replaceable class="PARAMETER">cursor</replaceable>.
</synopsis>



       <para>
        <!-- 
	<productname>Postgres</productname> does not currently support
	this notion; in fact the value zero is reserved to indicate that
	all rows should be retrieved and is equivalent to specifying the 
        ALL keyword.
	If the RELATIVE keyword has been used, 
        <productname>Postgres</productname> 
	assumes that the user intended <acronym>SQL92</acronym> behavior
	and returns this error message. -->

        <productname>Postgres</productname>では、現在この記述方法をサポートしていません。実際、0という値はすべての行を取り出さすことを示すものとして予約されており、ALLキーワードを指定したことと同じことになります。RELATIVEキーワードが使用された場合、<productname>Postgres</productname>は、そのユーザーが<acronym>SQL92</acronym>の振る舞いを意図したものとみなし、エラーメッセージを返します。 

       </para>
      </listitem>
     </varlistentry>

    </variablelist>
  </refsect2>
 </refsynopsisdiv>

 <refsect1 id="R1-SQL-FETCH-1">
  <refsect1info>
   <date>1998-04-15</date>
  </refsect1info>
  <title>
   <!-- Description -->説明
  </title>

  <para>
   <!-- 
   <command>FETCH</command> allows a user to retrieve rows using a cursor.
   The number of rows retrieved is specified by
   <replaceable class="PARAMETER">#</replaceable>.
   If the number of rows remaining in the cursor is less
   than <replaceable class="PARAMETER">#</replaceable>,
   then only those available are fetched.
   Substituting the keyword ALL in place of a number will
   cause all remaining rows in the cursor to be retrieved.
   Instances may be fetched in both FORWARD and BACKWARD
   directions. The default direction is FORWARD. -->

   <command>FETCH</command>は、カーソルを使って行を取得します。取得される行数は<replaceable class="PARAMETER">#</replaceable>で指定されます。もしカーソルに残る行数が<replaceable class="PARAMETER">#</replaceable>より少ない場合、有効な行だけが取り出されます。行数の代わりにALLキーワードを指定すると、カーソルの残りの行すべてが取り出されます。FORWARD（前方）にもBACKWARD（後方）にもインスタンスを取り出すことができます。デフォルトの方向はFORWARDです。
</para>

   <tip>
    <para>
     <!-- Negative numbers are allowed to be specified for the
     row count. A negative number is equivalent to reversing
     the sense of the FORWARD and BACKWARD keywords. For example,
     <command>FORWARD -1</command> is the same as 
     <command>BACKWARD 1</command>. -->

      負の値も行数の指定に使用することができます。負の値はFORWARDキーワードとBACKWARDキーワードの意味を逆にすることと同じです。たとえば、<command>FORWARD -1</command>は<command>BACKWARD 1</command>と同じになります。 

    </para>
   </tip>

  <refsect2 id="R2-SQL-FETCH-3">
   <refsect2info>
    <date>1998-04-15</date>
   </refsect2info>
   <title>
    <!-- Notes -->注釈
   </title>

   <para>
    <!-- Note that the FORWARD and BACKWARD keywords are
    <productname>Postgres</productname> extensions.
    The <acronym>SQL92</acronym> syntax is also supported, specified
    in the second form of the command. See below for details
    on compatibility issues. -->

    FORWARDとBACKWARDキーワードは<productname>Postgres</productname>の言語拡張であることに注意してください。また、<acronym>SQL92</acronym>構文も、このコマンドの2番目の形式として指定したものでサポートされています。詳細については後述の互換性に関する解説を参照してください。

   </para>

   <para>
    <!-- Updating data in a cursor is not supported by 
    <productname>Postgres</productname>,
    because mapping cursor updates back to base tables is
    not generally possible, as is also the case with VIEW updates.
    Consequently,
    users must issue explicit UPDATE commands to replace data. -->

    通常、カーソルでの更新をどのように元のテーブルに戻すかを決定することは、VIEWでの更新の場合と同様にできませんので、カーソル内のデータの更新は<productname>Postgres</productname>でサポートされていません。データを入れ換えるには、明示的にUPDATEコマンドを発行する必要があります。

   </para>

   <para>
    <!-- Cursors may only be used inside of transactions because
    the data that they store spans multiple user queries. -->

    カーソルが保存しているデータは複数のユーザーの問い合わせでも使わ れますので、カーソルはトランザクションの内側でのみ使用できます。

   </para>

   <para>
    <!-- Use
    <xref linkend="sql-move" endterm="sql-move-title">
    to change cursor position.
    <xref linkend="sql-declare" endterm="sql-declare-title">
    will define a cursor.
    Refer to
    <xref linkend="sql-begin" endterm="sql-begin-title">,
    <xref linkend="sql-commit" endterm="sql-commit-title">,
    and
    <xref linkend="sql-rollback" endterm="sql-rollback-title">
    for further information about transactions. -->

    カーソルの位置を変えるには<xref linkend="sql-move" endterm="sql-move-title">を使います。<xref linkend="sql-declare" endterm="sql-declare-title">はカーソルを定義します。トランザクションに関するさらに詳しい情報は<xref linkend="sql-begin" endterm="sql-begin-title">、<xref linkend="sql-commit" endterm="sql-commit-title">、<xref linkend="sql-rollback" endterm="sql-rollback-title">を参照してください。

   </para>
  </refsect2>
 </refsect1>

 <refsect1 id="R1-SQL-FETCH-2">
  <title>
   <!-- Usage -->使用方法
  </title>

  <para>
   <!-- The following examples traverses a table using a cursor. -->]
   以下の例はカーソルを使ってテーブル内を行き来します。
</para>

<programlisting>
<!-- Set up and use a cursor:  -->-- カーソルを設定し使用します。

BEGIN WORK;
DECLARE liahona CURSOR FOR SELECT * FROM films;

<!-- Fetch first 5 rows in the cursor liahona: -->-- カーソル liahona から最初の 5 行を取り出します。
FETCH FORWARD 5 IN liahona;

<computeroutput> code  |          title          | did | date_prod  |  kind    | len
-------+-------------------------+-----+------------+----------+-------
 BL101 | The Third Man           | 101 | 1949-12-23 | Drama    | 01:44
 BL102 | The African Queen       | 101 | 1951-08-11 | Romantic | 01:43
 JL201 | Une Femme est une Femme | 102 | 1961-03-12 | Romantic | 01:25
 P_301 | Vertigo                 | 103 | 1958-11-14 | Action   | 02:08
 P_302 | Becket                  | 103 | 1964-02-03 | Drama    | 02:28</computeroutput>

<!-- Fetch previous row: -->-- 前の行を取り出します。
FETCH BACKWARD 1 IN liahona;

<computeroutput> code  | title   | did | date_prod  | kind   | len
-------+---------+-----+------------+--------+-------
 P_301 | Vertigo | 103 | 1958-11-14 | Action | 02:08</computeroutput>

<!-- close the cursor and commit work: -->
-- カーソルを閉じコミットします。

CLOSE liahona;
COMMIT WORK;
</programlisting>
 </refsect1>

 <refsect1 id="R1-SQL-FETCH-3">
  <title>
   <!-- Compatibility -->互換性
  </title>

  <refsect2 id="R2-SQL-FETCH-4">
   <refsect2info>
    <date>1998-09-01</date>
   </refsect2info>
   <title>
    SQL92
   </title>

    <note>
     <para>
      <!-- 
      The non-embedded use of cursors is a <productname>Postgres</productname>
      extension. The syntax and usage of cursors is being compared
      against the embedded form of cursors defined in <acronym>SQL92</acronym>.
      -->

      カーソルの非埋め込み使用は<productname>Postgres</productname>の拡張です。カーソルの構文と使用は<acronym>SQL92</acronym>で定義される埋め込み形式のカーソルと比較されています。
 
     </para>
    </note>

   <para>
     <!-- 
    <acronym>SQL92</acronym> allows absolute positioning of the cursor for
    FETCH, and allows placing the results into explicit variables:
    -->

    <acronym>SQL92</acronym>では、FETCHのカーソルの絶対位置を指定することができます。結果を明示的な変数に入れることを許します。
</para>

<synopsis>
FETCH ABSOLUTE <replaceable class="PARAMETER">#</replaceable>
    FROM <replaceable class="PARAMETER">cursor</replaceable>
    INTO :<replaceable class="PARAMETER">variable</replaceable> [, ...]
</synopsis>

    <variablelist>
     <varlistentry>
      <term>ABSOLUTE</term>
      <listitem>
       <para>
        <!-- 
	The cursor should be positioned to the specified absolute
	row number. All row numbers in <productname>Postgres</productname>
	are relative numbers so this capability is not supported. -->

        カーソルは特定の絶対行数に位置されるべきです。すべての<productname>Postgres</productname>行数は相対数なのでこの機能はサポートされていません。

       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term>:<replaceable class="PARAMETER">variable</replaceable></term>
      <listitem>
       <para>
	<!-- Target host variable(s). -->
        目的のホスト変数です。
       </para>
      </listitem>
     </varlistentry>
    </variablelist>
  </refsect2>
 </refsect1>
</refentry>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:nil
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"../reference.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:"/usr/lib/sgml/catalog"
sgml-local-ecat-files:nil
End:
-->
