mysql5资源共享

 找回密码
 立即注册
查看: 196|回复: 22

[Oracle] 【开发】ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 CHAR\nORA-06512

[复制链接]

2

主题

15

帖子

34

积分

新手上路

Rank: 1

积分
34
发表于 2019-7-10 10:58:35 | 显示全部楼层 |阅读模式
strsql:='createtableresultasSELECTa.OrgCode,a.OrgName,a.NumberOfPeople,a.MedNum,a.CurrOccupationRatio ,CASE WHENa.CurrOccupationRatio-a.LastOccupationRatio<0THEN'||'-'||'CAST(a.LastOccupationRatio-a.CurrOccupationRatioASvarchar(100)) WHENa.CurrOccupationRatio-a.LastOccupationRatio=0THEN0.00 ELSE'||'+'||'CAST(a.CurrOccupationRatio-a.LastOccupationRatioASvarchar(100)) ENDASYearIncrease ,CASE WHENa.CurrOccupationRatio-a.qgOccupationRatio<0THEN'||'-'||'CAST(a.qgOccupationRatio-a.CurrOccupationRatioASvarchar(100)) WHENa.CurrOccupationRatio-a.qgOccupationRatio=0THEN0.00 ELSE'||'+'||'CAST(a.CurrOccupationRatio-a.qgOccupationRatioASvarchar(100)) ENDASQgIncrease FROM( SELECTa.OrgCode,a.OrgName,a.NumberOfPeople ,( SELECTCOUNT(1) FROMtempb WHEREa.orgName=b.orgName )ASMedNum ,CASE WHENnvl(a.numberofpeople,CAST(0ASnumber))=0THENCAST(0ASdecimal(18,2)) ELSECAST(( SELECTCOUNT(1) FROMtempb WHEREa.orgName=b.orgName )/(CAST(a.numberofpeopleASdecimal)/1000)*100ASdecimal(18,2)) ENDASCurrOccupationRatio ,CASE WHENnvl(a.numberofpeople,CAST(0ASnumber))=0THENCAST(0ASdecimal(18,2)) ELSECAST(( SELECTCOUNT(1) FROMtemp1b WHEREa.orgName=b.orgName )/(CAST(a.numberofpeopleASdecimal)/1000)*100ASdecimal(18,2)) ENDASLastOccupationRatio,CAST(( SELECTCOUNT(1) FROMjg_infob WHEREisfz=1 ANDto_char(b.passdate,''yyyy'')='||yearr||' )/(CAST(( SELECTSUM(numberofpeople) FROMKgOrgswhereLV=1 )ASdecimal)/1000)*100ASdecimal(18,2))ASqgOccupationRatio FROMtempOrgsa )a'; executeimmediatestrsql;
回复

使用道具 举报

0

主题

37

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2019-7-10 11:25:38 | 显示全部楼层
casewhen
then后面的类型不一致
回复

使用道具 举报

36

主题

2968

帖子

6024

积分

论坛元老

Rank: 8Rank: 8

积分
6024
发表于 2019-7-10 11:27:04 | 显示全部楼层
把相关的表结构贴上来,要createtable形式的,方便大家帮你调试。
回复

使用道具 举报

0

主题

37

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2019-7-10 11:27:32 | 显示全部楼层
你把语句输出出来然后执行select语句,看看问题在哪就可以了
回复

使用道具 举报

2

主题

15

帖子

34

积分

新手上路

Rank: 1

积分
34
 楼主| 发表于 2019-7-10 12:44:46 | 显示全部楼层
casewhen
then后面数据记过cast后类型已经一致,由于cast数据在字符串中,不知是否已经自动转化为字符串,最终导致数据不一致
回复

使用道具 举报

2

主题

15

帖子

34

积分

新手上路

Rank: 1

积分
34
 楼主| 发表于 2019-7-10 12:50:50 | 显示全部楼层
