复制后编辑oracle表

时间:2014-02-10 12:13:08

标签: sql oracle

我有一个带有2列的oracle表,它们都使用NUMBERS数据类型,当我输入任何以0开头的数字时它会删除0.所以解决方法是将数据类型更改为VARCHAR2。我有一个脚本

  • 使用VARCHAR2和主键
  • 创建临时表
  • 复制旧表
  • 放弃旧桌子
  • 将temp重命名为旧表

但是我遇到了一个问题。复制表时,之前截断的任何数据都保持这种状态,无论如何我可以在旧数据的开头添加0吗?下面是我创建的脚本。

/* create a new table named temp */
CREATE TABLE TEMP_TABLE
(
    IMEISV_PREFIX VARCHAR2(8),
    IMEI_FLAG NUMBER(2),
        CONSTRAINT IMEIV_PK PRIMARY KEY (IMEISV_PREFIX)
);

/* copy everything from the old table to the new temp table */
INSERT INTO TEMP_TABLE
SELECT * FROM REF_IMEISV_PREFIX;

/* Delete the original table */
DROP TABLE REF_IMEISV_PREFIX;

/* Rename the temp table to the original table */
RENAME TEMP_TABLE TO REF_IMEISV_PREFIX;

2 个答案:

答案 0 :(得分:2)

不,没有。当Oracle将数据保存到数据库时,它会以当时的格式保存数据。所有其他信息都已删除。无法恢复历史数据。

事实上,当你以前将数据存储到数据库时,假设你这样做:

insert into tableX (anumber) values ('01');

事实上确实如此:

insert into tableX (anumber) values (to_number('01'));

所以它从一开始就丢失了。 (请注意,该示例实际上是一个坏习惯!您不应该依赖于在数据库中进行强制转换,始终将数据移交给正确的数据类型!)

答案 1 :(得分:1)

如果您需要显示前导零,则问题是接口问题,而不是数据库问题。您可以格式化输出以显示您想要多少前导零。

如果数据是数字,请按原样使用。