前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL函数 LAST_IDENTITY

SQL函数 LAST_IDENTITY

作者头像
用户7741497
发布2022-04-06 18:17:03
7220
发布2022-04-06 18:17:03
举报
文章被收录于专栏:hml_知识记录

SQL函数 LAST_IDENTITY

返回最后插入、更新、删除或读取的行的标识的标量函数。

大纲

代码语言:javascript
复制
LAST_IDENTITY()

描述

LAST_IDENTITY函数返回%ROWID局部变量值。在嵌入式SQLODBC中将%ROWID局部变量设置为一个值。动态SQL、SQL Shell或管理门户SQL界面未将%ROWID局部变量设置为值。动态SQL改为设置%ROWID对象属性。

LAST_IDENTITY函数不接受任何参数。请注意,参数括号是必需的。

LAST_IDENTITY返回受当前进程影响的最后一行的标识字段值。如果表没有标识字段,则返回受当前进程影响的最后一行的行ID(%ROWID)。返回值为数据类型INTEGER

  • 对于嵌入式SQL INSERTUPDATEDELETETRUNCATE TABLE语句,LAST_IDENTITY返回最后修改的行的IDENTITY%ROWID值。
  • 对于嵌入式SQL基于游标的SELECT语句,LAST_IDENTITY返回检索到的最后一行的IDENTITY%ROWID值。但是,如果基于游标的SELECT语句包括DISTINCT关键字或GROUP BY子句,则LAST_IDENTITY不会更改;它将返回其先前的值(如果有)。
  • 对于嵌入式SQL单行(非游标)SELECT语句,LAST_IDENTITY不会更改。返回先前的值(如果有)。

在进程启动时,LAST_IDENTITY返回NULL。在新的%RowID之后,LAST_IDENTITY返回NULL

如果没有行受操作影响,则LAST_IDENTITY不会更改;LAST_IDENTITY返回其先前的值(如果有)。在新的%RowID之后,调用LAST_IDENTITY返回NULL,但调用%ROWID会生<UNDEFINED>错误。

示例

以下示例使用两个嵌入式SQL程序返回LAST_IDENTITY。第一个示例创建一个新表Sample.Students,第二个示例使用数据填充该表,然后对数据执行基于游标的SELECT,并为每个操作返回LAST_IDENTITY

请按显示的顺序运行这两个嵌入式SQL程序。(这里有必要使用两个嵌入式SQL程序,因为除非引用的表已经存在,否则嵌入式SQL无法编译INSERT语句。)

代码语言:javascript
复制
/// d ##class(PHA.TEST.SQLCommand).LastIdentity()
ClassMethod LastIdentity()
{
    w !,"Creating table"
    &sql(
        CREATE TABLE Sample.Students 
        (
            StudentName VARCHAR(30),
            StudentAge INTEGER,
            StudentID IDENTITY
        )
    )
    if SQLCODE=0 {
        w !,"Created table, SQLCODE=",SQLCODE }
    elseif SQLCODE=-201 {
        w !,"Table already exists, SQLCODE=",SQLCODE }
}
代码语言:javascript
复制
ClassMethod LastIdentity1()
{
    w !,"填充表"
    n %ROWCOUNT,%ROWID
    &sql(
        INSERT INTO Sample.Students 
        (
            StudentName, StudentAge
        )
        SELECT Name,Age FROM Sample.Person WHERE Age <= '21'
    )
    if SQLCODE = 0 {
        w !,%ROWCOUNT," 已添加记录,最后一行ID为 ",%ROWID,! 
    } else {
        w !,"Insert failed, SQLCODE=",SQLCODE 
    }
    &sql(
        SELECT LAST_IDENTITY()
        INTO :insertID
        FROM Sample.Students
    )
    w !,"插入最后一个ID为: ",insertID,!!
    /* 基于游标的SELECT查询 */
    &sql(
        DECLARE C10 CURSOR FOR 
        SELECT StudentName INTO :name FROM  Sample.Students
        WHERE StudentAge = '17'
    )
    &sql(OPEN C10)
    q:(SQLCODE'=0)
    &sql(FETCH C10)
    while (SQLCODE = 0) {
        w name," is seventeen",!
        &sql(FETCH C10) 
    }
    &sql(CLOSE C10)
    w !,%ROWCOUNT," 查询的记录,最后一行ID为 ",%ROWID,!
    &sql(SELECT LAST_IDENTITY()
    INTO :qId)
    w !,"SELECT Last Identity is: ",qId,!
    &sql(DROP TABLE Sample.Students)
}
代码语言:javascript
复制
DHC-APP>d ##class(PHA.TEST.SQLCommand).LastIdentity1()
 
填充表
41 已添加记录,最后一行ID为 41
 
插入最后一个ID为: 41
 
Grabscheid,Jocelyn B. is seventeen
 
1 查询的记录,最后一行ID为 37
 
SELECT Last Identity is: 37

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SQL函数 LAST_IDENTITY
  • 大纲
  • 描述
  • 示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档