2012-04-19 10 views
7

Tôi có một vài gói trên ví dụ oracle của tôi. Khi tôi tạo lại cơ sở dữ liệu của mình từ đầu, tôi nhận được các đối tượng không hợp lệ và không có cảnh báo từ liquibase.Oracle 10g tuyên bố rằng một gói phần mềm có lỗi khi nó không

Sau đó, khi tôi gọi một phương thức trọn gói, như vậy:

new SimpleJdbcCall(jdbcTemplate).withCatalogName(packageName).withProcedureName(storedProcedureName).execute(parameterMap); 

Nó mang lại cho tôi những lỗi sau:

org.springframework.jdbc.UncategorizedSQLException: CallableStatementCallback; uncategorized SQLException for SQL [{call CALENDAR_MANAGEMENT.CREATE_SUMMARIES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}]; SQL state [72000]; error code [4063]; ORA-04063: package body "ETPDEV.CALENDAR_MANAGEMENT" has errors 
ORA-06508: PL/SQL: could not find program unit being called: "ETPDEV.CALENDAR_MANAGEMENT" 
ORA-06512: at line 1; 

nested exception is java.sql.SQLException: ORA-04063: package body "ETPDEV.CALENDAR_MANAGEMENT" has errors 
ORA-06508: PL/SQL: could not find program unit being called: "ETPDEV.CALENDAR_MANAGEMENT" 
ORA-06512: at line 1 

Caused by: java.sql.SQLException: ORA-04063: package body "ETPDEV.CALENDAR_MANAGEMENT" has errors 
ORA-06508: PL/SQL: could not find program unit being called: "ETPDEV.CALENDAR_MANAGEMENT" 
ORA-06512: at line 1 

Kiểm tra cho các đối tượng không hợp lệ một lần nữa lần lượt lên gì cả. Việc biên dịch CALENDAR_MANAGEMENT một lần nữa hoàn thành bình thường mà không có lỗi.

Tôi đã thử biên dịch lại toàn bộ lược đồ, nhưng điều đó không hoạt động.

Khi tôi gọi nó từ SQLDeveloper, nó hoạt động bình thường.

+0

Bạn có đang chạy nó bằng cùng một tài khoản trong Java và SQLDeveloper không? –

+0

Có. Cả hai tài khoản đều giống nhau. Để đảm bảo rằng không có sự khác biệt, tôi đã đăng nhập dưới dạng hệ thống và chạy 'hiển thị lỗi gói ETPDEV.CALENDAR_MANAGEMENT'. Không có lỗi. –

+3

Bạn nói cả hai tài khoản đều giống nhau nhưng cả hai đều đăng nhập với chính xác cùng một người dùng không? Điều này trông giống như một vấn đề quyền cổ điển. – Ollie

Trả lời

2

Tôi đã gặp phải lỗi này trong kiểm tra tích hợp của mình và tôi không nghĩ rằng để kiểm tra tính hợp lệ của gói khi nó đang chạy.

Thả một chút mã đơn giản ngay trước khi cuộc gọi cho gói:

select name || ' - ' || line || ' - ' || text from user_errors order by name, sequence; 

tôi thấy rằng một thử nghiệm khác nhau đã không được dọn dẹp sau khi chính nó, nhưng điều này một lần, vì vậy khi tôi nhìn vào DB trước và sau, nó trông ổn.