Java から PL/SQL プロシージャへのコレクションを受け取り、レコードをテーブルに挿入するために使用しています。
CREATE OR REPLACE TYPE PROJECT_TYPE IS OBJECT
(
project_id NUMBER,
project_desc VARCHAR2 (10),
project_title VARCHAR2 (25)
);
PROCEDURE project_values (parray IN project_type)
IS
BEGIN
INSERT INTO projects (project_id, project_desc, project_title)
SELECT *
FROM TABLE (parray);
END;
上記の代わりに使用したい
TYPE array IS TABLE OF projects%ROWTYPE INDEX BY VARCHAR2 (25);
そして、私は次のように電話しようとしました
INSERT INTO projects (project_id, project_desc, project_title)
select * from table(p_array);
次のエラーが表示されます
PLS-00382: expression is of wrong type
PL/SQL: ORA-22905: cannot access rows from a non-nested table item
すべての列を明示的に宣言して、オブジェクト型の代わりに連想配列を使用するにはどうすればよいですか? 使用できれば、 projects%ROWTYPE
すべての列を宣言する必要はありません。
そして、最善のアプローチは何ですか?の連想配列を使用するTABLE%TYPE
か、すべての列を TYPE オブジェクトとして宣言しますか?
編集 1
次のことを知りたいのですが、これはデータベース レベルで実現できますか?
Java からプロシージャに配列を渡したい場合、Table of array を使用できますか? もしそうなら、パッケージレベルで宣言できますか、それともスキーマレベルで宣言する必要がありますか?
型をオブジェクトとして作成しながらすべての列を手動で記述する代わりに、テーブル型の配列を作成できれば、管理が容易になります。