CREATETABLEjg_info(
        unitguidNVARCHAR2(16)NOTNULL,
        unitnameNVARCHAR2(100)NOTNULL,
        addrNVARCHAR2(200)NOTNULL,
        postcodeNVARCHAR2(6)NULL,
        c_syzxsNVARCHAR2(10)NOTNULL,
        c_jglbNVARCHAR2(10)NOTNULL,
        c_jgjbNVARCHAR2(10)NOTNULL,
        c_jgdcNVARCHAR2(10)NOTNULL,
        naturebusiNVARCHAR2(10)NOTNULL,
        c_fwdxNVARCHAR2(10)NOTNULL,
        c_cwsNVARCHAR2(10)NOTNULL,
        c_yysNVARCHAR2(10)NULL,
        c_zczjNVARCHAR2(20)NOTNULL,
        fridnameNVARCHAR2(50)NOTNULL,
        fridcardNVARCHAR2(20)NOTNULL,
        fznameNVARCHAR2(50)NOTNULL,
        fzridcardNVARCHAR2(20)NOTNULL,
        datevalidbeginDATENOTNULL,
        datevaliendDATENOTNULL,
        unitregcodeNVARCHAR2(100)NOTNULL,
        organidNVARCHAR2(128)NULL,
        organnmeNVARCHAR2(50)NOTNULL,
        passdateDATENULL,
        subject_nameCLOBNOTNULL,
        subjectcodeCLOBNULL,
        certificateNVARCHAR2(500)NULL,
        privateNVARCHAR2(128)NULL,
        provinceNVARCHAR2(50)NOTNULL,
        provincecodeNVARCHAR2(50)NULL,
        commCLOBNULL,
        rsvdCLOBNULL,
        isbgNVARCHAR2(2)NOTNULL,
        isqzNVARCHAR2(2)NOTNULL,
        isfzNVARCHAR2(2)NOTNULL,
        provinceOrgNameNVARCHAR2(50)NULL,
        cityNVARCHAR2(50)NULL,
        countyNVARCHAR2(50)NULL,
CONSTRAINTjg_info_PKPRIMARYKEY(unitguid)
);


temp:='createtabletemp(
unitguidvarchar2(16),
isfzvarchar2(2),
passdatedate,
orgNamevarchar2(50)
)';
executeimmediatetemp;

temp1:='createtabletemp1
(
unitguidvarchar2(100)
,isfzvarchar2(2)
,passdatedate
,orgNamevarchar2(50)
)';

CREATETABLEKgOrgs(
        OrgGuidCHAR(36)NOTNULL,
        OrgNameCLOBNULL,
        OrgCodeCLOBNULL,
        "Level"intNOTNULL,
        ParentOrgCodeCLOBNULL,
        ParentOrgLevelCodeCLOBNULL,
        NumberOfPeopleNUMBER(19,0)NULL,
CONSTRAINTKgOrgsPRIMARYKEY(OrgGuid)
);

tempOrgs表就是KgOrgs
                                                       
                                                               
回复

使用道具 举报

36

主题

2968

帖子

6024

积分

论坛元老

Rank: 8Rank: 8

积分
6024
发表于 2019-7-10 13:23:05 | 显示全部楼层
--a.orgName的数据类型是CLOB,用to_char转化一下(目测至少有三处)
--或者在定义表结构时,直接为varchar类型
SELECTCOUNT(1)FROMtempbWHEREto_char(a.orgName)=b.orgName)
SELECTCOUNT(1)FROMtemp1bWHEREto_char(a.orgName)=b.orgName)
回复

使用道具 举报

2

主题

15

帖子

34

积分

新手上路

Rank: 1

积分
34
 楼主| 发表于 2019-7-10 13:30:35 | 显示全部楼层
改了还是报ORA-00932:数据类型不一致:应为NUMBER,但却获得CHAR
是否是casewhenthen数据不一致的问题
回复

使用道具 举报

0

主题

37

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2019-7-10 14:19:23 | 显示全部楼层
+那一块有问题
回复

使用道具 举报

2

主题

15

帖子

34

积分

新手上路

Rank: 1

积分
34
 楼主| 发表于 2019-7-10 14:24:02 | 显示全部楼层
那怎么改啊,+是需要添加的字符
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|mysql5.com Inc. ( 闽ICP备17002856号-1 )

GMT+8, 2019-10-23 00:27 , Processed in 0.049500 second(s), 18 queries .

Powered by MySQL5.com X3.4

© 2003-2019 MySQL5.com.

快速回复 返回顶部 返回列表