[sql]在case语句中不同情况下then的数据的数据类型不一致ORA-00932: inconsistent datatypes: expected NUMBER got CHAR

ORA-00932: inconsistent datatypes: expected NUMBER got CHAR

00932. 00000 -  "inconsistent datatypes: expected %s got %s"

1 CASE XXXXX.FILE_TYPE
2         WHEN ‘0‘ THEN  NVL(TX_CNT,0)
3         ELSE XXXXX.TOT_TX_CNT
4 END  ACT_TX_CNT,
TX_CNT为NUMBER型,是GROUP BY 后的计数量
TOT_TX_CNT是VARCHAR2(XX)类型

故出现上述错误提示。

解决方案:进行数据转换,将NUMBER型数据转换成VACHAR2(XX)类型
1 CASE XXXXX.FILE_TYPE
2     WHEN ‘0‘ THEN CAST( NVL(ACT_TX_CNT,0) AS VARCHAR2(8))
3     ELSE EPSTFBOK.TOT_TX_CNT
4 END ACT_TX_CNT,

完整代码小记:

统计文件对应的交易笔数,交易金额,有效的交易笔数,有效的交易金额 1    SELECT    EPSTFBOK.FILE_DT,
 2              EPSTFBOK.FILE_TYPE,
 3              EPSTFBOK.FILE_SRC,
 4              EPSTFBOK.FIL_STS,
 5              EPSTFBOK.RCV_FIL,
 6              EPSTFBOK.TOT_TX_CNT,
 7              EPSTFBOK.TOT_TX_AMT,
 8              EPSTFBOK.RMK,
 9              EPSTFBOK.BAT_NO,
10              nvl(  CHUI_CNT,0) CHUI_CNT,
11              CASE EPSTFBOK.FILE_TYPE WHEN ‘0‘ THEN CAST( NVL(ACT_TX_CNT,0) AS VARCHAR2(8))  ELSE EPSTFBOK.TOT_TX_CNT END  ACT_TX_CNT,
12              CASE EPSTFBOK.FILE_TYPE WHEN ‘0‘ THEN  CAST(NVL(ACT_TX_AMT,0) AS VARCHAR(15))  ELSE  EPSTFBOK.TOT_TX_AMT END  ACT_TX_AMT
13              FROM EPSTFBOK
14              LEFT JOIN
15              (SELECT BAT_NO,COUNT(*) CHUI_CNT FROM EPSTORDR WHERE ALT_FLG=‘1‘ GROUP BY BAT_NO)
16              M ON epstfbok.bat_no = m.bat_no
17              LEFT JOIN
18              (SELECT BAT_NO,COUNT(*) ACT_TX_CNT, SUM(TX_AMT) ACT_TX_AMT FROM EPSTORDR GROUP BY BAT_NO )
19              N ON epstfbok.bat_no = N.bat_no
20              ORDER BY EPSTFBOK.BAT_NO   desc;
 
 
时间: 2024-12-28 12:28:53

[sql]在case语句中不同情况下then的数据的数据类型不一致ORA-00932: inconsistent datatypes: expected NUMBER got CHAR的相关文章

在 case 语句中使用字符串

在 case 语句中使用字符串 非常遗憾 Delphi 的 case 语句不支持字符串, 但我觉得这也可能是基于效率的考量;如果非要在 case 中使用字符串, 也不是不可以变通, 这里提供了五种方法. 本例效果图: 代码文件: unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls, ExtCtrls;

SQL SERVER SELECT语句中加锁选项的详细说明 [转]

SQL Server提供了强大而完备的锁机制来帮助实现数据库系统的并发性和高性能.用户既能使用SQL Server的缺省设置也可以在select 语句中使用“加锁选项”来实现预期的效果. 本文介绍了SELECT语句中的各项“加锁选项”以及相应的功能说明. 功能说明: NOLOCK(不加锁) 此选项被选中时,SQL Server 在读取或修改数据时不加任何锁. 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Roll Back)中的数据, 即所谓的“

C语言中switch...case语句中break的重要性

在C语言中switch...case语句是经常用到的,下面我介绍一下在使用该语句时候需要注意的一个细节问题.话不多说,直接举例子: 例子1: switch(fruit) { case 1:printf("apple"); break; case 2:printf("banana"); break; case 3:printf("orange"); break; case 4:printf("pear"); break; cas

Switch Case语句中多个值匹配同一个代码块的写法

switch ($p) { case 'home': case '': $current_home = 'current'; break; case 'users.online': case 'users.location': case 'users.featured': case 'users.new': case 'users.browse': case 'users.search': case 'users.staff': $current_users = 'current'; break

在switch中的case语句中声明变量会被提前

原文链接:http://my.oschina.net/u/2000201/blog/514384 本人今天在编写工具类时,无意之间发现,在Java的Swith语句的case语句中声明局部变量时出现了一个奇怪的问题. 废话少说,先列出例子,一看便知. 情景一:case 1中声明变量x,case 2中不能再声明变量x switch (1) { case 1: int x = 1; break; case 2: int x = 2;// 编译器会提示:Duplicate local variable

switch case语句中能否作用在String,long上

在之前的eclipse中使用switch的case语句时是只能为(byte,short,char)int类型或枚举类型.但在jdk1.7以后 在case语句中是可以使用String 以及long 等类型的 然后再控制台输入"好"之后 跟据所提供的值对应输出了case值.所以String,long可以作用在switch当中 原文地址:https://www.cnblogs.com/JXun/p/9338583.html

在数据库并发情况下避免插入重复数据的一个解决方法

目前公司的项目中碰到一个情况:需要向一个数据表table1中插入记录,该表的结构类似于下面的定义: 列名  类型 是否允许为空 Id int no Area string no AreaIndex int no Name string no 其中Name的值由Area和AreaIndex拼接而成,形式类似于“Area+AreaIndex”.对于相同的Area,AreaIndex从1开始计数,所以对于Area分别为“AA”,“BB”,“CC”的情况,Name的值类似下面这样: AA001 AA00

SQL优化 查询语句中,用 inner join 作为过滤条件和用where作为过滤条件的区别

前段时间遇到一个存储过程,参数之一是一个字符串,实际作用是在存超过中是作为一个查询条件处理的 在存储过程中,把字符串拆分成一个临时表之后作key值,作为一个查询条件,逻辑实现上有两种处理方式 insert into #t select key from split_function('传递进来的字符串',',') 第一种是与物理表做inner join,类似如下 select * from tableA a inner join tableB b on a.id=b.id inner join

sql server 2008语句中的go有什么用?

GO表示一个批处理的结束, SQLSERVER遇到Go以后就会将GO之前的语句作为一整批进行处理你在SSMS里执行的时候, 通常加不加都可以,但是如果实在SQLCMD下执行, GO就是一个执行命令了另外GO后面可以跟参数, 让整批语句执行N次, 比如GO 100