Sql 如何循环删除
我想知道是否以及如何循环delete语句的结果 delete语句可以返回已删除记录的值: 返回以下错误消息: 无效令牌。 动态SQL错误。 SQL错误代码=-104。 令牌未知-第7行第5列。 删除 那么,这有可能吗 它是否可以与选择的环境一起工作。。。你要循环和光标吗? 这种方法会是什么样子? 我还没有使用过游标。你不能 但是使用返回语法,一个包含多个结果记录的delete会给我: 单件选择中有多行 没错 INSERT/UPDATE/DELETE/UPDATE-OR-INSERT在使用RETURNING子句执行时被视为存储过程调用语句类,而不是查询语句类 这意味着它们不会返回许多不同行的某些结果集,而是返回一组标量参数/字段 而且,您不能在完全不包含行的集合上循环 您链接的文档声称 返回 删除最多一行的DELETE语句可以选择包含RETURNING子句,以便从删除的行返回值Sql 如何循环删除,sql,firebird,sql-delete,firebird2.5,Sql,Firebird,Sql Delete,Firebird2.5,我想知道是否以及如何循环delete语句的结果 delete语句可以返回已删除记录的值: 返回以下错误消息: 无效令牌。 动态SQL错误。 SQL错误代码=-104。 令牌未知-第7行第5列。 删除 那么,这有可能吗 它是否可以与选择的环境一起工作。。。你要循环和光标吗? 这种方法会是什么样子? 我还没有使用过游标。你不能 但是使用返回语法,一个包含多个结果记录的delete会给我: 单件选择中有多行 没错 INSERT/UPDATE/DELETE/UPDATE-OR-INSERT在使用RETU
重点来自文档本身。您可以这样做:
CREATE OR ALTER PROCEDURE NEW_PROCEDURE
RETURNS (
OUT VARCHAR(10))
AS
DECLARE VARIABLE ID INTEGER;
DECLARE VARIABLE TEXT VARCHAR(10);
BEGIN
FOR SELECT xxx.id
FROM xxx
WHERE xxx.id < 5 --some condition
INTO :ID DO
BEGIN
DELETE FROM xxx
WHERE xxx.id = :ID
RETURNING xxx.name INTO :TEXT; /*this is optional (you could select this
text in up select statement*/
OUT = :ID || ' ' || :TEXT;
SUSPEND;
END
END
也可以不使用:ID变量执行带有WHERE CURSOR CURRENT OF子句的内部DELETE,但在Firebird 3中,游标通常非常慢。@Arioch'The不知道这一点!感谢您指出这一点。打开www.translate.ru并浏览,两个指向使用游标示例的链接位于-但是在FB3中游标可能非常慢,他们仍然在3.01、3.02等中发现性能缺陷。。。。
EXECUTE BLOCK
RETURNS (
ADSREF TYPE OF DMN_REFID)
AS
begin
for
delete from m_s_ad_memo
returning ADSREF into :adsref
do
suspend;
end
CREATE OR ALTER PROCEDURE NEW_PROCEDURE
RETURNS (
OUT VARCHAR(10))
AS
DECLARE VARIABLE ID INTEGER;
DECLARE VARIABLE TEXT VARCHAR(10);
BEGIN
FOR SELECT xxx.id
FROM xxx
WHERE xxx.id < 5 --some condition
INTO :ID DO
BEGIN
DELETE FROM xxx
WHERE xxx.id = :ID
RETURNING xxx.name INTO :TEXT; /*this is optional (you could select this
text in up select statement*/
OUT = :ID || ' ' || :TEXT;
SUSPEND;
END
END