0

Oracleでユーザータイプを作成しました

create or replace type my_array_list 
is
table of 
varchar2(100);

今、私はこのような出力パラメータを持つプロシージャを書きました:

   type my_list_rec IS record
   (
      best_friends my_array_list,
      good_friends my_array_list
   );


   type my_list_array is table of my_list_rec;

  procedure friends_diff_prc(my_name in varchar2,
                                     my_friend_list_o   out my_list_array ,
                                     rc_o                  out number); 

今、私は拡張している私のJAVAクラスを通してこのprocを呼んでいStoredProcedureます。

// Declare output parameter
 declareParameter(new SqlOutParameter(
                PropertiesReader
                        .getPropertyValue(FRIENDSConstants.GET_FRIEND_LIST_OUT),
                OracleTypes.ARRAY,"MYDB.MY_ARRAY_LIST"));

しかし、私がprocを呼び出しているとき、私は

org.springframework.jdbc.BadSqlGrammarException:

OUTパラメータを正しく宣言していますか?そして、どのようにしてその出力パラメーターの内容を解析できますか?

前もって感謝します。

4

1 に答える 1

1

あなたの例は非常に紛らわしいです。非常に似た名前で非常に異なる2つのタイプに意図的に名前を付けました。

  • my_array_listタイプですSQL:VARCHAR2のネストされたテーブル
  • my_list_arrayタイプですPL/SQL:の記録のテーブルmy_array_list

PL/SQLとSQLのタイプは物理的に大きく異なります。たとえば、PL/SQLタイプにはを介して直接アクセスすることはできませんjdbc

さらに、2つのタイプは論理的に非常に異なります。最初のタイプを2番目のタイプにマップする方法を想像することはできません。2番目のタイプは、最初のタイプのオブジェクトのコレクションであり、2つのタイプを交換することはできません。

私は次のことを提案します:

  1. 紛らわしいほど似た名前で非常に異なるタイプに名前を付けないでください。
  2. PL / SQLプロシージャの周りにSQLオブジェクトを使用してラッパー・プロシージャを作成し、jdbcから呼び出すことができるようにします。
  3. SQLテーブルをOUTパラメータとして使用してプロシージャを呼び出す例については、このSOを参照してください。JDBCを使用してストアドプロシージャからOracleテーブルタイプを取得します
于 2012-09-20T09:56:40.797 に答える