DB2查询错误SQL0204N尽管已定义模式

2 投票
1 回答
3065 浏览
提问于 2025-04-18 07:25

我正在使用pyodbc来访问DB2 10.1.0数据库。

我有一个叫做foobar的登录账户,还有一个同名的模式(schema)。在这个模式下,我有一个叫做users的表。

当我以foobar身份登录时,我可以在命令行中成功运行以下查询:

select * from users

我有一个小的Python脚本,用来连接到这个数据库。这个脚本是:

#!/usr/bin/python

import pyodbc

if  __name__ == "__main__":

    accessString ="DRIVER={DB2};DATABASE=MYDATABASE;SERVER=localhost;UID=foobar; PWD=foobarish1;CURRENTSCHEMA=FOOBAR" 
    print accessString
    cnxn = pyodbc.connect(accessString , autocommit=True)
    cursor = cnxn.cursor()
    query = "SELECT * FROM USERS"
    cursor.execute(query)
    rows = cursor.fetchall()
    for row in rows:
        print 'Row data'
        print row[0]
    cursor.close()
    cnxn.close()

当我运行这个脚本时,我遇到了以下错误:

('42S02', '[42S02] [IBM][CLI Driver][DB2/LINUXX8664] SQL0204N "FOOBAR.USERS" 是一个未定义的名称。 SQLSTATE=42704\n (-204) (SQLExecDirectW)')

这个错误通常意味着模式没有定义。不过,如果我把脚本中的查询改成:

VALUES CURRENT SCHEMA

这个脚本就能成功运行,并且返回了

FOOBAR

有没有人知道怎么解决这个问题,以便我可以查询用户表?非常感谢你的帮助和见解。

补充:我也尝试直接在表名中添加模式,修改查询为

SELECT * FROM FOOBAR.USERS

但我仍然遇到同样的错误。

1 个回答

0

我也遇到过同样的问题,后来通过在查询中明确设置了SCHEMA来解决的:

 SET CURRENT SCHEMA foobar

撰写回答