sql >> Databasteknik >  >> RDS >> Oracle

Fel (ORA-21700) med bordsoperatör efter uppdatering till Oracle 12.2 från 12.1

Jag stötte på samma eller liknande problem efter att ha uppgraderat från Oracle 12c till 19c. Jag är inte säker på varför Oracle-uppgraderingen orsakade ett problem, och jag förstår inte heller riktigt varför min fix fungerar!

I mina lagrade procedurer, där Oracles TABLE-funktion tillämpas på någon lagrad proceduringång, får jag felet:"ORA-21700:objektet finns inte eller är markerat för borttagning".

Däremot, där Oracles TABLE-funktion applicerades på en lokal variabel i den lagrade proceduren, var det inget fel. Så min lösning var helt enkelt att tilldela lagrade proceduringångar till lokala variabler, innan jag använde TABLE-funktionen, och på något sätt löste detta problemet!

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. Fråga efter en JSON-array med objekt i Postgres

  2. Mac OS X + Python + Django + MySQL

  3. Projektlänkar fungerar inte på Wamp Server

  4. Hur formaterar och sorterar man ett datum i Oracle?