Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Kesalahan (ORA-21700) dengan Operator Tabel setelah memperbarui ke Oracle 12.2 dari 12.1

Saya mengalami masalah yang sama atau serupa, setelah memutakhirkan dari Oracle 12c ke 19c. Saya tidak yakin mengapa peningkatan Oracle menyebabkan masalah, dan saya juga tidak begitu mengerti mengapa perbaikan saya berhasil!

Dalam prosedur tersimpan saya, di mana fungsi TABLE Oracle diterapkan ke beberapa input prosedur tersimpan, saya mendapatkan kesalahan:"ORA-21700:objek tidak ada atau ditandai untuk dihapus".

Namun, di mana fungsi TABLE Oracle diterapkan ke variabel lokal dalam prosedur tersimpan, tidak ada kesalahan. Jadi solusi saya hanyalah menetapkan input prosedur tersimpan ke variabel lokal, sebelum menggunakan fungsi TABLE, dan entah bagaimana ini menyelesaikan masalah!

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. Menemukan 'lari' baris dari kumpulan hasil yang dipesan

  2. Ada Dalam Detailnya

  3. Gabungkan banyak data menjadi satu data

  4. Kesalahan dalam menjalankan pemanggilan ODCIEXTTABLEOPEN

  5. sql - ORA-00937:bukan fungsi grup grup tunggal