如何最小化物理DDL更改和PL/SQL更改之间的耦合/依赖关系?

Oh *_*oon 5 oracle ddl plsql ora-06502

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

问题是,有一个在表中进行更改,更改varchar(20)varchar(30),这种变化却并不因此努力体现在我们的PL/SQL脚本消费数据,这仍然是一个varchar(20),引起了ORA-06502: PL/SQL: numeric or value error我们的回归测试过程中一个错误.

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

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

谢谢!

DCo*_*kie 6

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

即,而不是:

dept_name  VARCHAR2(50);
Run Code Online (Sandbox Code Playgroud)

使用:

dept_name  dept.dept_name%TYPE;
Run Code Online (Sandbox Code Playgroud)

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

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

PROCEDURE proc(p1 IN dept.dept_name%TYPE)
Run Code Online (Sandbox Code Playgroud)