Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 康卡特突然抛出一个错误_Sql_Oracle - Fatal编程技术网

Sql 康卡特突然抛出一个错误

Sql 康卡特突然抛出一个错误,sql,oracle,Sql,Oracle,运行此查询后(在我们将Oracle版本更新为g11之前,该查询工作正常): 实际的查询是巨大而混乱的,我已经设法找出了导致此错误的原因(COMB,CATEGORY\u COUNT) PRODUCT\u CATEGORY\u code是类型VARCHAR2(3) 我得到一个错误: ORA-22922:不存在LOB值 导致此错误的原因是什么?升级后为什么会突然更改 谢谢。我通过使用listag()而不是WM\u CONCAT()解决了这个问题: 但是我仍然没有弄清楚原因-问题仍然存在。我已经通过使用

运行此查询后(在我们将Oracle版本更新为g11之前,该查询工作正常):

实际的查询是巨大而混乱的,我已经设法找出了导致此错误的原因(
COMB,CATEGORY\u COUNT

PRODUCT\u CATEGORY\u code
是类型
VARCHAR2(3)

我得到一个错误:

ORA-22922:不存在LOB值

导致此错误的原因是什么?升级后为什么会突然更改


谢谢。

我通过使用
listag()
而不是
WM\u CONCAT()
解决了这个问题:


但是我仍然没有弄清楚原因-问题仍然存在。

我已经通过使用
listag()
而不是
WM_CONCAT()
解决了这个问题:


但我仍然没有弄清楚原因——问题仍然存在。

下面是我试图回答为什么会发生这种情况的答案。这个答案有多个层次,随着它们的深入,它们变得更具推测性

为什么我的查询停止工作?

查询失败,因为
WM_CONCAT
是新数据库中不可用的未记录功能

为什么不再提供了?

WM_CONCAT
作为Oracle Workspace Manager(OWM)的一部分在内部使用。OWM是10g和11g中的可选组件。有些数据库可能是在没有安装它的情况下安装的,或者DBA可能在以后将其删除。对于快速版,该选项不存在。而且该函数在Oracle 12c中根本不存在

很久以前,有人在互联网上发现了这个功能,认为它很有用,告诉人们,这个想法就传播开来了。但甲骨文从未告诉人们使用它,也从未保证过它有一天不会消失。那一天已经到来

但是。。。为什么这么受欢迎的功能会出现这种情况

这是甲骨文公司的态度问题

Oracle不重视那些显然有用的功能,如果它们在理论上也是不必要的。他们等了二十年才创建了一个方便的官方功能,以完成世界上每个数据库开发人员一直在做的事情

您永远不需要使用
WM\u CONCAT
。您可以使用XMLAGG、Oracle数据盒式磁带、
MODEL
CAST(COLLECT…
)等的黑客攻击。这些都是糟糕的解决方案,但它们确实有效,所以为什么您这些懒惰的开发人员不在每次需要解决常见问题时都制定独特的解决方案呢

这种态度让我抓狂,我在字符串拆分和布尔类型等简单任务中也看到了同样的情况


对于有提示的产品,您可能认为Oracle开发人员会更好地理解添加有用功能的想法,即使这些功能在理论上可能并不需要。

下面是我尝试回答为什么会出现这种情况的原因。这个答案有多个层次,随着他们的深入,他们会变得更具推测性

为什么我的查询停止工作?

查询失败,因为
WM_CONCAT
是新数据库中不可用的未记录功能

为什么不再提供了?

WM_CONCAT
作为Oracle Workspace Manager(OWM)的一部分在内部使用。OWM是10g和11g中的可选组件。某些数据库可能在安装时未安装OWM,或者DBA以后可能已将其删除。Express Edition中不存在该选项。Oracle 12c中根本不存在该功能

很久以前,有人在互联网上发现了这个功能,认为它很有用,告诉人们,这个想法传播开来。但甲骨文从未告诉人们使用它,也从未保证它有一天不会消失。那一天已经到来

但是……为什么会在如此受欢迎的功能中出现这种情况?!

这是甲骨文公司的态度问题

Oracle并不重视那些在理论上不必要的、显然有用的功能。他们等了二十年才创建了一个方便的、正式的功能来完成世界上每个数据库开发人员一直在做的事情

您不需要使用
WM_CONCAT
。您可以使用XMLAGG、Oracle数据盒式磁带、
MODEL
CAST(COLLECT…
)等的黑客攻击。这些都是糟糕的解决方案,但它们确实有效,所以为什么您这些懒惰的开发人员不在每次需要解决常见问题时都制作独特的解决方案呢

这种态度让我抓狂,我在字符串拆分和布尔类型等简单任务中也看到了同样的情况


对于一个有提示的产品,您会认为Oracle开发人员会更好地理解添加有用的特征的想法,即使它们可能不是理论上需要的。不受支持。不受支持意味着什么?升级后为什么旧脚本停止工作?

WM_CONCAT()
仍然有效。这不应该发生。请注意,WM_CONCAT没有文档记录且不受Oracle支持,这意味着它不应该在生产系统中使用。LISTAGG函数可以生成与WM_CONCAT相同的输出,Oracle也有文档记录并支持它。但是,如果它具有与WM_CONCAT相同的功能,为什么会引发错误<代码> ListaGG?为什么<代码> WMLCONTATA/COD>在其他地方工作?@ SebzSince没有文档化,我不知道它的局限性。我正在打字的中间。WMLCUTATA()不被支持。不支持的意思是什么?为什么升级旧脚本停止工作?<代码> WMyCu连t()仍然有效。这不应该发生。请注意,WM_CONCAT没有文档记录且不受Oracle支持,这意味着它不应该在生产系统中使用。可以生成与WM_CONCAT相同输出的Listag函数被Oracle文档记录并支持。但为什么
SELECT to_char(wm_concat(PRODUCT_CATEGORY_CODE) )  AS COMB , 
       case when   instr( to_char(wm_concat(PRODUCT_CATEGORY_CODE) ), 'T_V') > 0  then 1 else 0  end +
       case when   instr( to_char(wm_concat(PRODUCT_CATEGORY_CODE) ), 'INT') > 0  then 1 else 0  end +
       case when   instr( to_char(wm_concat(PRODUCT_CATEGORY_CODE) ), 'TEL') > 0  then 1 else 0  end category_count 
       ....
FROM ....     
SELECT to_char(LISTAGG(PRODUCT_CATEGORY_CODE,',') WITHIN GROUP(ORDER BY PRODUCT_CATEGORY_CODE))  AS COMB,
       case when   instr( to_char(LISTAGG(PRODUCT_CATEGORY_CODE,',') WITHIN GROUP(ORDER BY PRODUCT_CATEGORY_CODE)), 'T_V') > 0  then 1 else 0  end +
       case when   instr( to_char(LISTAGG(PRODUCT_CATEGORY_CODE,',') WITHIN GROUP(ORDER BY PRODUCT_CATEGORY_CODE)), 'INT') > 0  then 1 else 0  end +
       case when   instr( to_char(LISTAGG(PRODUCT_CATEGORY_CODE,',') WITHIN GROUP(ORDER BY PRODUCT_CATEGORY_CODE)), 'TEL') > 0  then 1 else 0  end   category_count
FROM ...