Home > Database > Mysql Tutorial > inconsistent datatypes: expected

inconsistent datatypes: expected

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-07 16:00:32
Original
1495 people have browsed it

测试人员反映说有个SQL在其中一个测试环境能正常执行,但在另一个测试环境却无法执行,错误为:ORA-00932: inconsistent datatyp

测试人员反映说有个SQL在其中一个测试环境能正常执行,但在另一个测试环境却无法执行,错误为:

ORA-00932: inconsistent datatypes: expected - got CLOB

开始怀疑是不是表中有CLOB字段导致,但是查看了一下相关的表结构,没有CLOB、BLOB等类型的字段。接着分析SQL,有个地方引起了我的注意,在这个SQL中,使用的WMSYS.WM_CONCAT这个函数。分别在两个测试环境查看这个函数的定义,发现了区别:

执行正确的库的WM_CONCAT定义:

SQL> desc wmsys.wm_concat FUNCTION wmsys.wm_concat RETURNS VARCHAR2  Argument Name                  Type                    In/Out Default?  ------------------------------ ----------------------- ------ --------  P1                            VARCHAR2                IN

执行异常的库的WM_CONCAT定义:

SQL> desc wmsys.wm_concat FUNCTION wmsys.wm_concat RETURNS CLOB  Argument Name                  Type                    In/Out Default?  ------------------------------ ----------------------- ------ --------  P1                            VARCHAR2                IN

这两个函数的返回值是不一样的!执行错误的库返回CLOB,难怪会报inconsistent datatypes: expected - got CLOB的错误。但是为什么会这样呢?上metalink找找答案看。

用WM_CONCAT作为关键字搜索,真搜到了这么一篇文章[ID 1300595.1],对此问题作出了详细说明。Oracle的解释是WM_CONCAT是Workspace Manager中的一个内部函数,可能会随着数据库版本的不同函数也会不同。在10.2.0.4/11.1.0.7/11.2.0.1中WM_CONCAT返回的是VARCHAR2,而在10.2.0.5/11.2.0.2中返回值为CLOB。所以两个库的函数定义不同也就可以理解了。所以Oracle是不建议使用WM_CONCAT这类内部函数(internal undocumentd function)的,而且对由于使用这类函数所导致的损失,,Oracle也是不负责的,而且这类函数的更改也不会通知用户。所以要使用这类函数,一定要三思而后行!

本文永久更新链接地址

Related labels:
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template