分页举例:
SELECT * FROM (
SELECT DEPT.ID, DEPT.MGRNO, ROWNUMBER() OVER (ORDER BY DEPT.ID) AS NS FROM DEPT WHERE DEPT.MGRNO > 0
) AS TEMP WHERE TEMP.NS BETWEEN 1 and 5;
See:
1. API: http://www.ibm.com/developerworks/data/library/techarticle/0307balani/0307balani.html
2. db2分页sql语法
3. db2排序rownumber函数讨论
4. Oracle, DB2 及 MySQL 分页查询写法
SELECT * FROM T ORDER BY I OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY
See: Derby 10.4之后开始支持 http://db.apache.org/derby/docs/10.5/ref/rrefsqljoffsetfetch.html
ALTER TABLE TABLE2 ALTER COLUMN ID2 DROP DEFAULT SET GENERATED AS IDENTITY ( START WITH 0 INCREMENT BY 1 NO CACHE ) ;
ALTER TABLE EMPLOYEE ADD PRIMARY KEY (EMPLOYEE_ID, ORGNO);
ALTER TABLE EMPLOYEE DROP PRIMARY KEY
ALTER TABLE TB2 ALTER COLUMN ID (DROP DEFAULT) SET GENERATED AS IDENTITY ( START WITH 0 INCREMENT BY 1 NO CACHE ) ;
DROP DEFATULT: 如果之前已有DEFAULT值时使用.
以下罗列与Index有关操作的SQL, 如: List/CREATE/DROP 等操作.
SELECT * FROM SYSIBM.SYSINDEXES WHERE CREATOR NOT LIKE ‘SYS%’ AND TBNAME=’tablename‘;
CREATE INDEX EMPLOYEE_EMPLOYEE_ID_IDX ON EMPLOYEE(EMPLOYEE_ID);
CREATE UNIQUE INDEX EMPLOYEE_NAME_IDX ON EMPLOYEE(NAME);
DROP INDEX EMPLOYEE_ORGNO_IDX;
本文将简述通过JDBC呼叫DB2的ALTOBJ存储过程, 以进行Column的Alter操作.
API: http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r0011934.htm
1. 对于Alter Column的操作, 如: 重命名, 修改数据类型, 修改nullable, 扩大数据范围等操作, 不可通过单纯的SQL语句执行. 需要呼叫ALTOBJ存储过程进行修改.
2. 如果使用ATLOBJ 修改Column, Column的数据, 原有PrimaryKey, 相关的Index, 都不会改变.
3. 特别的, 对于重命名列:
– 如果为PrimaryKey, DB2在重新创建Table时会使用新的名称创建主键.
- 但对于有关的Index – 在重建时, DB2使用旧的名称创建Index, 会出现错误, 解决方法是在呼叫存储过程前, 先Drop被重命名的Column对应的Index, 在存储过程呼叫完毕(Table已重建)后, 再次Create Index即可.
4. 对于修改Default/AutoIncrement, 可通过单纯的SQL Alert语句执行就可完成.
以下重命名一个Column (由db2 Control Center show sql生成):
CALL SYSPROC.ALTOBJ ( ‘APPLY_CONTINUE_ON_ERROR’, ‘CREATE TABLE TB6 (
ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 0, INCREMENT BY 1),
NAME3 INTEGER DEFAULT 96 ) IN USERSPACE1 COMPRESS YES ‘, -1, ? )
注意: 该语句只能在DB2工具中使用, 还不能直接在JDBC中.
在JDBC中使用ALTOBJ Alert Column:
按照API中ALTOBJ procedure的说明: 第一个参数(上面语句-1处), 为INOUT类型, 既作为输入参数又作为输出参数(INOUT参数介绍), 因此在JDBC使用时会要求注册out parameter, 在JDBC中则需要使用:
String sql = "CALL SYSPROC.ALTOBJ ( 'APPLY_CONTINUE_ON_ERROR', 'CREATE TABLE TB6 ( ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 0, INCREMENT BY 1), NAME3 INTEGER DEFAULT 96 ) IN USERSPACE1 COMPRESS YES ', ?, ? ))"; // 第一个参数为INOUT参数, 第二个为OUT CallableStatement proc = connection.prepareCall(sql); proc.setInt(1, -1); // 作为IN时, 提供Value proc.registerOutParameter(1, Types.INTEGER); // 作为OUT时 注册输出参数 proc.registerOutParameter(2, Types.VARCHAR); // 第二个参数为OUT参数, 仅注册. proc.executeUpdate();
// Proudly powered by Apache, PHP, MySQL, WordPress, Bootstrap, etc,.