首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL错误: ORA-00932:不一致的数据类型:预期- got CHAR

SQL错误: ORA-00932:不一致的数据类型:预期- got CHAR
EN

Stack Overflow用户
提问于 2016-10-18 21:51:40
回答 2查看 2.9K关注 0票数 0

当我在Oracle上运行这个简单的查询来删除SQL*PLUS中的一行时,我会得到以下错误:

代码语言:javascript
复制
Error report -
SQL Error: ORA-00932: inconsistent datatypes: expected - got CHAR
00932. 00000 -  "inconsistent datatypes: expected %s got %s"
*Cause:    
*Action:

完整代码:

代码语言:javascript
复制
delete from db where TITLE= '<values><value lang="EN">db shared</value></values>'; 

错误:

代码语言:javascript
复制
Error starting at line : 8 in command -
delete from widget_template where TITLE= '<values><value lang="EN">template shared for assets</value></values>'
Error at Command Line : 8 Column : 42
Error report -
SQL Error: ORA-00932: inconsistent datatypes: expected - got CHAR
00932. 00000 -  "inconsistent datatypes: expected %s got %s"
*Cause:    
*Action:

我试着做:

delete from db where to_char(TITLE)= '<value lang="EN">template shared for all assets</value>'

通过这个,我得到了以下错误:

代码语言:javascript
复制
ORA-00932: inconsistent datatypes: expected NUMBER got -
00932. 00000 -  "inconsistent datatypes: expected %s got %s"
*Cause:    
*Action:

PS:这个标题是这样的:

不知道如何修正this..any的想法??谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-19 08:17:44

可以使用XMLQuery将XML与所需的值进行比较,例如:

代码语言:javascript
复制
xmlquery('for $i in /values/value[@lang="EN"]
    where $i/text() = "template shared for all assets" return $i'
  passing title returning content)

快速演示:

代码语言:javascript
复制
create table db (id number, title xmltype);
insert into db (id, title) values (1,
  xmltype('<values><value lang="EN">db shared</value></values>'));
insert into db (id, title) values (2,
  xmltype('<values><value lang="EN">template shared for all assets</value></values>'));

select id,
  xmlquery('/values/value[@lang="EN"]/text()' passing title returning content) as title,
  xmlquery('for $i in /values/value[@lang="EN"]
      where $i/text() = "template shared for all assets" return $i/text()'
    passing title returning content) as matched
from db
order by id;

        ID TITLE                               MATCHED                            
---------- ----------------------------------- -----------------------------------
         1 db shared                                                              
         2 template shared for all assets      template shared for all assets     

delete from db
where xmlquery('for $i in /values/value[@lang="EN"]
    where $i/text() = "template shared for all assets" return $i'
  passing title returning content) is not null;

1 row deleted.

select id,
  xmlquery('/values/value[@lang="EN"]/text()' passing title returning content) as title,
  xmlquery('for $i in /values/value[@lang="EN"]
      where $i/text() = "template shared for all assets" return $i/text()'
    passing title returning content) as matched
from db
order by id;

        ID TITLE                               MATCHED                            
---------- ----------------------------------- -----------------------------------
         1 db shared                                                              
票数 1
EN

Stack Overflow用户

发布于 2016-10-18 22:03:25

该错误似乎是由于TITLE列是XMLTYPE这一事实造成的。如果是这样的话,这可以是一种方式:

代码语言:javascript
复制
delete from db
where  xmltype.getstringval(TITLE)= '<value lang="EN">template shared for all assets</value>'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40118714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档