如何识别 DB2 7.1 版中的主键列

How to identify primary key column in DB2 version 7.1

我正在使用 DB2 version7.1 并尝试查询主键列名称以满足我的要求之一。我尝试使用谷歌搜索,但无法获得与 DB2 7.1 相关的任何信息。

我对 DB2 了解不多,因此寻求帮助以从 BD2 7.1 版中查找主键列。期待对此的积极帮助。

如果您按照问题中的 db2-400 标签的建议使用 i 系列的 Db2(以前称为 AS/400),请检查目录 QSYS2.SYSCST - 它有一个列 CONSTRAINT_TYPE 主键的值为 'P'。您可能需要加入其他目录对象(例如 QSYS2.SYSTABLES、QSYS2.SYSCOLUMNS),具体取决于您所寻找内容的详细信息。

i 系列 R7.1 的 Db2 知识中心仍然是 online

根据应用程序的年龄,您可能无法在 SQL 目录中找到它。不幸的是,许多(大多数?)RPG 应用程序没有使用 DB2 数据库的全部功能,包括索引、视图和约束。这正在缓慢变化,但很可能您将不得不寻找具有唯一键的逻辑文件。可能没有定义主键。您可以在 SQL 目录中查找,但如果找不到您要查找的内容,以下内容更有可能提供帮助。

  1. 使用 DSPDBR <table name> 查找与物理文件 (table) 关联的逻辑文件。如果不知道命令行应该是什么样子,可以按F4提示输入参数。

  2. 如果你能找到逻辑文件的来源(可能在源文件 QDDSSRC 中),检查它,如果它在记录格式行上方有关键字 UNIQUE,那么这个可以被认为是主键,或者至少是唯一键。确保源底部没有记录选择。可以有多个这样的逻辑文件。

  3. 另一种确定逻辑文件是否具有唯一键的方法是使用DSPFD <logical file>命令。然后在结果屏幕中搜索 'Unique'。屏幕应如下所示:

File  . . . . . :   QPDSPFD                                             
Control . . . . .   __________                                                     
Find  . . . . . .   Unique                                              
*...+....1....+....2....+....3....+....4....+....5....+....6....+....7..  
   Access path maintenance . . . . . . . . . . : MAINT      *IMMED      
   Unique key values required  . . . . . . . . : UNIQUE     Yes         
   Select/omit specified . . . . . . . . . . . :            No          
   Access path journaled . . . . . . . . . . . :            No          
   Access path . . . . . . . . . . . . . . . . :            Keyed       
   Number of key fields  . . . . . . . . . . . :              3         
   Record format . . . . . . . . . . . . . . . :            JCNCXR      
     Key field . . . . . . . . . . . . . . . . :            XFNCMNO     
       Sequence  . . . . . . . . . . . . . . . :            Ascending   
       Sign specified  . . . . . . . . . . . . :            SIGNED      
       Zone/digit specified  . . . . . . . . . :            *NONE       
       Alternative collating sequence  . . . . :            No          
     Key field . . . . . . . . . . . . . . . . :            XFJOBYR     
       Sequence  . . . . . . . . . . . . . . . :            Ascending   
       Sign specified  . . . . . . . . . . . . :            SIGNED      
       Zone/digit specified  . . . . . . . . . :            *NONE       
       Alternative collating sequence  . . . . :            No          
     Key field . . . . . . . . . . . . . . . . :            XFJOBNO     
       Sequence  . . . . . . . . . . . . . . . :            Ascending   

Unique key values required . . . . . . . . : UNIQUE Yes表示逻辑文件包含唯一键。下面这行Select/omit specified . . . . . . . . . . . : No表示逻辑文件中没有记录选择逻辑,所以它包含了物理文件中的所有记录。底部的行按顺序显示关键字段。这与逻辑文件所能获得的最接近主键。由于与物理文件相关的每个逻辑文件都可以有一个唯一的键,大多数应用程序将使用命名来识别哪个是主键,有时这将是文件名上的 L00 或 L01 后缀。

更复杂的是,物理文件本身可以被唯一地键入。您也可以查看源代码或使用 DSPFD <physical file> 来确定。

这些是关于 DB2 for i 的一些独特之处,在其他 DB2 版本中是没有的。而且,过去 RPG 程序员只使用物理和逻辑文件,而不是 DB2 数据库的 SQL 性质。