5

我们在 Oracle 表定义 (DDL) 和我们的一个 PL/SQL 脚本中遇到了一个特殊问题。

问题是,表中发生了变化,从varchar(20)变为varchar(30),但是这种变化并没有认真地反映在我们的一个消费数据的 PL/SQL 脚本中,这仍然是,在我们的一个回归测试中varchar(20)导致错误。ORA-06502: PL/SQL: numeric or value error

我想在这里向Oracle和数据库专家寻求建议,您过去是否遇到过这种情况,即表DDL发生了变化,并且没有反映在PL/SQL中,以及您如何处理这个差距。

我知道一种简单的方法是某种形式的强制执行或文书工作,但是否会有更漂亮或优雅的解决方案,即外键的工作方式以避免插入/更新/删除异常?

感谢!

4

1 回答 1

6

对于初学者,您应该始终根据表中的列定义将变量声明为 TYPE:

即,而不是:

dept_name  VARCHAR2(50);

采用:

dept_name  dept.dept_name%TYPE;

这样,当您的基表更改时,您的声明仍然有效。

您还可以将过程参数声明为类型:

PROCEDURE proc(p1 IN dept.dept_name%TYPE)
于 2011-06-30T03:55:51.783 回答