iperf udb_DB2 UDB iSeries长短标识符

©2001国际商用机器公司。 版权所有。

iSeries支持两种类型SQL标识符:普通标识符和定界标识符。 普通标识符以大写字母开头,并转换为所有大写字母。 分隔标识符是SQL转义字符中包含的一个或多个字符的序列。 SQL转义字符是引号,因此分隔的列名称可能被指定为“ CompanyName”。 分隔标识符的最大长度包括列名称的两个SQL转义字符,但其他SQL名称不包括在内。 DB2 UDB iSeries版不支持双字节表名。

通常,将其他数据库移植到iSeries时,DB2 UDB for iSeries SQL标识符长度的最大值不是问题。 DB2 UDB iSeries版的列名最多可以包含30个字符(如果使用分隔的列名,则为28个字符),并且大多数SQL对象(例如表,索引,过程和约束)最多支持128个字符的长度。 模式和授权名称是标识符类型,最大长度最小为10个字符。 所有SQL限制都记录在《 DB2 UDB iSeries版SQL参考》中。 尽管DB2 UDB iSeries版支持长SQL标识符,但是iSeries操作系统OS / 400固有的命令和接口的对象名称硬性最多为10个字符。 例如,用于备份数据库对象(如表和索引)的保存命令仅支持10个字符的标识符。 那么,如何备份标识符长度超过10个字符SQL对象? 当指定SQL标识符长于10个字符时,DB2 UDB iSeries版将自动生成一个长度为10个字符的“短”标识符,该标识符可与OS / 400命令和本机接口一起使用。 为所有SQL对象名称(包括列标识符)生成此“短”名称。 这些最长为10个字符的较短SQL标识符也称为系统名称。 当尝试在同一对象上使用Windows和DOS实用程序时,iSeries对长和短SQL标识符的支持与文件名限制非常相似。

由于系统生成的简称是由系统生成的,因此确实存在缺点。 首先,它们不是用户友好的。 DB2 UDB接受SQL标识符的前五个字符,然后在这五个字符后附加一个五位数的唯一数字。 例如,CUSTOMER_MASTER的简称为CUSTO00001。 其次,更重要的是,由于依赖于创建顺序和共享相同前五个字符的其他标识符,因此不能保证这些短名称在系统之间或同一SQL对象的重复创建中保持一致。 因此,DB2 UDB iSeries版提供了SQL语法以允许您控制短名称。

RENAME TABLE SQL语句已添加到DB2 UDB iSeries版中,以使开发人员能够定义分配给其SQL表的简短系统名称。 RENAME TABLE语句还可用于控制Index和View对象的简称。

另外,将FOR COLUMN子句添加到了iSeries CREATE TABLE和ALTER TABLE语句中,以分配短列名。 由于某些iSeries编程语言(例如RPG)无法访问标识符长度超过十个字符的表列,因此在某些数据库定义中需要短列名称和长列名称。 这是在CREATE TABLE语句上使用FOR COLUMN子句为列定义分配您自己的短系统名称的示例:

CREATE TABLE dbtest/cuastomer_master
      (customer_name FOR COLUMN cusnam CHAR (20),
       customer_city FOR COLUMN cuscty CHAR(40))

使用此定义,基于SQL的编程接口(例如ODBC和JDBC)将引用长SQL名称(customer_name和customer_city),而遗留应用程序将通过使用短标识符(cuscty和cusnam)来引用相同的列。

继续该示例,让我们看一个使用RENAME TABLE语句控制短表名的示例。 要覆盖customer_master的系统生成的名称(即CUSTO0001),RENAME TABLE语句将分配一个短名称cusmst。

RENAME TABLE dbtest/customer_master 
            TO SYSTEM NAME cusmst

执行该语句后,SQL表名称为customer_master ,系统表名称为cusmst 。 您SQL请求将引用customer_master,并且OS / 400系统命令(例如SAVOBJ(保存对象)或DSPFD(显示文件描述))将使用简称cusmst。

如果在下面的示例中碰巧使用短名称创建了SQL对象,则RENAME TABLE语句也可以按如下方式使用,以为该对象分配“长” SQL标识符。 完成此RENAME请求后,结果与前面的示例相同-SQL表名称为customer_master,系统表名称为cusmst。

CREATE TABLE dbtest/cusmst
      (customer_name FOR COLUMN cusnam CHAR (20),
       customer_city FOR COLUMN cuscty CHAR(40))
      RENAME TABLE dbtest/cusmst TO customer_master 
              FOR SYSTEM NAME cusmst

短名称和长名称都存储在DB2目录中。 如果不确定表的系统名称,则可以运行以下查询以从SYSTABLES目录中提取该信息。 可以针对其他类型SQL标识符对目录视图执行类似的查询。

SELECT system_table_name FROM qsys2.systables 
            WHERE table_name='CUSTOMER_MASTER' AND table_schema='DBTEST'

创建存储过程和用户​​定义的函数时,可以使用SPECIFIC子句来分配短名称。 创建SQL过程或函数后,DB2 UDB iSeries版将生成一个C程序对象以实现业务逻辑。 即使过程或函数名称的最大长度为128个字符,C程序对象也像表对象一样被限制为10个字符。 当过程或函数名称的长度超过10个字符时,可以按以下方式使用SPECIFIC子句为C程序对象分配一个短名称。 代替使用名为UPDAT00001的C程序对象,该程序对象将被赋予UPDSAL作为名称。

CREATE PROCEDURE UPDATE_SALARY

(IN EMPLOYEE_NUMBER CHAR (10), IN RATE DECIMAL (6,2))

LANGUAGE SQL

SPECIFIC UPDSAL

MODIFIES SQL DATA

BEGIN

  UPDATE EMP SET SALARY =SALARY +RATE

      WHERE EMPNO =EMPLOYEE_NUMBER;

END

有了有关DB2 UDB iSeries版定制的信息,您现在可以定制SQL数据库定义,以更好地与现有iSeries命令,实用程序和应用程序集成。


翻译自: https://www.ibm.com/developerworks/data/library/techarticle/milligan/0108milligan.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值