Oracle 12cから19cにアップグレードした後、同じまたは同様の問題が発生しました。 Oracleのアップグレードによって問題が発生した理由がわかりません。また、修正が機能する理由もよくわかりません。
OracleのTABLE関数が一部のストアドプロシージャ入力に適用されているストアドプロシージャで、「ORA-21700:オブジェクトが存在しないか、削除対象としてマークされています」というエラーが表示されます。
ただし、OracleのTABLE関数がストアドプロシージャ内のローカル変数に適用された場合、エラーは発生しませんでした。したがって、私の回避策は、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;