Oracle
 sql >> база данни >  >> RDS >> Oracle

Грешка (ORA-21700) с табличен оператор след актуализиране до Oracle 12.2 от 12.1

Срещнах същия или подобен проблем след надграждане от Oracle 12c до 19c. Не съм сигурен защо надстройката на Oracle причини проблем и също така не разбирам наистина защо моята корекция работи!

В моите съхранени процедури, където функцията TABLE на Oracle се прилага към някакъв вход за съхранена процедура, получавам грешката:„ORA-21700:обектът не съществува или е маркиран за изтриване“.

Въпреки това, когато функцията TABLE на Oracle беше приложена към локална променлива в съхранената процедура, нямаше грешка. Така че моето заобиколно решение беше просто да присвоя входове на съхранена процедура на локални променливи, преди да използвам функцията TABLE, и по някакъв начин това разреши проблема!

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. ORA-00979:не е израз GROUP BY, когато изпълнявам своя sql

  2. (Oracle SQL) Прихващане на уникална грешка в ограничението

  3. Използване на оператор Merge за единична таблица

  4. Как да тествате (единично) PL/SQL приложение с интензивно използване на данни

  5. Дефинирайте VIEW в Oracle, без да използвате CREATE