不允许设置db2主键问题的解决_DB2_数据库_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 数据库 > DB2 > 不允许设置db2主键问题的解决

不允许设置db2主键问题的解决

 2013/8/9 17:21:25    程序员俱乐部  我要评论(0)
  • 摘要:设置db2主键问题出错的话,应该如何处理呢?下面就教您一个不允许设置db2主键问题的解决方法,希望对您学习设置db2主键方面有所帮助。将empno设置为主键db2=>altertableempaddprimarykey(empno)DB21034EThecommandwasprocessedasanSQLstatementbecauseitwasnotavalidCommandLineProcessorcommand.DuringSQLprocessingitreturned
  • 标签:解决 问题 主键

设置db2主键问题出错的话,应该如何处理呢?下面就教您一个不允许设置db2主键问题的解决方法,希望对您学习设置db2主键方面有所帮助。

将empno设置为主键

db2 => alter table emp add primary key (empno)

DB21034E The command was processed as an SQL statement because it was not a

valid Command Line Processor command. During SQL processing it returned:

SQL0542N "EMPNO" cannot be a column of a primary key or unique key because it

can contain null values. SQLSTATE=42831

fenced  出现问题的原因是,因为empno列在创建的时候,默认支持值为空。而在DB2中,针对这种情况,是不允许创建主键的。这点也与oracle和mysql不同。

fenced  因此,我们要添加主键,需要先修改empno,添加上约束,让此列为非空:

db2 => alter table emp alter column empno set not null

将列修改了之后,尝试添加主键,再次出错:

db2 => alter table emp add primary key (empno)

DB21034E The command was processed as an SQL statement because it was not a

valid Command Line Processor command. During SQL processing it returned:

SQL0668N Operation not allowed for reason code "7" on table "DB2INST1.EMP".

SQLSTATE=57016

解决办法:

查看错误信息代码SQL0668N,去查看具体的code“7”的含义。

db2 => ? SQL0668N

SQL0668N Operation not allowed for reason code "<reason-code>" on table

"<table-name>".

Explanation:

Access to table "<table-name>" is restricted. The cause is based on the

following reason codes "<reason-code>":

1fenced

fenced  The table is in the Set Integrity Pending No Access state.

。。。。。内容省略。。。。。。。。

7fencedThe table is in the reorg pending state. This can occur after

fenced  an ALTER TABLE statement containing a REORG-recommended

fenced  operation.

User response:

1fencedExecute the SET INTEGRITY statement with the IMMEDIATE CHECKED

fenced  option on table "<table-name>" to bring the table out of the

。。。。。内容省略。。。。。。。。


7fencedReorganize the table using the REORG TABLE command.

fenced  For a table in the reorg pending state, note that the following

fenced  clauses are not allowed when reorganizing the table:

fenced  

fenced  * The INPLACE REORG TABLE clause

fenced  * The ON DATA PARTITION clause for a partitioned table when

fenced     table has nonpartitioned indexes defined on the table

通过查看上述描述中的红色部分的文字,emp表的empno列是添加了not null约束而导致表出于了“reorg pending state”这种状态。我们可以通过以下的方法来验证:

db2 => load query table emp

Tablestate:

Reorg Pending

解决办法,参照6.1中的“User response”描述,使用REORG TABLE命令:

db2 => reorg table emp

DB20000I The REORG command completed successfully.

修改完成后,再次添加主键:

db2 => alter table emp add primary key(empno)

DB20000I The SQL command completed successfully.

查看下表的状态,若为normal则能够正常得进行操作:

db2 => load query table emp

Tablestate:

Normal

总结:对表添加主键时出现的错误,是由于之前对表的列进行了修改,添加了非空约束,导致整个表出于“Reorg Pending”状态。

针对表出现这种状况时,使用reorg table命令,将表进行reorganize即可。
 

发表评论
用户名: 匿名