代码之家  ›  专栏  ›  技术社区  ›  Erkan Haspulat

如何获取PostgreSQL中删除的行数?

  •  28
  • Erkan Haspulat  · 技术社区  · 16 年前

    我正在寻找一种返回PostgreSQL中受DELETE子句影响的行数的方法。这个 documentation 声明:

    成功完成后,删除 命令返回的命令标记 形式

    删除计数

    计数是行数 删除。如果count为0,则没有行 符合条件(这不是 视为错误)。


    here

    5 回复  |  直到 7 年前
        1
  •  -2
  •   Milen A. Radev    16 年前

    你需要 PQcmdTuples 函数从 libpq .例如,在PHP中,包装为 pg_affected_rows .

        2
  •  48
  •   Mehrdad Afshari    10 年前

    你可以使用 RETURNING 条款:

    DELETE FROM table WHERE condition IS TRUE RETURNING *;
    

    之后,您只需检查返回的行数。你可以简化它 CTE :

    WITH deleted AS (DELETE FROM table WHERE condition IS TRUE RETURNING *) SELECT count(*) FROM deleted;
    

    这应该只返回删除的行数。

        3
  •  7
  •   cope360    16 年前

    这在Java中应该是简单的。

    Statement stmt = connection.createStatement();
    int rowsAffected = stmt.executeUpdate("delete from your_table");
    System.out.println("deleted: " + rowsAffected);
    

    java.sql.Statement .

        4
  •  3
  •   Dave    12 年前

    在使用psycopg2的python中, rowcount 可以使用属性。下面是一个例子来找出删除了多少行…

    cur = connection.cursor()
    try:
        cur.execute("DELETE FROM table WHERE col1 = %s", (value,))
        connection.commit()
        count = cur.rowcount
        cur.close()
        print("A total of %s rows were deleted." % count)
    except:
        connection.rollback()
        print("An error as occurred, No rows were deleted")
    
        5
  •  3
  •   Ankur Srivastava    9 年前

    get diagnostics用于显示修改/删除的记录数。

    样本代码

    CREATE OR REPLACE FUNCTION fnName()
      RETURNS void AS
    $BODY$
            declare
             count numeric;
           begin
                  count := 0;
                LOOP
                 -- condition here update or delete;
                 GET DIAGNOSTICS count = ROW_COUNT;
                 raise notice 'Value: %', count;
                 end loop;
            end;
    $BODY$a
    
    推荐文章