为可移植 DB2 应用程序开发精选的常用 SQL 特性

您正在编写需要在平台之间移植的 SQL 应用程序吗?利用下面的信息可以确保应用程序是可移植的。本文中的表总结了常用 SOL 应用程序特性,它们使您通过 SQL 开发跨 DB2® 家族 的可移植应用程序更容易,这个家族包括 DB2 for z/OS®DB2 for i®,以及 DB2 for Linux®、UNIX® 和 Windows®

Staff, IBM, 员工, IBM

本文由 IBM 员工提供。



2010 年 12 月 02 日

简介

IBM 致力于以一种通用的可移植的并且支持 ANSI/ISO SQL 标准的方式,交付对所有平台的客户都非常重要的 SQL 特性。在同一时期内,某些特性可能无法在所有 DB2 产品上提供。这可能是因为不同 DB2 产品的发布时间稍有不同。也可能是因为客户需求会加快特定 DB2 产品上的某一 SQL 特性的开发速度。

许多 IBM 的数据库客户和独立软件供应商都对编写跨多个平台的可移植应用程序感兴趣。其他人员则更喜欢使用 DB2 for Windows 等开发应用程序,然后将其部署到 DB2 for z/OS 上。这些应用程序开发人员要求我们为他们提供一个常用 SQL 语言特性列表,以便快速参考。

这个常用 SQL 应用程序特性的总结可以看作是一个快速参考指南,它包括频繁使用的跨平台特性和函数。更多详细信息,请参考 SQL Reference for Cross-Platform Development(PDF 9.1 MB)及其 DB2 产品 SQL 参考书。

使用这个表之前请阅读 免责声明


包含的产品

  • DB2 Version 9.7 for Linux, UNIX, and Windows
  • DB2 Version 9.1 for z/OS
  • DB2 Version 7.1 for IBM i

内容

