【问题标题】:DSN8a10.emp is an undefined nameDSN8a10.emp 是未定义的名称
【发布时间】:2019-02-11 17:36:38
【问题描述】:

我刚刚通过运行以下查询创建了一个名为 TELE 的表:

CREATE TABLE TELE
(NAME2 VARCHAR(15) NOT NULL,
NAME1 VARCHAR(12) NOT NULL,
PHONE CHAR(4));

现在,我正在尝试使用 DSN8A10.EMP 表中的数据填充它,方法是运行以下查询:

INSERT INTO TELE
SELECT LASTNAME, FIRSTNME, PHONENO
FROM DSN8A10.EMP
WHERE WORKDEPT = 'D21';

但我收到以下错误:

[42704][-204] “DSN8A10.EMP”是一个未定义的名称.. SQLCODE=-204, SQLSTATE=42704,驱动程序=4.23.42。

我正在将 IntelliJ IDEA 与 com.ibm.db2.jcc.DB2Driver 数据服务器驱动程序一起使用。

你能帮我解决一下吗? 提前致谢!

【问题讨论】:

    标签: sql db2


    【解决方案1】:

    一些可能性:

    • 该表不存在,因为您在架构名称或表名中有拼写错误

    • 表确实存在,但在不同的数据库中

    • 该表存在于数据库中,但名称或架构有混合大小写,在这种情况下,您必须在架构名称和表名称周围使用双引号。所以 "DSN8a10"."emp" 与 DSN8a10.EMP 不同。

    如果 Db2 服务器在 Linux/Unix/Windows 上运行,此查询可能有助于显示混合大小写的名称。该表可能是视图或别名或昵称。

    select tabschema, tabname from syscat.tables where upper(tabschema)='DSN8A10' and upper(tabname) = 'EMP'
    

    如果 Db2 服务器在 i 系列上运行:请改用 QSYS2.SYSTABLES。

    select table_schema, table_name from qsys2.systables where upper(table_schema)='DSN8A10' and table_name='EMP'
    

    如果 Db2 服务器在 Z/OS 上运行:请改用 SYSIBM.SYSTABLES:

    select creator, name from sysibm.systables where upper(creator)='DSN8A10' and upper(name) = 'EMP'
    

    【讨论】:

    • 有没有办法查看当前数据库中是否存在该表? DSN8A10.EMP 是一个示例 IBM DB2 表,它应该列在系统表上,对吧?
    • 似乎需要按照www1.columbia.edu/sec/acis/db2/db2d0/db2d0241.htm#HDRSAMTBL 上的说明安装包含所有示例的示例数据库,包括 EMP 表。完成后,tabschema 将设置为您的计算机用户名,在这种情况下,要显示表的内容将是 select * from .EMP;非常感谢@mao。
    猜你喜欢
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 2023-02-07
    相关资源
    最近更新 更多