小编mno*_*tka的帖子

当您修改(减少)列的长度时会发生什么?

假设我有两列类型NUMBER(没有精度和比例)和VARCHAR(300). 我看到这些列对于我的数据来说太大了,所以我想将它们修改为NUMBER(11)VARCHAR(10)。所以如果我运行这个 SQL 语句:

ALTER TABLE FOO
    MODIFY(BAR NUMBER(10));
Run Code Online (Sandbox Code Playgroud)
  • 我能在非空列上做到这一点吗?
  • 如果是这样,如果有一个值大于NUMBER(10),oracle 会告诉我吗?
  • 如果先前定义,列默认值是否会保持不变?
  • 列可为空选项会保持不变吗?
  • 该列上的主键、外键、唯一键是否保持不变?
  • 涉及该列的约束是否会保持不变?
  • 该列的索引会保持不变吗?

有没有官方文档回答我的问题?

oracle database-design migration alter-table

11
推荐指数
1
解决办法
6万
查看次数

保存点在 Oracle 中如何工作?

我正在对我的数据库进行非常严肃的操作,我想保证我的数据安全。

不幸的是出了点问题,看:

SAVEPOINT before_foo_update;

CREATE TABLE AUX_FOO as
   SELECT * FROM FOO;

TRUNCATE TABLE FOO;  

ALTER TABLE FOO
  MODIFY(BAR NUMBER(11) NOT NULL);

INSERT INTO FOO
  SELECT * FROM AUX_FOO;

DROP TABLE AUX_FOO;    

ROLLBACK TO SAVEPOINT before_foo_update;
Run Code Online (Sandbox Code Playgroud)

不幸的是,我收到一个错误:

ROLLBACK TO SAVEPOINT before_foo_update
Error report:
SQL Error: ORA-01086: savepoint 'BEFORE_FOO_UPDATE' never established
01086. 00000 -  "savepoint '%s' never established"
*Cause:    Trying to roll back to a save point that was never established
Run Code Online (Sandbox Code Playgroud)

现在 FOO 表是空的......并且 AUX_FOO 没有被删除。你知道我做错了什么吗?

oracle migration rollback

1
推荐指数
1
解决办法
6872
查看次数