RETURNING子句
一个涉及到最多只返回一行的UPDATE语句可能包含RETURNING为了返回某些值从被更新的行,RETURNING可能包括任何行的数据,而不必是当前的一个正在更新的数据,它可以包括文字不相关的列,如果有需要的话。
当返回集合包含当前行的数据时,返回的值报告是在BEFORE UPDATE触发器中被更新的,但不是在AFTER UPDATE触发器之后进行的。
上下文变量old.fieldname和new.fieldname可以被用来作为列名。如果OLD.或 NEW.没有被指定,那么列值返回的是NEW.中的值。
在DSQL,一个带有RETURNING的语句总是返回单行。如果语句更新没有记录,返回值包含NULL值。这种行为可能会改变未来Firdbird的版本。
INTO子句
INTO子句可以用于传递返回值到局部变量。它在DSQL不可用。如果没有更新记录,什么也不会返,RETURNING指定变量将保择它们之前的值。
备注
当一个值被返回并赋值给一个新的上下文变量时,它使用冒号的前缀无效。
例如,这是无效的:
...
into :var1, :var2, :new.id
而这是有效的:
...
into :var1, :var2, new.id
RETURNING子句例子 (DSQL):
UPDATE Scholars
SET firstname = 'Hugh', lastname = 'Pickering'
WHERE firstname = 'Henry' and lastname = 'Higgins'
RETURNING id, old.lastname, new.lastname
更新 BLOB列
更新 BLOB 列始终替换其全部内容。甚至存储在列中的"句柄"BLOB ID也被修改。下列情形可以更新 Blob︰
1.客户端应用程序对于此操作作出了特别规定,使用火鸟 API。在这种情况下,所用的方法是特定于应用程序且在这份手册的范围之外。
2.新的值是最多 32767 个字节的文本字符串。请注意 ︰ 如果值不是字符串,要当心关联事项,作为这些可能超过最大长度。
3.源本身就是一个 BLOB 列,或更一般地,该表达式返回一个 BLOB。
4.使用INSERT CURSOR语句 (只在ESQL中 )。