Я работаю над небольшим учебным проектом, который поручил мне создать UDT Oracle, содержащий ассоциативный массив.
Массив определяется следующим образом:
create or replace TYPE TRNG_AUTHORS_TAB AS
TABLE OF VARCHAR2(50) ;
Затем UDT использует это следующим образом:
create or replace TYPE TRNG_BOOK_OBJ AUTHID DEFINER
AS OBJECT
(
<SNIP normal variable mappings>
AUTHORS TRNG_AUTHORS_TAB
) NOT FINAL;
Теперь я сопоставляю это с классом С#. TRNG_BOOK_OBJ отображается как UDT с соответствующей фабрикой.
Однако я не могу понять, как отобразить ассоциативный массив как часть класса. Я пытался использовать список или строку [], но это не сработало.
Моя следующая мысль — создать класс C# UDT для TRNG_AUTHORS_TAB, который я затем могу сопоставить с классом, украшенным атрибутом OracleArracyMapping, но я не могу понять, как создать UDT ассоциативного массива, учитывая, что строковый столбец, содержащийся внутри у него нет имени для сопоставления.
Может ли кто-нибудь помочь мне решить эту проблему, либо предоставив примеры того, как сопоставить ассоциативный массив с массивом списка или С#, либо как сопоставить тип ассоциативного массива с классом UDT С#?
TABLE OF <type>
— это коллекция.TABLE OF <type> INDEX BY <type>
— это ассоциативный массив, который поддерживается только в рамках PL/SQL. Если что-то не изменилось совсем недавно в С#, вы не можете передать массив в коллекцию, поскольку он не поддерживается; вам нужно фактически использовать ассоциативный массив PL/SQL. - person MT0   schedule 17.06.2019AUTHID DEFINER
используется по умолчанию, поэтому вы можете его пропустить. - person Wernfried Domscheit   schedule 17.06.2019