第七十二章 SQL函数 LAST_IDENTITY
第七十二章 SQL函数 LAST_IDENTITY
返回最后插入、更新、删除或读取的行的标识的标量函数。
大纲
LAST_IDENTITY()
描述
LAST_IDENTITY函数返回%ROWID局部变量值。在嵌入式SQL或ODBC中将%ROWID局部变量设置为一个值。动态SQL、SQL Shell或管理门户SQL界面未将%ROWID局部变量设置为值。动态SQL改为设置%ROWID对象属性。
LAST_IDENTITY函数不接受任何参数。请注意,参数括号是必需的。
LAST_IDENTITY返回受当前进程影响的最后一行的标识字段值。如果表没有标识字段,则返回受当前进程影响的最后一行的行ID(%ROWID)。返回值为数据类型INTEGER。
- 对于嵌入式SQL
INSERT、UPDATE、DELETE或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。在新的%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语句。)
/// 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 }
}
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)
}
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