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

Lỗi (ORA-21700) với Table Operator sau khi cập nhật lên Oracle 12.2 từ 12.1

Tôi đã gặp phải sự cố tương tự hoặc tương tự, sau khi nâng cấp từ Oracle 12c lên 19c. Tôi không rõ tại sao bản nâng cấp Oracle lại gây ra sự cố và tôi cũng không thực sự hiểu tại sao bản sửa lỗi của mình lại hoạt động!

Trong các thủ tục được lưu trữ của tôi, trong đó hàm TABLE của Oracle được áp dụng cho một số đầu vào thủ tục được lưu trữ, tôi gặp lỗi:"ORA-21700:đối tượng không tồn tại hoặc được đánh dấu để xóa".

Tuy nhiên, khi hàm TABLE của Oracle được áp dụng cho một biến cục bộ trong quy trình được lưu trữ, không có lỗi. Vì vậy, cách giải quyết của tôi chỉ đơn giản là gán đầu vào thủ tục được lưu trữ cho các biến cục bộ, trước khi sử dụng hàm TABLE và bằng cách nào đó, điều này đã giải quyết được vấn đề!

CREATE OR REPLACE PACKAGE my_types IS
  TYPE integers IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
  TYPE reals    IS TABLE OF FLOAT INDEX BY BINARY_INTEGER;
END my_types;
/

CREATE OR REPLACE PROCEDURE order_list
(
  i_order_numbers  IN  my_types.integers,
  o_order_numbers  OUT my_types.integers,
  o_order_values   OUT my_types.reals
)
IS

  r_order_numbers  my_types.integers;

  CURSOR order_list_cur (p_order_numbers my_types.integers)
      IS
  SELECT order_number, order_value
    FROM orders
   WHERE order_number IN (SELECT * FROM TABLE(p_order_numbers))
  ;
  order_list_rec  order_list_cur%ROWTYPE;

  rec_no BINARY_INTEGER;

BEGIN

  r_order_numbers := i_order_numbers;

  rec_no := 0;

  OPEN order_list_cur(r_order_numbers);
  LOOP
    FETCH order_list_cur INTO order_list_rec;
    EXIT WHEN order_list_cur%NOTFOUND;
      rec_no := rec_no + 1;
       o_order_numbers(rec_no) := order_list_rec.order_number;
       o_order_values(rec_no) := order_list_rec.order_value;
  END LOOP;
  CLOSE order_list_cur;

END order_list;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. khoảng thời gian chờ đã trôi qua. tất cả các kết nối gộp đã được sử dụng và đã đạt đến kích thước nhóm tối đa

  2. cách tạo một thủ tục được lưu trữ trong oracle chấp nhận mảng tham số

  3. JUnit / HSQLDB:Cách khắc phục lỗi với cú pháp Oracle khi kiểm tra bằng HSQLDB (không có đặc quyền và / hoặc không có đối tượng DUAL)

  4. Kết nối với cơ sở dữ liệu trong Pro C bằng Oracle Wallet

  5. Oracle SQL so sánh các bản ghi trong một bảng