让我解释一下为什么我要这样做...我已经构建了一个Tableau仪表板,允许用户浏览/搜索所有表格&我们仓库中的列由模式,对象类型(表,视图,物化视图)等组成。我想添加一个列,从每个表中的每列中提取数据样本 - 这也是完成的,但是有这个问题。 ..:
结果列由不同类型的数据(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 :(得分:3)
多数应用程序基本上无法使用长数据类型。我做了类似的事情,我想搜索包的内容。解决方案是使用流水线函数将LONG转换为CLOB。 Adrian Billington的源代码可以在这里找到: https://github.com/oracle-developer/dla
您最终会得到一个可以查询的视图。即使在查看大包装时我也没有看到任何性能损失,所以它应该适合你。