2016-06-27 1 views
2

Позвольте мне объяснить, почему я хочу это сделать ... Я создал панель мониторинга Tableau, которая позволяет пользователю просматривать/искать все таблицы & столбцов в нашей хранилище по схеме, тип объекта (таблица, представление, материализованное представление) и т. д. Я хочу добавить столбец, который извлекает образец данных из каждого столбца в каждой таблице - это также делается, но с этой проблемой ...:(Oracle/SQL) Объединить все типы данных в один столбец

В результате столбец состоит из данных разных типов (varchar2, LONG и т. Д.). Я могу в принципе получить каждый тип данных в соответствии с одним типом данных, кроме LONG - он не позволит мне преобразовать его во что-либо еще, совместимое со всем остальным (если это имеет смысл ...). Мне просто нужны все типы данных для совместного использования в одном столбце. Я пробовал много разных вещей и читал эту тему примерно неделю, но похоже, что это просто невозможно сделать, но по моему опыту всегда есть способ ... Я решил, что буду проконсультируйтесь с гуру здесь, прежде чем признать поражение.

Одна из вещей, которые я пробовал:

--Here, from two different tables, I'm pulling a single piece of data from a single column and attempting to merge into a single column called SAMPLE_DATA 

--OTHER is LONG data type 
--ORGN_NME is VARCHAR2 data type 

select 'PLAN','OTHER', cast(substr(OTHER,1,2) as varchar2(4000)) as SAMPLE_DATA from sde.PLAN union all 
select 'BUS_ORGN','ORGN_NME', cast(substr(ORGN_NME,1,2) as varchar2(4000)) as SAMPLE_DATA from sde.BUS_ORGN; 

Результирующая ошибка:

Lookup Error 
ORA-00932: inconsistent datatypes: expected CHAR got LONG 

Как я могу добиться этого?

Спасибо заранее

+0

Вы посмотрели на это [ссылка] (https://asktom.oracle.com/pls/apex/f?p=100:11:0::NO::P11_QUESTION_ID:839298816582)? – cableload

+0

Можете ли вы использовать CLOB? Если это так, вы можете преобразовать все это в XML. – MT0

ответ

3

Длинные типы данных, в основном непригодными для использования в большинстве приложений. Я сделал что-то подобное, где хотел найти содержимое пакетов. Решение состоит в том, чтобы преобразовать LONG в CLOB с помощью конвейерной функции. Исходный код Адриана Биллингтона можно найти здесь: https://github.com/oracle-developer/dla

В результате вы получите запрос. Я не видел ни одной производительности даже при просмотре больших пакетов, поэтому он должен работать на вас.

+0

В моем случае у меня нет возможности/полномочий создавать представления или устанавливать скрипты. Я стремился к решению «на лету». Что-то, что я мог запустить в запросе. Может быть, я не понимаю решение? – Drivium

+2

@Drivium - Вероятно, не на лету. Если вы находитесь на 12.1, вы можете создать смехотворно сложный запрос с возможностью создания PL/SQL-объектов, имеющих область действия только инструкции SQL. Это поразило бы меня как смехотворно сложное, но я думаю, что это можно сделать. –

+0

@drivium Если вы собираетесь использовать этот пакет, я бы порекомендовал вам взглянуть на [мою вилку] (https://github.com/jonheller1/dla/commit/3ce1e5501c0c1a8a2fa61cfea308aa867c47ddaf). Он исправляет проблемы с некоторыми странными типами и именами столбцов. Если вы собираетесь запрашивать * все * столбцы, в конце концов вы попадете в один из этих странных случаев. То, что вы пытаетесь сделать, сложно, нереально строить такую ​​программу без каких-либо объектов базы данных. –

Смежные вопросы