2011-06-30 16 views
5

Chúng tôi gặp phải một vấn đề cụ thể với định nghĩa bảng Oracle (DDL) của chúng tôi và trong một trong các tập lệnh PL/SQL của chúng tôi.Làm thế nào để giảm thiểu sự ghép nối/phụ thuộc giữa thay đổi DDL vật lý và thay đổi PL/SQL?

Vấn đề là, đã có một sự thay đổi trong bảng, thay đổi varchar(20)-varchar(30), sự thay đổi này tuy nhiên, không siêng năng phản ánh trong một trong những kịch bản PL/SQL của chúng tôi tiêu thụ dữ liệu, mà vẫn là varchar(20), gây ra một lỗi ORA-06502: PL/SQL: numeric or value error trong một trong các bài kiểm tra hồi quy của chúng tôi.

Tôi muốn tìm kiếm lời khuyên từ Oracle và các chuyên gia cơ sở dữ liệu ở đây, cho dù bạn đã gặp phải các tình huống như vậy trong quá khứ, theo đó có những thay đổi đối với bảng DDL và không được phản ánh trong PL/SQL. lỗ hổng.

Tôi biết một cách dễ dàng là một số hình thức thực thi hoặc thủ tục giấy tờ, nhưng sẽ xảy ra giải pháp đẹp hay thanh lịch hơn, tức là cách các phím nước ngoài hoạt động để tránh chèn/cập nhật/xóa bất thường?

Với lời cảm ơn!

Trả lời

6

Để bắt đầu, bạn nên luôn luôn khai báo các biến của bạn như các loại dựa trên các định nghĩa cột trong bảng của bạn:

Ie, thay vì:

dept_name VARCHAR2(50); 

Sử dụng:

dept_name dept.dept_name%TYPE; 

Đó , khi bảng cơ sở của bạn thay đổi, khai báo của bạn vẫn hợp lệ.

Bạn cũng có thể tuyên bố các thông số về thủ tục của bạn như các loại cũng như:

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

+1 Cookie, đây là thiên tài, ít nhất là đối với tôi. –

+1

+1 Nói chung điều này hoạt động tốt. Bạn vẫn phải cảnh giác nếu có kỳ vọng về giới hạn kích thước. Một ví dụ sẽ là một địa chỉ được in trên một phong bì nơi cột cơ sở dữ liệu mở rộng không vừa. –

+0

@Chin Boon, nó chắc chắn là thứ mà đội ngũ thiết kế PL/SQL đã đúng! – DCookie

Các vấn đề liên quan