Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle 12 có vấn đề với các kiểu thu thập cục bộ trong SQL không?

Trong các thử nghiệm sâu hơn, chúng tôi phát hiện ra rằng các vấn đề thậm chí còn sâu hơn những gì nó được giả định.

Ví dụ:các phần tử khác nhau được sử dụng trong gói buggy_report chúng ta có thể nhận được ORA-03113: end-of-file on communication channel khi chạy script (trong câu hỏi). Nó có thể được thực hiện với việc thay đổi loại t_id_table thành VARRAY hoặc TABLE .. INDEX BY .. . Có rất nhiều cách và các biến thể dẫn chúng ta đến các trường hợp ngoại lệ khác nhau, điều này không chủ đề với bài đăng này.

Một điều thú vị nữa là thời gian biên dịch của buggy_report đặc điểm kỹ thuật gói có thể mất đến 25 giây, trong khi thông thường mất khoảng 0,05 giây. Tôi chắc chắn có thể nói rằng nó phụ thuộc vào sự hiện diện của TYPE t_id_table trong pipe_table khai báo hàm và "biên dịch thời gian dài" xảy ra trong 40% trường hợp cài đặt. Vì vậy, có vẻ như vấn đề với local collection types in SQL xuất hiện tiềm ẩn trong quá trình biên dịch.

Vì vậy, chúng tôi thấy rằng Oracle 12.1.0.2 rõ ràng có một lỗi trong việc thực hiện sử dụng các kiểu thu thập cục bộ trong SQL.

Các ví dụ tối thiểu để lấy ORA-22163ORA-03113 là sau. Ở đó, chúng tôi giả định cùng một buggy_report gói như trong câu hỏi.

-- produces 'ORA-03113: end-of-file on communication channel'
DECLARE   
  l_cur buggy_report.t_info_cur;

  FUNCTION get_it RETURN buggy_report.t_info_cur IS BEGIN RETURN buggy_report.get_cursor(); END;    
BEGIN
   l_cur := get_it();

   dbms_output.put_line('');
END;
/

-- produces 'ORA-22163: left hand and right hand side collections are not of same type'
DECLARE  
  l_cur buggy_report.t_info_cur;

  PROCEDURE hello IS BEGIN NULL; END;
BEGIN
  l_cur := buggy_report.get_cursor;

  -- comment `hello` and exception disappears
  hello;

  CLOSE l_cur;
END;
/


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cách khôi phục cơ sở dữ liệu dự phòng từ nhật ký lưu trữ bị thiếu

  2. Làm thế nào để sử dụng jmeter để kiểm tra một Thủ tục lưu trữ Oracle với kiểu trả về sys_refcursor?

  3. ORA-01264:Không thể tạo tên tệp logfile

  4. Làm cách nào để lấy id đã tạo từ một hàng được chèn bằng ExecuteScalar?

  5. Tôi có thể lấy SQL cho lược đồ nhân sự mặc định của Oracle ở đâu?