Tôi gặp sự cố, khi tôi cố gắng biên dịch dự án của mình trong Cơ sở dữ liệu Oracle. Để làm cho nó đơn giản hơn, tôi có ba đối tượng: 2 gói (UTILS và TYPES) và 1 view (VIEW).Vòng lặp phụ thuộc đối tượng Oracle
Gói UTILS đang sử dụng các loại được xác định trong TYPES gói. TYPES gói đang sử dụng VIEW làm cơ sở cho một trong các loại đó. Và VIEW đang sử dụng các hàm từ gói UTILS trong tập lệnh của nó. Khi tôi cố gắng thực hiện một số thay đổi đối với một trong các đối tượng này, tôi không thể biên dịch được vì mọi thứ đều ở trạng thái không hợp lệ. Vì vậy, một số loại phụ thuộc đối tượng vòng lặp được tạo ra.
Vui lòng giúp tôi giải quyết vấn đề này.
Ví dụ: có cách nào để biên dịch mã bên dưới không? Mỗi đối tượng là một cú pháp chính xác, nhưng làm thế nào tất cả chúng có thể được biên dịch cùng nhau?
create or replace package my_types is
type type1 is table of number;
type type2 is table of my_view%rowtype;
end;
/
create or replace package my_utils is
function get_1 return number;
procedure do_something(parameter my_types.type2);
end;
/
create or replace package body my_utils is
function get_1 return number is
begin
return 1;
end;
procedure do_something(parameter my_types.type2) is
begin
null;
end;
end;
/
create or replace force view my_view as
select * from dual
where 1 = my_utils.get_1();
exec dbms_utility.compile_schema(user, false);
select object_name from user_objects where status <> 'VALID';
Phá vỡ chu kỳ? Thực hiện các chức năng một hiệu ứng thời gian chạy (thay vì được đưa vào truy vấn) - ví dụ: THỰC HÀNH chức năng từ một chuỗi. –
SO phá vỡ vòng lặp là cách duy nhất ra khỏi vấn đề này? Tôi nghĩ rằng có thể có một số gợi ý khi biên dịch gói/xem để bỏ qua trạng thái không hợp lệ của các phụ thuộc của nó. – artbro
Không có ý tưởng - bạn sẽ muốn một số oracle biết-it-all :-) Tôi quen thuộc hơn với Postgres và đó là cách tôi sẽ làm điều đó ở đó. (nó không bị vấn đề * chính xác * đó, nhưng bạn vẫn có thể tạo các vòng phụ thuộc). –