Y包含所有 支持的产品。
P包含部分 支持的产品;查看产品信息。
基本元素
语言元素LUWz/OS i 说明
标识符 —— 普通YYY
标识符 —— 限定YYY
支持小写字母和后置下划线的标识符YYY
数据类型级联 —— 隐式YYY
基于代码页的自动数据转换YYY
常量YYY
字符常量的十六进制规范YYY
Null 值YYY
列引用YYY
宿主变量引用YYY
指示器变量YYY
宿主结构YYY
“友好” 算法和转换YYY
算术运算符YYY
字符串连接YYY
作为表达式的标量子选择YYY
作为表达式的标量完全选择YYY
日期/时间算法YYY
CASE 表达式YYY
CAST 规范YYY
ROW CHANGE 表达式YYY
序列引用(NEXT VALUE 和 PREVIOUS VALUE)YYY
OLAP 排序规范(RANK、DENSE_RANK)YYY
OLAP 编号规范(ROW_NUMBER)YYY
无类型参数标记YPY对于 z/OS,将在其他平台支持的上下文中返回无类型标记错误。
诊断区域YYY
SQLSTATEYYY
SQLCODEYYY
描述符区域YYY
数据类型
语言元素LUWz/OS i 说明
SMALLINTYYY
INTEGERYYY
BIGINTYYY
DECIMALYYY
NUMERICYYYNUMERIC 在 DB2 for i 上定义为区位十进制,在其他平台则定义为压缩十进制。
REALYYY针对跨平台的移植性,不使用 FLOAT(n)。
DOUBLE 或 FLOATYYY针对跨平台的移植性,不使用 FLOAT(n)。
DECFLOATYYY
CHARACTERYYY
VARCHARYYY
使用 CHAR 或 VARCHAR 的 FOR BIT DATAYYY
CLOBYYY
使用 CHAR、VARCHAR 或 CLOB 的 FOR SBCS 或 MIXED DATAPYY
BLOBYYY
GRAPHICYYY
VARGRAPHICYYY
DBCLOBYYY
DATEYYY
TIMEYYY
TIMESTAMPYYY
XMLYYP
用户定义的独特类型YYY
特殊注册
语言元素LUWz/OS i 说明
CURRENT CLIENT_ACCTNGYYY
CURRENT CLIENT_APPLNAMEYYY
CURRENT CLIENT_USERIDYYY
CURRENT CLIENT_WRKSTNNAMEYYY
CURRENT DATEYYY
CURRENT_DATEYYY
CURRENT DECFLOAT ROUNDING MODEYYY
CURRENT DEGREEYYY
CURRENT PATHYYY
CURRENT_PATHYYY
CURRENT SCHEMAYYY
CURRENT_SCHEMAYYY
CURRENT SERVERYYY
CURRENT TIMEYYY
CURRENT_TIMEYYY
CURRENT TIMESTAMPYYY
CURRENT_TIMESTAMPYYY
CURRENT TIMEZONEYYY
SESSION_USERYYY
USERYYY
谓词
语言元素LUWz/OS i 说明
除了 LOB 类型的基本谓词(= <> < > <= >=)YYY
使用在比较运算符右边进行标量子查询的基本谓词YYY
在左边使用单个表达式(没有子查询)、在右边子查询的限定谓词(ALL、ANY 或 SOME)YYY
BETWEEN(没有标量子查询)YYY
EXISTS(子查询)YYY
后跟表达式列表的 INYYY
后跟单个列子查询的 INYYY
IS NULL(没有标量子查询)YYY
使用宿主变量或字符串常量作为模式的 LIKE YYY
有针对模式和转义符的表达式的 LIKEYYY
聚合函数
语言元素LUWz/OS i 说明
AVGYYY
COUNTYYY
COUNT_BIGYYY
MAXYYY
MINYYY
STDDEVYYY
SUMYYY
VARIANCE 或 VARYYY
XMLAGGYYY
标量函数
语言元素LUWz/OS i 说明
ABSVAL 或 ABSYYY
ACOSYYY
ADD_MONTHSYYY
ASCIIYYY
ASINYYY
ATANYYY
ATANHYYY
ATAN2YYY
BIGINTYYY
BLOBYYY
CEIL 或 CEILINGYYY
CHAR(没有字符串单元)YYY
CHARACTER_LENGTH 或 CHAR_LENGTH(没有字符串单元)PPY对于 LUW 和 z/OS,需要参数 CODEUNITS16 来获得对大多数数据等效的功能。
CLOB(没有字符串单元)YYY
COALESCE(或 VALUE)YYY
COMPARE_DECFLOATYYY
CONCATYYY
CONTAINSYYY
COSYYY
COSHYYY
DATEYYY
DAYYYY
DAYNAMEYPYz/OS 支持函数作为模式 DSN8 中的样例。
DAYOFWEEKYYY
DAYOFWEEK_ISOYYY
DAYOFYEARYYY
DAYSYYY
DBCLOB(没有字符串单元)YYY
DECFLOATYYY
DECIMAL 或 DECYYY
DECRYPT_BITPYYLUW 支持带有名称 DECRYPT_BIN 的函数。
DECRYPT_CHARYYY
DEGREESYYY
DIFFERENCEYYY
DIGITSYYY
DOUBLE 或 DOUBLE_PRECISIONYYY
ENCRYPTYYYENCRYPT 函数的语法很普通,但 z/OS 的结果将使用 ENCRYPT_TDES 格式而不是 ENCRYPT_RC2。
EXPYYY
EXTRACTYYY
FLOATYYY
FLOORYYY
GENERATE_UNIQUEYYY
GETHINTYYY
GRAPHIC(没有字符串单元)PYY
HEXYYY
HOURYYY
IDENTITY_VAL_LOCALYYY
INSERT(没有字符串单元)YYY
INTEGER 或 INTYYY
JULIAN_DAYYYY
LAST_DAYYYY
LCASE 或 LOWERYYY
LEFT(没有字符串单元)PYY
LENGTH(没有字符串单元)YYY
LNYYY
LOCATE(没有字符串单元)YYY
LOG10YYY
LTRIMPPYLUW 不支持 CLOB 参数。z/OS 不支持 CLOB 参数。
MAXYYY
MICROSECONDYYY
MIDNIGHT_SECONDSYYY
MINYYY
MINUTEYYY
MODPYY
MONTHYYY
MONTHNAMEYPYz/OS 支持函数作为模式 DSN8 中的样例。
MONTHS_BETWEENYYY
MQREAD 至多两个参数YYY
MQREADCLOB 至多两个参数YYY
MQRECEIVEYYY
MQRECEIVECLOBYYY
MQSENDYYY
MULTIPLY_ALTYYY
NEXT_DAYYYY
NORMALIZE_DECFLOATYYY
NULLIFPPYLUW 不支持 LOB 参数。z/OS 不支持 LOB 参数。
POSITION(没有字符串单元)PPY对于 LUW,需要参数 CODEUNITS16 来获得对大多数数据等效的功能。对于 z/OS,需要参数 CODEUNITS16 来获得对大多数数据等效的功能。
POSSTRYYY
POWERYYY
QUANTIZEYYY
QUARTERYYY
RADIANSYYY
RAISE_ERRORYYY
RANDYYY
REALYYY
REPEATPPYLUW 不支持图形类型。z/OS 不支持 LOB 参数。
REPLACEPPYLUW 不支持图形类型。z/OS 不支持 LOB 参数。
RIDYYY
RIGHT(没有字符串单元)PYYLUW 不支持图形类型。
ROUND(数值)YYY
ROUND_TIMESTAMPYYY
RTRIMPPYLUW 不支持 CLOB 参数。z/OS 不支持 CLOB 参数。
SCOREYYY
SECONDYYY
SIGNYYY
SINYYY
SINHYYY
SMALLINTYYY
SOUNDEXYYY
SPACEPYY
SQRTPYY
STRIPYYY
SUBSTRYYY
SUBSTRING(没有字符串单元)PPY对于 LUW,需要参数 CODEUNITS16 来获得对大多数数据等效的功能。对于 z/OS,需要参数 CODEUNITS16 来获得对大多数数据等效的功能。
TANYYY
TANHYYY
TIMEYYY
TIMESTAMPYYY
TIMESTAMP_ISOYYY
TIMESTAMP_FORMAT 或 TO_DATEYYY
TIMESTAMPDIFFYYY
TOTALORDERYYY
TRANSLATEYYY
TRUNCATE 或 TRUNC(数值)YYY
TRUNC_TIMESTAMPYYY
UCASE 或 UPPERYYY
VALUEYYY
VARCHAR(没有字符串单元)PYY
VARCHAR_FORMAT 或 TO_CHARYYY
VARGRAPHIC(没有字符串单元)YYY
WEEKYYY
WEEK_ISOYYY
XMLATTRIBUTESYYY
XMLCOMMENTYYY
XMLCONCATYYY
XMLDOCUMENTYYY
XMLELEMENTYYY
XMLFORESTYYY
XMLNAMESPACESYYY
XMLPARSEYYY
XMLPIYYY
XMLSERIALIZEYYY
XMLTEXTYYY
YEARYYY
表函数
语言元素LUWz/OS i 说明
MQREADALLYYY
MQREADALLCLOBYYY
MQRECEIVEALLYYY
MQRECEIVEALLCLOBYYY
查询
语言元素LUWz/OS i 说明
SELECT 子句YYY
SELECT 子句中的 AS 子查询YYY
SELECT 子句中的 Qualified * 或 unqualified *YYY
SELECT 子句中除标量子查询以外的表达式YYY
SELECT 子句中允许使用聚合函数,不管结果是否表派生于分组视图YYY
引用单个表或视图的 FROM 子句YYY
带有隐式内部联接(用多个逗号分隔的表引用)的 FROM 子句YYY
带有包含子查询的嵌套表表达式的 FROM 子句YYY
带有用 TABLE 关键字优先的表表达式的 FROM 子句YYY
带有隐式 INNER JOIN 的 FROM 子句YYY
带有 LEFT OUTER JOIN 的 FROM 子句YYY
带有 RIGHT OUTER JOIN 的 FROM 子句YYY
联合条件相等的 FULL OUTER JOIN 的 FROM 子句YYY
带有 INSERT 语句 的 FROM 子句YYY
WHERE 子句YYY
引用列名称的 GROUP BYYYY
引用分组表达式的 GROUP BYYYY
HAVING 子句YYY
使用 UNION 或 UNION ALL 的全查询YYY
使用 INTERSECT 或 INTERSECT ALL 的全查询YYPDB2 for i 不支持 INTERSECT ALL。
使用 EXCEPT 或 EXCEPT ALL 的全查询YYPDB2 for i 不支持 EXCEPT ALL。
以普通表表达式开始的选择语句YYY
使用递归普通表表达式的选择语句YYY
基于限定列名的 ORDER BY 子句YYY
基于排序键表达式的 ORDER BY 子句YYY
基于不在 SELECT 列表中的表达式的 ORDER BY 子句YYY
ORDER BY ORDER OFYYY
带有列名列表的 FOR UPDfor 子句 YYY
带有隐式列列表的 FOR UPDATE 子句YYY
FOR READ ONLY 子句YYY
使用整数行数的 OPTIMIZE 子句YYY
使用带 CS、RR 或 RS 分离子句的选择语句YYY
使用带只读选择语句上的 UR 的分离子句的选择语句YYY
FETCH FIRST 子句YYY
基本语句
语言元素LUWz/OS i 说明
静态 CALL 语句YYY
使用程序名的变量名的静态 CALL 语句YYY
带有可选 WHERE、GROUP BY 或 HAVING 子句的 SELECT INTO 语句YYY
带有 FETCH FIRST 子句的 SELECT INTO 语句YYY
带有分离子句的 SELECT INTO 语句YYY
SET 宿主变量语句YYY
VALUES INTO 语句YYY
数据更改语句
语言元素LUWz/OS i 说明
搜索的 DELETE 语句YYY
使用一行 VALUES 子句的 INSERT 语句YYY
使用子查询的 INSERT 语句YYY
使用表引用输入的 MERGE 语句YYY
搜索的 UPDATE 语句YYY
面向游标的操作
语言元素LUWz/OS i 说明
ALLOCATE CURSOR 语句YYY
ASSOCIATE LOCATORS 语句YYY
CLOSE 语句YYY
DECLARE CURSOR 语句(参阅其他游标元素)YYY
声明 INSENSITIVE SCROLL 游标PYYLUW 仅通过 CLI 或 JDBConly 支持这种特性。
声明 WITH HOLD 游标YYY
声明 WITH RETURN 游标(隐式返回给调用程序)YYY
声明 WITH RETURN TO CALLER 游标YYY
定位的 DELETE 语句YYY
没有任何游标方向的 FETCH 语句(隐式 NEXT)YYY
使用 NEXT、PRIOR、FIRST、LAST、BEFORE、AFTER、CURRENT 或 RELATIVE 的 FETCH 语句PYYLUW 仅通过 CLI 或 JDBConly 支持这些获取特性。
使用 ABSOLUTE 的 FETCH 语句PYP
OPEN 语句YYY
定位的 UPDATE 语句YYY
连接和事务控制
语言元素LUWz/OS i 说明
软件包级别的隔离级别规范(Isolation Level Specification)YYY
语句级别的隔离级别规范YYY
RR(SQL2003 标准中的 SERIALIZABLE)YYY
RS(SQL2003 标准中的 REPEATABLE READ)YYY
CS(SQL2003 标准中的 READ COMMITTED)YYY
UR(SQL2003 核心标准中的 READ UNCOMMITTED)YYY
使用 USE AND KEEP EXCLUSIVE LOCKS 的分离子句PPY
COMMIT 语句YYY
CONNECT 语句(每个事务一个站点)YYY
CONNECT 语句(每个事物两个以上的站点)(也称为作为两个阶段提交)YYY
DISCONNECT 语句YYY
RELEASE 连接语句YYY
RELEASE SAVEPOINT 语句YYY
工作语句的 ROLLBACK 单元YYY
ROLLBACK TO SAVEPOINT 语句YYY
SAVEPOINT 语句 —— 没有嵌套YYY
SAVEPOINT 语句 —— 嵌套的YYY
SET CONNECTION 语句YYY
动态设备
语言元素LUWz/OS i 说明
没有 USING 子句的 DESCRIBE 输出语句YYY
DESCRIBE INPUT 语句YYY
EXECUTE 语句YYY
EXECUTE IMMEDIATE 语句YYY
PREPARE 语句YYY
指定游标选项(ATTRIBUTES 子句)的 PREPARE 语句PYYLUW 仅通过 CLI 或 JDBC 支持这项特性。
控制语句
语言元素LUWz/OS i 说明
SQL 过程中的控制语句YYY
SQL 函数中的控制语句PPY部分支持允许 SQL 函数中出现一条单一的 RETURN 语句。
分配语句YYY
CASE 语句YYY
符合语句YYY
没有原子复合语句的嵌套YYY
FOR 语句YYY
GET DIAGNOSTICS for ROW_COUNT 语句YYY
GET DIAGNOSTICS for RETURN_STATUS 语句YYY
GET DIAGNOSTICS for MESSAGE_TEXT 语句YYY
GOTO 语句YYY
IF 语句YYY
ITERATE 语句YYY
LEAVE 语句YYY
LOOP 语句YYY
REPEAT 语句YYY
RESIGNAL 语句YYY
SQL 过程中的 RETURN 语句YYY
SQL 函数的中的 RETURN 语句YYY
SIGNAL 语句YYY
WHILE 语句YYY
数据定义
语言元素LUWz/OS i 说明
允许 SQL 程序中出现 DDL 语句YYY
支持 DDL 的事务语义YYY
支持 18 个字节的对象名(模式名除外)YYY一些平台支持更长的对象名。
支持 10 个字节的模式名YYY一些平台支持更长的模式名。
ALTER 函数语句PPY
ALTER PROCEDURE 语句PYY
ALTER SEQUENCE 语句YYY
ALTER TABLE 语句(参阅其他标记 ALTAB 的元素)YPYz/OS 不允许多次指定同一条子句。
ALTER COLUMN(ALTAB)PPY
COMMENT 语句YYY
CREATE ALIAS 语句YYY
CREATE DISTINCT TYPE 语句YYY
CREATE FUNCTION(外部标量)语句YYY
CREATE FUNCTION(源)语句YYY
CREATE function(SQL 标量)语句PPY不是每个平台都支持一条语句的所有特性。
CREATE FUNCTION(外部表)语句YYY
基于列列表的 CREATE INDEXYYY
基于列列表的 CREATE UNIQUE INDEXYYY
外部过程的 CREATE PROCEDURE 语句YYY
SQL 过程的 CREATE PROCEDURE 语句YYY
CREATE SCHEMAYPYz/OS 需要一个特殊的模式处理器来处理这条语句。
CREATE TABLE 语句使用列定义(参阅其他标记 CRTAB 的元素)YYY
LIKE 其他表/视图的 CREATE TABLE语句(参阅其他标记 CRTAB 的元素)YYY
LIKE 其他包含标识符的 CREATE TABLE 语句(参阅其他标记 CRTAB 的元素)YYY
AS 查询的 CREATE TABLE 语句(参阅其他标记 CRTAB 的元素)YYY
CHECK 约束子句(ALTAB、CRTAB)YYY
DATA CAPTURE 子句(ALTAB、CRTAB)YYPDB2 for i 表总是捕捉更改 —— 不支持这条子句。
没有指定值(ALTAB、CRTAB、DGTTAB)的 DEFAULT 子句YYY
有指定值(ALTAB、CRTAB、DGTTAB)的 DEFAULT 子句YYY
IMPLICITLY HIDDEN 子句(ALTAB、CRTAB)YYY
VOLATILE 子句(ALTAB、CRTAB)YYY
IDENTITY 子句(ALTAB、CRTAB、DGTTAB)YYY
ROW CHANGE TIMESTAMP 子句(ALTAB、CRTAB)YYY
PRIMARY KEY 约束子句(ALTAB、CRTAB)YYY
UNIQUE 约束子句(ALTAB、CRTAB)YYY
针对独特常量的自动索引生成(ALTAB、CRTAB)YYY
引用的约束子句(ALTAB、CRTAB)YYY
指定 ON DELETE(ALTAB、CRTAB)的 REFERENCES 子句PPYLUW 不支持 ON DELETE SET DEFAULT。z/OS 不支持 ON DELETE SET DEFAULT。
不需要使用 ALTER TABLE 即可指定自引用表YPY
用户维护的 MQT(CRTAB、ALTAB)YYY
CREATE SEQUENCE 语句YYY
CREATE TRIGGER 语句 —— 表上的 BEFORE 或 AFTER 触发器YYY
CREATE TRIGGER 语句 —— 视图上的 INSTEAD OF 触发器YPY
使用不带 CHECK OPTION 子句的 CREATE VIEW 语句YYY
CREATE VIEW WITH CASCADED CHECK OPTIONYYY
CREATE VIEW WITH LOCAL CHECK OPTIONYYY
DECLARE GLOBAL TEMPORARY TABLE 语句(参阅其他标记 DGTTAB 的元素)PYY
指定了 RESTRICT 或 CASCADE 的 DROP 语句PPY
DROP ALIAS 语句YYY
DROP DISTINCT TYPE 语句YYY
DROP FUNCTION 语句YYY
DROP INDEX 语句YYY
DROP PACKAGE 语句YYY
DROP PROCEDURE 语句YPY
DROP SEQUENCE 语句YYY
DROP TABLE 语句YYY
DROP TRIGGER 语句YYY
DROP VIEW 语句YYY
RENAME TABLE 语句PPY
授权
语言元素LUWz/OS i 说明
GRANT 函数或程序权限语句YYY
没有 WITH GRANT OPTION 子句的 GRANT 程序包权限语句YYY
有 WITH GRANT OPTION 子句的 GRANT 程序包授权语句YYY
GRANT 序列权限语句YYY
GRANT 表权限语句YYY
REVOKE 函数权限语句YYY
REVOKE 过程权限语句YPY
REVOKE 程序包权限语句YYY
REVOKE 序列权限语句YYY
REVOKE 表权限语句YYY
杂项语句
语言元素LUWz/OS i 说明
BEGIN 和 END DECLARE SECTION 语句YYY
DECLARE STATEMENT 语句PYYLUW 仅在 SQL 存储过程中支持这条语句。
FREE LOCATOR 语句YYY
INCLUDE 语句YYY
LOCK TABLE 语句YYY
REFRESH TABLE 语句YYY
SET CURRENT DECFLOAT ROUNDING MODE 语句YYY
SET CURRENT DEGREE 语句PYY
SET ENCRYPTION PASSWORD 语句YYY
SET PATH 语句YYY
SET SCHEMA 语句YYY
WHENEVER 语句YYY
宿主语言
语言元素LUWz/OS i 说明
C 或 C++YYY
COBOLYYY
FORTRANYYY
Java(SQLJ)YYY
PL/IYYY
REXXYYY

免责声明

这个不是一个完整的列表。挑选的特性以客户感兴趣的程度为依据。查看我们产品的详细 SQL 语言参考书可以找到更多常见的特性。

这个列表不是针对任何 DB2 产品的特性和函数列表。某一特性可能已经出现在某一平台上,或者即将出现在其他 DB2 平台上,因为我们一直在不停地发布新特性。因为客户与市场之间的差异,所以并不是所有平台都在同一时间提供相同的特性。

参考资料

学习

获得产品和技术

讨论

  • 参与 developerWorks 博客 并加入 developerWorks 社区;附上个人配置文件和自定义主页,可根据个人喜好量身定制 developerWorks 并与其他 developerWorks 用户交互。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=593463
ArticleTitle=为可移植 DB2 应用程序开发精选的常用 SQL 特性
publish-date=12022010