当前位置:首页 > 数据库 > SQL其他

DB2查询错误SQL0204N即使定义了模式

我正在使用Python访问DB2 10.1.0中的表

我有一个名为foobar的登录帐户和一个具有相同名称的模式.我在架构下有一个名为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” is an undefined name. SQLSTATE=42704n (-204) (SQLExecDirectW)’)

这通常意味着未定义架构.但是,如果我将脚本中的查询更改为:

VALUES CURRENT SCHEMA

脚本成功运行并返回

FOOBAR

我还尝试将架构直接添加到表名,进行查询

SELECT * FROM FOOBAR.USERS

我仍然得到同样的错误.

有谁知道如何解决这个问题,以便查询用户表?非常感谢您的帮助和见解.

解决方法:

也许大小写有问题.我使用以下语句创建了一个表:

CREATE TABLE“FOOBAR”.“用户”(col1 INTEGER)

如果我尝试在CLP上运行以下语句,我会收到错误SQL -204

db2“select * from db2root1.Users”

db2“select * from db2root1.USERS”

db2“select * from db2root1.users”

始终错误消息SQL0204N“DB2ROOT1.USERS”是未定义的名称.返回SQLSTATE = 42704.

我建议运行以下语句并检查表名的拼写.

从syscat.tables中选择t.tabname,其中lower(t.tabname)就像’user%’

有些工具使用区分大小写的表名创建表.在某些情况下,这可能会导致SQL -204.

在这种情况下,删除并重新创建没有任何引号的表.


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!