Oracle Object: Как показать все поля в запросе выбора? - PullRequest
0 голосов
/ 08 января 2019

У меня есть следующий объект Oracle:

CREATE TYPE person_typ AS OBJECT (
  Id NUMBER,
  first_name     VARCHAR2(20),
  last_name      VARCHAR2(25));

и стол:

CREATE TABLE MyTable (
  contact         person_typ,
  contact_date    DATE );

Я хотел бы сделать запрос на выборку, чтобы показать все поля объекта Person_Typ без указания их имен.

Когда я делаю

select * from MyTable

Контакт столбца отображается как [неподдерживаемый тип данных] , вместо этого я должен использовать:

select T.contact.ID, T.contact.First_name, T.contact.last_name  from MyTable T

Есть ли другой способ показать значения объекта без указания имен столбцов?

Спасибо, Cheers,

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Я не использую SQL Developer, но согласно этой статье Отображение значений столбца TYPE в SQL Developer вы можете использовать параметр:

Предпочтения / База данных / Дополнительно / Отображение значения структуры в сетке

Также вы можете запросить user_type_attr (или all_type_attr), чтобы получить имена столбцов. Затем скопируйте / вставьте select деталь из вывода и запустите ее или создайте представление, как предложено @sep. Вот мои тестовые данные и блок кода:

insert into mytable values (person_typ(1, 'Paulina', 'Thomson'), date '2017-12-17');
insert into mytable values (person_typ(7, 'Keanu', 'Stevens'), date '2017-12-28');

declare 
  v_sql varchar2(32000);
begin
  select listagg('T.CONTACT.'||attr_name||' '||attr_name, ', ') 
         within group (order by attr_no) 
    into v_sql
    from user_type_attrs 
    where type_name = 'PERSON_TYP';

  v_sql := 'SELECT '||v_sql||' FROM MYTABLE T';
  dbms_output.put_line(v_sql);
  execute immediate 'CREATE OR REPLACE VIEW VW_CONTACTS AS '||v_sql;
end;

select * from vw_contacts;

Результат:

    ID FIRST_NAME           LAST_NAME
------ -------------------- -------------------------
     1 Paulina              Thomson
     7 Keanu                Stevens
0 голосов
/ 08 января 2019

У меня была такая же проблема, и я создал представление со всеми полями. В вашем случае:

CREATE VIEW v_myTable AS 
   select T.contact.ID, T.contact.First_name, T.contact.last_name  
   from MyTable T

и использовать представление вместо таблицы

SELECT * from v_myTable 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...