sql >> Databáze >  >> RDS >> Oracle

Chyba (ORA-21700) s operátorem tabulky po aktualizaci na Oracle 12.2 z 12.1

Po upgradu z Oracle 12c na 19c jsem narazil na stejný nebo podobný problém. Nejsem si jistý, proč upgrade Oracle způsobil problém, a také vlastně nechápu, proč moje oprava funguje!

V mých uložených procedurách, kde je funkce TABLE společnosti Oracle aplikována na nějaký vstup uložené procedury, dostávám chybu:"ORA-21700:objekt neexistuje nebo je označen pro smazání".

Avšak tam, kde byla funkce TABLE společnosti Oracle aplikována na místní proměnnou v rámci uložené procedury, nedošlo k žádné chybě. Takže mým řešením bylo jednoduše přiřadit vstupy uložené procedury lokálním proměnným před použitím funkce TABLE, a tím se problém nějak vyřešil!

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. MySqli:je možné vytvořit databázi?

  2. Hostitel nepovoluje události na MySQL, což je nejlepší alternativa

  3. Laravel 5 UnexpectedValueException v odpovědi na dotaz kvůli použití dat POINT

  4. Knex.js vynutí opětovné použití relace pro 4 následující dotazy