Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

LAST_IDENTITY

最後に挿入、更新、削除、またはフェッチされた行の ID を返すスカラ関数です。

Synopsis

LAST_IDENTITY()

概要

LAST_IDENTITY 関数は、%ROWID ローカル変数値を返します。%ROWID ローカル変数は、埋め込み SQL または ODBC の値に設定されます。%ROWID ローカル変数は、ダイナミック SQL、SQL シェル、または管理ポータルの SQL インタフェースによる値には設定されません。ダイナミック SQL は、その代わりに %ROWIDOpens in a new tab オブジェクト・プロパティを設定します。

LAST_IDENTITY 関数は引数を取りません。引数の括弧は必須です。

LAST_IDENTITY は、現在のプロセスによって最後に影響を受けた行の IDENTITY フィールドの値を返します。テーブルに IDENTITY フィールドがない場合は、現在のプロセスによって最後に影響を受けた行の行 ID (%ROWID) を返します。返り値は INTEGER データ型です。

  • 埋め込み SQL の INSERTUPDATEDELETE、または TRUNCATE TABLE 文の場合は、LAST_IDENTITY は最後に変更された行の IDENTITY または %ROWID 値を返します。

  • 埋め込み SQL のカーソル・ベースの SELECT 文の場合は、LAST_IDENTITY は最後に取得された行の IDENTITY または %ROWID 値を返します。ただし、カーソル・ベースの SELECT 文に DISTINCT キーワードまたは GROUP BY 節が含まれる場合は、LAST_IDENTITY は変更されず、前の値がある場合はそれを返します。

  • 埋め込み SQL の単一行 (非カーソル) の SELECT 文の場合は、LAST_IDENTITY は変更されません。前の値がある場合は、それが返されます。

プロセスの開始時に、LAST_IDENTITY は NULL を返します。NEW %RowID に続けて、LAST_IDENTITY は NULL を返します。

操作の影響を受けた行がない場合は、LAST_IDENTITY は変更されません。LAST_IDENTITY は、前の値がある場合は、それを返します。NEW %RowID に続けて、LAST_IDENTITY を呼び出すと NULL が返されますが、%ROWID を呼び出すと <UNDEFINED> エラーが生成されます。

IDENTITY フィールドの詳細は、"CREATE TABLE" を参照してください。%ROWID の詳細は、"Caché SQL の使用法" の “埋め込み SQL“ の章を参照してください。

以下の例では、2 つの埋め込み SQL プログラムを使用して LAST_IDENTITY を返しています。最初の例では新しいテーブル Sample.Students を作成し、2 番目の例ではこのテーブルにデータを入力してから、カーソル・ベースの SELECT をデータに対して実行して、それぞれの操作について LAST_IDENTITY を返しています。

2 つの埋め込み SQL プログラムは、示されている順序で実行してください(埋め込み SQL では参照されるテーブルが既に存在していなければ INSERT 文をコンパイルすることができないため、ここでは 2 つの埋め込み SQL プログラムを使用する必要があります)。

   WRITE !,"Creating table"
  &sql(CREATE TABLE Sample.Students (
    StudentName VARCHAR(30),
    StudentAge INTEGER,
    StudentID IDENTITY))
  IF SQLCODE=0 {
    WRITE !,"Created table, SQLCODE=",SQLCODE }
  ELSEIF SQLCODE=-201 {
    WRITE !,"Table already exists, SQLCODE=",SQLCODE }
  WRITE !,"Populating table"
  NEW SQLCODE,%ROWCOUNT,%ROWID
  &sql(INSERT INTO Sample.Students (StudentName,StudentAge)
     SELECT Name,Age FROM Sample.Person WHERE Age <= '21')
  IF SQLCODE=0 {
    WRITE !,%ROWCOUNT," records added, last RowID is ",%ROWID,! }
  ELSE {
    WRITE !,"Insert failed, SQLCODE=",SQLCODE }
  &sql(SELECT LAST_IDENTITY()
       INTO :insertID
       FROM Sample.Students)
    WRITE !,"INSERT Last Identity is: ",insertID,!!
   /* Cursor-based SELECT Query */
       &sql(DECLARE C1 CURSOR FOR 
       SELECT StudentName INTO :name FROM  Sample.Students
       WHERE StudentAge = '17')
  &sql(OPEN C1)
  &sql(FETCH C1)
  WHILE (SQLCODE = 0) {
     WRITE name," is seventeen",!
    &sql(FETCH C1) }
  &sql(CLOSE C1)
   WRITE !,%ROWCOUNT," records queried, last RowID is ",%ROWID,!
  &sql(SELECT LAST_IDENTITY()
       INTO :qId)
    WRITE !,"SELECT Last Identity is: ",qId,!
  &sql(DROP TABLE Sample.Students)

関連項目

FeedbackOpens in a new tab