存储大小大于列大小的值

时间:2016-01-05 10:07:47

标签: sql oracle

需要讨论一种方法: 我们在oracle表中有一个 count 列。列的Dataype为char(3 Byte)。在每次插入一行时,count列的值递增1(但它不是标识列)。

有可能价值超出 999 。那我们怎么办呢。 到目前为止,我能够证明的方法是:

在运行时增加列数据类型。步骤是:

  1. 首先,我们会检查价值的长度。
  2. 例如,如果长度为4,则更改表格的列并将列的大小更改为char(4 BYTE)
  3. 人们可以提供更好的方法......

2 个答案:

答案 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>