#重命名emp_photo遇到SQL0750N的错误
[db2inst1@db22 ~]$ db2 "rename table db2inst1.emp_photo to emp_photo_210170725"
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0750N The statement failed because the table or column cannot be renamed.
SQLSTATE=42986
#重命名employee遇到SQL0750N的错误
[db2inst1@db22 ~]$ db2 "rename table db2inst1.employee to employee_210170725"
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0750N The statement failed because the table or column cannot be renamed.
SQLSTATE=42986
#重命名product成功
[db2inst1@db22 ~]$ db2 "rename table db2inst1.product to product_210170725"
DB20000I The SQL command completed successfully.
#成功之后再改回来哈
[db2inst1@db22 ~]$ db2 "rename table db2inst1.product_210170725 to product"
DB20000I The SQL command completed successfully.
然后根据知识中心的指导看一下为什么不能重命名:
SQL0750N
The statement failed because the table or column cannot be renamed.
解释
基于下列的一个或多个原因,在RENAME语句中的源表不能被重命名:
- 该表被一个或多个已存在的物化查询表所参考(The table is referenced in one or more existing materialized query tables.)
- 该表 作为一个父表或依赖表被参考约束所牵涉 (The table is involved in one or more referential constraints as a parent or dependent table.)
- 这个表是一个或多个XSR对象的分解目标表 (The table is a target table for decomposition of one or more XSR objects.)
- 这个表是系统运行期间的临时表 (The table is a system-period temporal table.)
- 这个表是一个历史表 (The table is a history table.)
- 数据库管理配置参数auto_reval被设置为DISABLED并且符合下列情形之一的:
- 表被一个或多个已存在的视图所参考(reference)
- 表被一个或多个已存在的触发器所参考(reference)。这包括表上的触发器,和在一个触发器的SQL语句中涉及到的表。
- 表被一个或多个已存在的SQL函数或SQL方法锁参考。
- 表上有检查约束定义,这包括由生成列引起的检查约束。
The column of the target table in an ALTER TABLE statement cannot be renamed because the target table is a history table.
在一个ALTER TABLE语句中目标表中的列不能被重命名,因为目标表是一个历史表。
User response
如果这个错误属于一个RENAME语句,在执行RENAME语句之前 删除 表上面的 视图,物化查询视图,触发器,SQL函数,SQL方法,检查约束,参考约束,及XSR对象依赖。依赖于该表的对象可以通过查询编目视图来获得。
- 对于依赖于表的视图和物化查询视图,查询 SYSCAT.VIEWDEP 编目视图中 BSCHEMA 和 BNAME列匹配该表的行。
- 对于依赖于表的触发器,查询 SYSCAT.TRIGDEP 编目视图中 BSCHEMA 和 BNAME列匹配该表的行。
- 对于依赖于表的SQL函数和SQL方法,查询 SYSCAT.ROUTINEDEP 编目视图中 BSCHEMA 和 BNAME列匹配该表的行。
- 对于表上的检查约束(check constraints), 查询SYSCAT.CHECKS 编目视图中 TABSCHEMA 和 TABBNAME 列匹配该表的行.
- 对于依赖于该表的参考约束(referential constraints),查询SYSCAT.REFERENCES 编目视图中TABSCHEMA 和 TABBNAME 列匹配该表的行 或 REFTABSCHEMA 和 REFTABNAME 列匹配该表的行。
- 对于依赖于 For XSR objects enabled for decomposition for which the table is a target,
查询SYSCAT.XSROBJECTDEP编目视图中BSCHEMA 和BNAME列匹配该表的记录。
[db2inst1@db22 ~]$ db2 "select
> substr(CONSTNAME,1,15) as CONSTNAME,
> substr(TABSCHEMA ,1,10) as TABSCHEMA ,
> substr(TABNAME,1,15) as TABNAME ,
> substr(REFKEYNAME,1,15) as REFKEYNAME ,
> substr(REFTABSCHEMA,1,10) as REFTABSCHEMA ,
> substr(REFTABNAME,1,15) as REFTABNAME ,
> substr(FK_COLNAMES,1,20) as FK_COLNAMES,
> substr(PK_COLNAMES,1,20) as PK_COLNAMES
> from syscat.references"
CONSTNAME TABSCHEMA TABNAME REFKEYNAME REFTABSCHEMA REFTABNAME FK_COLNAMES PK_COLNAMES
--------------- ---------- --------------- --------------- ------------ --------------- -------------------- --------------------
ROD DB2INST1 DEPARTMENT PK_DEPARTMENT DB2INST1 DEPARTMENT ADMRDEPT DEPTNO
RED DB2INST1 EMPLOYEE PK_DEPARTMENT DB2INST1 DEPARTMENT WORKDEPT DEPTNO
FK_EMP_PHOTO DB2INST1 EMP_PHOTO PK_EMPLOYEE DB2INST1 EMPLOYEE EMPNO EMPNO
FK_EMP_RESUME DB2INST1 EMP_RESUME PK_EMPLOYEE DB2INST1 EMPLOYEE EMPNO EMPNO
FK_PROJECT_1 DB2INST1 PROJECT PK_DEPARTMENT DB2INST1 DEPARTMENT DEPTNO DEPTNO
FK_PROJECT_2 DB2INST1 PROJECT PK_EMPLOYEE DB2INST1 EMPLOYEE RESPEMP EMPNO
RPP DB2INST1 PROJECT PK_PROJECT DB2INST1 PROJECT MAJPROJ PROJNO
RPAP DB2INST1 PROJACT PK_PROJECT DB2INST1 PROJECT PROJNO PROJNO
REPAPA DB2INST1 EMPPROJACT PK_PROJACT DB2INST1 PROJACT PROJNO PROJNO
RPAA DB2INST1 ACT PK_ACT DB2INST1 ACT ACTNO ACTNO
RDE DB2INST1 DEPARTMENT PK_EMPLOYEE DB2INST1 EMPLOYEE MGRNO EMPNO
FK_PO_CUST DB2INST1 PURCHASEORDER PK_CUSTOMER DB2INST1 CUSTOMER CUSTID CID
12 record(s) selected.
可以看到有个匹配到emp_photo 的行
当尝试重命名DB2中的表时,可能会遇到SQL0750N错误,表明表被物化查询视图、历史表、检查约束等依赖。解决方法包括在重命名前删除或解除表上的视图、物化查询视图、触发器、SQL函数、SQL方法、检查约束和参考约束。通过查询SYSCAT编目视图可以找到这些依赖项。
1027

被折叠的 条评论
为什么被折叠?



