需要讨论一种方法:
我们在oracle表中有一个 count 列。列的Dataype为char(3 Byte)
。在每次插入一行时,count列的值递增1(但它不是标识列)。
有可能价值超出 999 。那我们怎么办呢。 到目前为止,我能够证明的方法是:
在运行时增加列数据类型。步骤是:
char(4 BYTE)
人们可以提供更好的方法......
答案 0 :(得分:0)
在运行时增加列数据类型。
它证明设计存在缺陷。您永远不应该在运行时修改表。
根据您的要求,没有理由将 NUMBER 存储为 STRING 。这肯定是性能下降的主要原因。您应该选择正确的数据类型,在您的情况下应该 NUMBER 。
在每次插入行时,count列的值递增1
理想情况下,您应该使用序列。根据您的数据库版本,有两个选项:
另外, CHAR 数据类型存储固定长度的字符串。理想情况下,您应该使用 VARCHAR2 数据类型,它存储可变长度的字符串。
答案 1 :(得分:0)
你真的,真的不应该在char或varchar列中存储数字。如果可能的话,重构表格设计,让你解决这个问题。
如果你不能这样做,你确定该列不能从char(3)更改为更有用的东西吗? Char(4)只有1个字节的存储空间,如果char(3)一直在其他地方工作,varchar(4)通常可能没有额外的存储空间。
如果你真的不能做任何这些,你仍然坚持这个泡菜,你必须得到一个超过999的数字到char(3)列甚至之后踢,尖叫,这不是一个好主意......
以十六进制存储。请注意这个非常或者会让人感到困惑,但十六进制到十进制的转换并不是一个黑色艺术,它会在同一个字符空间中给你一个高达4095的范围。 / p>