2016-06-27 3 views
2

なぜ私はこれをやりたいのか説明しましょう...私はユーザーがテーブルのすべてをブラウズ/検索できるようにTableauダッシュボードを構築しました& (表、ビュー、マテリアライズド・ビューなど)を使用しています。各表の各列のデータのサンプルを取得する列を追加したいと考えています。これもやっていますが、この問題があります。(Oracle/SQL)すべてのデータ型を1つの列にマージする

結果の列は、さまざまな種類のデータ(varchar2、LONGなど)で構成されます。私は基本的にすべてのタイプのデータをLONG以外の単一のデータタイプに適合させることができます。他のすべてのものと互換性のあるものに変換することはできません。単一の列にすべてのデータ型を共存させるだけで済みます。私はいろいろなことを試してきましたが、今は約1週間は読んでいますが、それはできないように聞こえますが、私の経験ではいつも道があります。敗北を認めてしまう前に、師匠とここに確認してください。私が試したものの

ワン:

--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データ型は、ほとんどのアプリケーションで基本的に使用できません。私はパッケージの内容を検索したいところと似たようなものを作りました。解決方法は、パイプライン関数を使用してLONGをCLOBに変換することです。 Adrian Billingtonのソースコードはここにあります: https://github.com/oracle-developer/dla

あなたが照会できるビューで終わります。大きなパッケージを見てもパフォーマンスが低下することはありませんでしたので、うまくいくはずです。

+0

私の場合は、ビューを作成したりスクリプトをインストールする能力/権限がありません。私はオンザフライのソリューションを目指していました。クエリで実行できるもの。たぶん私は解決策を理解していないでしょうか? – Drivium

+2

@Drivium - おそらくオンザフライではありません。 12.1を使用している場合は、SQL文だけのスコープを持つPL/SQLオブジェクトを作成することができるばかばかしい複雑なクエリを作成できます。それは私にはうんざりに過度に複雑すぎると私を打つだろうが、私はそれができると思う。 –

+0

@driviumもしあなたがそのパッケージを使うつもりなら、[my fork](https://github.com/jonheller1/dla/commit/3ce1e5501c0c1a8a2fa61cfea308aa867c47ddaf)を見てみることをお勧めします。それはいくつかの奇妙な型と列名の問題を修正します。 *すべての列を照会する場合は、最終的にそれらの奇妙なケースの1つをヒットします。あなたがしようとしていることは複雑です。データベースオブジェクトなしでこのようなプログラムを構築するのは現実的ではありません。 –

関連する問題