Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Błąd (ORA-21700) z operatorem tabeli po aktualizacji do Oracle 12.2 z 12.1

Ten sam lub podobny problem napotkałem po aktualizacji z Oracle 12c do 19c. Nie jestem pewien, dlaczego aktualizacja Oracle spowodowała problem, a także nie bardzo rozumiem, dlaczego moja poprawka działa!

W moich procedurach składowanych, w których funkcja Oracle TABLE jest stosowana do niektórych danych wejściowych procedury składowanej, otrzymuję błąd:„ORA-21700:obiekt nie istnieje lub jest oznaczony do usunięcia”.

Jednak gdy funkcja Oracle TABLE została zastosowana do zmiennej lokalnej w ramach procedury składowanej, nie wystąpił błąd. Więc moim obejściem było po prostu przypisanie danych wejściowych procedury składowanej do zmiennych lokalnych przed użyciem funkcji TABLE, i jakoś rozwiązało to problem!

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. flyway clean nie usuwa zadań ani programów harmonogramu

  2. ASCISTR() Funkcja w Oracle

  3. Różnica między TRUNCATE a DELETE?

  4. Wstawianie wielu wierszy z sekwencją w Oracle

  5. Jak poprawić wydajność zapytań wstawiania SQL?