Как минимизировать связь / зависимость между физическими изменениями DDL и изменениями PL / SQL? - PullRequest
5 голосов
/ 30 июня 2011

Мы столкнулись с определенной проблемой, связанной с нашим определением таблицы Oracle (DDL) и одним из наших сценариев PL / SQL.

Проблема в том, что в таблице произошли изменения, отличающиеся от varchar(20)к varchar(30) это изменение, однако, не было должным образом отражено в одном из наших сценариев PL / SQL, потребляющих данные, который по-прежнему составлял varchar(20), вызывая ошибку ORA-06502: PL/SQL: numeric or value error во время одного из наших регрессионных тестов.

Я хотел бы попросить совета у Oracle и экспертов по базам данных, сталкивались ли вы с такими сценариями в прошлом, когда произошли изменения в таблице DDL и не были отражены в PL / SQL, и как вы справляетесь с этим пробелом.

Я знаю, что одним простым способом было бы некое принудительное применение или оформление документов, но могло бы быть более красивое или изящное решение, то есть способ работы внешних ключей, чтобы избежать аномалии вставки / обновления / удаления?

С благодарностью!

1 Ответ

6 голосов
/ 30 июня 2011

Для начала, вы всегда должны объявлять ваши переменные как ТИПЫ на основе определений столбцов в ваших таблицах:

Т.е. вместо:

dept_name  VARCHAR2(50);

Использование:

dept_name  dept.dept_name%TYPE;

Таким образом, когда ваша базовая таблица изменяется, ваша декларация остается в силе.

Вы также можете объявить свои процедурные параметры как типы:

PROCEDURE proc(p1 IN dept.dept_name%TYPE)
...