在Oracle中更新列类型

时间:2014-10-31 14:43:17

标签: sql oracle plsql

我想将Oracle表中的列类型从varchar2(50)更新为varchar2(200)。

我已经开始做一些影响分析,这个变化可能会在搜索使用这个字段的软件包时看到,但是看了一下之后,似乎没有在任何地方指定字段长度。唯一指定的是列类型,在这种情况下是 varchar2

我的问题是:

如果您想要更改的唯一内容是一个特定列的varchar2类型的字段长度,这是否会影响可能引用此字段的任何底层包?

由于

3 个答案:

答案 0 :(得分:1)

  

如果您想要更改的唯一内容是一个特定列的varchar2类型的字段长度,这是否会影响可能引用此字段的任何底层包

这正是%Type type尝试解决的情况,即如果更改引用列上的基础类型,引用该列的相关工件(如包)将保持同步。

不幸的是,如果您已将包中的参数和变量定义为varchar2(50),则需要手动将这些参数和变量更新为新宽度,在这种情况下,您可以将其更改为MYTABLE.MYCOLUMN%TYPE以保护反对未来的变化。

答案 1 :(得分:1)

究竟是什么意思是“唯一指定的是列类型”?

如果您的代码始终使用锚定类型,即

l_variable_name table_name.column_name%type;

然后,每当您更改基础代码中的数据类型时,更改将自动通过您的代码传播。这是使用锚定类型的主要好处之一 - 它可以防止代码中的类型声明与表中列的声明不同步。

答案 2 :(得分:1)

  1. 您只需要确保在column声明中引用TYPE的任何地方,您都提到column%type而不是硬编码为VARCHAR(50)

  2. 查看是否有type显式创建为database object引用此列,如果它是大小硬编码,那么它也会失败。

  3. 首先进行此影响分析,尤其是当您的application/system过时或遗留下来时。当时的开发人员可能没有考虑过未来,并且可能已经如上所述硬编码了大小。我已经看到它发生在我工作的一个应用程序中,幸运的是在system integration testing期间发现了它。因此,请彻底执行impact analysis并尽可能好地完成integration testing