Oracle に大きな多次元オブジェクトがあり、Java に対応するクラスがあります。オブジェクトをストアド プロシージャに渡したいのですが、それを行う方法をいくつか見つけましたが、それらにはすべて、オブジェクトを配列にフラット化するステップが含まれています。これは、巨人を渡すようなものです。パラメータの順序付きリスト。エラーが発生しにくい方法でそれを行うことができれば、それは素晴らしいことです。名前付きフィールドのマップの使用など。
これまでに見つけた方法は次のとおりです。
パラメータを含む Object[] を取るコンストラクタを使用して、oracle STRUCT を作成します。
STRUCT oracleRecord = new STRUCT(recDescriptor, conn, recordFields);
ORAData または SQLData インタフェースを使用し、コールバック メソッドでデータを平坦化します。
Map を受け取る 2 番目の STRUCT コンストラクターがありますが、ドキュメントが見つからず、機能していません。
「できません」という回答でも構いませんのでよろしくお願いします。:-)
Java オブジェクト (およびそれに対応する Oracle オブジェクト) は次のようになりますが、はるかに大きくなります。
User user = new User();
user.setActive(true);
user.setStatus(5);
ContactInfo contact = new ContactInfo();
contact.setFirstName("Bigs");
contact.setLastName("Guys");
contact.setEmailAddress(new EmailAddress("big.guy@gmail.com"));
user.setContactInfo(contact);
コメントへの回答で編集します。これは、ストアドプロシージャの署名がどのように見えるかの例です
procedure test_proc (obj_in IN user);