繁体   English   中英

为什么删除表中的所有行时DB2返回-1?

[英]Why does DB2 return -1 when deleting all rows in a table?

问题说明了一切。 以Python API为例:

import ibm_db
#setup stuff
conn = ibm_connect(DATABASE, user, password)
stmt = ibm_db.exec_immediate(conn, 'DELETE FROM sometable')
print(ibm_db.num_rows(stmt)) # prints -1

为什么不打印删除的实际行数?

DB2中的SQL代码为负表示错误: SQL代码

实际上,这不是一个答案,只是表明该功能确实起作用并且SQLCODE导致python异常。 num_rows()对您不起作用的事实可能表明您所连接的数据库可能不支持该功能。 您可能需要详细描述您的环境:DB2服务器版本和平台,无论是本地数据库还是远程数据库,DB2客户端版本(如果与服务器不同)等。

  >>> import ibm_db
  >>> conn = ibm_db.connect('TEST',user,password)
  >>> stmt = ibm_db.exec_immediate(conn, 'create table t (f int)')
  >>> print ibm_db.num_rows(stmt)  # DDL statement - num_rows not applicable
  -1
  >>> stmt = ibm_db.exec_immediate(conn,'delete from t')
  >>> print ibm_db.num_rows(stmt)  # 0 rows deleted
  0
  >>> stmt = ibm_db.exec_immediate(conn,'delete from x')  # nonexistent table - exception
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
  Exception: [IBM][CLI Driver][DB2/LINUXX8664] SQL0204N  "USER.X" is an undefined name.  SQLSTATE=42704 SQLCODE=-204
  >>> stmt = ibm_db.exec_immediate(conn,'insert into t(f) values (1),(2),(3)')
  >>> print ibm_db.num_rows(stmt)  # 3 rows inserted
  3
  >>> stmt = ibm_db.exec_immediate(conn,'delete from t')
  >>> print ibm_db.num_rows(stmt)  # 3 rows deleted
  3
  >>> ibm_db.close(conn)
  True
  >>> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM