Oracle: запрос к значению пользовательского типа - PullRequest
1 голос
/ 29 марта 2011

У меня есть определенный пользователем тип:

create or replace type my_message_type 
  as object (relatedid varchar2(50), payload clob);

Я вставил сообщение программно.Разработчик SQL отображает вставленный объект как:

SYNESSO.MY_MESSAGE_TYPE('abcdefgh','oracle.sql.CLOB@1dae16a')

Как можно запрашивать эти данные с помощью SQL?Например, следующее кажется интуитивно понятным:

select count(1) from table_of_my_messages where user_data.relatedid = 'abcdefgh';

Но это приводит к ORA-00904: "USER_DATA"."RELATEDID": invalid identifier.

Затем я обнаружил, что правильный синтаксис - это создание типа сообщения и использование проверки на равенство.Но как создать экземпляр типа с некоторыми полями, сопоставленными с any?:

select * from table_of_my_messages where user_data = my_message_type('abcdefgh', *);
-- ORA-00936: missing expression

select * from table_of_my_messages where user_data = my_message_type('abcdefgh');
-- ORA-02315: incorrect number of arguments for default constructor

select * from table_of_my_messages where user_data = my_message_type('abcdefgh', ?);
-- Missing IN or OUT parameter at index:: 1

1 Ответ

3 голосов
/ 29 марта 2011

Интуитивно понятная версия почти верна. Мне нужно было только псевдоним таблицы для его работы ...

select count(1) from table_of_my_messages m 
    where m.user_data.relatedid = 'abcdefgh';
...