sql >> データベース >  >> RDS >> Oracle

12.1からOracle12.2に更新した後のテーブル演算子のエラー(ORA-21700)

    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;
    


    1. SQLデータベーステーブルに日時を挿入する方法は?

    2. djangoをインストールせずにdjangoプロジェクトを実行する

    3. Ruby on Rails database.ymlでのソケット宣言は何ですか?

    4. 外部キー制約が失敗する