【问题标题】:(Oracle/SQL) Merge all data types into a single column(Oracle/SQL) 将所有数据类型合并到一个列中
【发布时间】:2016-10-29 20:00:39
【问题描述】:

让我解释一下我为什么要这样做...我已经构建了一个 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

我怎样才能做到这一点?

提前致谢

【问题讨论】:

  • 你看过这个link吗?
  • 你能处理 CLOB 吗?如果是这样,您可以将其全部转换为 XML。

标签: sql oracle types merge


【解决方案1】:

大多数应用程序基本上无法使用长数据类型。我在想搜索包内容的地方做了类似的事情。解决方案是使用流水线函数将 LONG 转换为 CLOB。 Adrian Billington 的源代码可以在这里找到: https://github.com/oracle-developer/dla

您最终会得到一个可以查询的视图。即使在查看大包时,我也没有看到任何性能下降,所以它应该适合你。

【讨论】:

  • 就我而言,我没有创建视图或安装脚本的能力/权限。我的目标是即时解决方案。我可以在查询中运行的东西。也许我不理解解决方案?
  • @Drivium - 可能不是即时的。如果您使用的是 12.1,您可能能够构建一个极其复杂的查询,并能够创建仅具有 SQL 语句范围的 PL/SQL 对象。这会让我觉得过于复杂可笑,但我认为这是可以做到的。
  • @drivium 如果您打算使用该软件包,我建议您查看my fork。它修复了一些奇怪的类型和列名的问题。如果您要查询 all 列,最终您会遇到其中一种奇怪的情况。您要做的事情很复杂,在没有任何数据库对象的情况下构建这样的程序是不现实的。
猜你喜欢
  • 1970-01-01
  • 2015-07-30
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多