sql >> Database teknologi >  >> RDS >> Oracle

Fejl (ORA-21700) med tabeloperatør efter opdatering til Oracle 12.2 fra 12.1

Jeg stødte på det samme eller et lignende problem efter opgradering fra Oracle 12c til 19c. Jeg er ikke sikker på, hvorfor Oracle-opgraderingen forårsagede et problem, og jeg forstår heller ikke rigtig, hvorfor min rettelse virker!

I mine lagrede procedurer, hvor Oracles TABLE-funktion anvendes på nogle lagrede procedure-input, får jeg fejlen:"ORA-21700:objekt eksisterer ikke eller er markeret til sletning".

Men hvor Oracles TABLE-funktion blev anvendt på en lokal variabel i den lagrede procedure, var der ingen fejl. Så min løsning var simpelthen at tildele lagrede procedure-input til lokale variabler, før du brugte TABEL-funktionen, og på en eller anden måde løste dette 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. Dynamic Sampling Killing Me i 12c

  2. MySQL-fejl - Du har en fejl i din SQL-syntaks

  3. Sletning af duplikerede rækker i en MySQL-database

  4. MySQL Vælg række med laveste værdi i kolonne