当前位置: 代码迷 >> Oracle开发 >> ORA-00932: 数据类型不一致: 应为 NUMBER, 但却取得 AAA.TYPESTT
  详细解决方案

ORA-00932: 数据类型不一致: 应为 NUMBER, 但却取得 AAA.TYPESTT

热度:480   发布时间:2016-04-24 07:00:57.0
ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 AAA.TYPESTT
本帖最后由 expleeve 于 2013-04-28 15:54:59 编辑
Schema为AAA

执行的SQL语句为
SELECT ID,STT,grouping(ID),grouping(STT)  
FROM TABLE (CORP('sys1','code1')) 
group by grouping sets((ID),(STT));


错误信息为
ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 AAA.TYPESTT


自定义类型为
CREATE OR REPLACE TYPE "AAA"."TYPESTT"
 AS OBJECT( ID  VARCHAR2 (30),
            STT VARCHAR (10))


CREATE OR REPLACE TYPE "AAA"."CORPSTT" AS TABLE OF TYPESTT


CORP函数的定义如下
CREATE
OR
REPLACE
FUNCTION "AAA"."CORP"(SYS1 VARCHAR ,
                      CODE1 VARCHAR)
    RETURN CORPSTT PIPELINED AS V1 TYPESTT ;
VCODE VARCHAR(30);
VSYS VARCHAR(10);
V_DATE VARCHAR(10);
BEGIN
    VCODE := CODE1 ;
VSYS := SYS1 ;
V_DATE := TO_CHAR(SYSDATE,'YYYY-MM-DD') ;
FOR MYROW IN
(
    SELECT
        ID ,
        STT
    FROM
        RLCP
    UNION ALL
    SELECT
        CORPID ,
        CORPROLE
    FROM
        RRCP )
LOOP
    V1 := TYPESTT(MYROW.ID, MYROW.STT);
PIPE ROW (V1);
END LOOP;
RETURN ;
END ;



请教
00932 数据类型不一致 grouping?sets group?by 自定义函数

------解决方案--------------------
GROUPING不能在grouping sets使用,只能在ROLLUP或CUBE的查询中使用。

把grouping sets 换成rollup或者cube应该没问题。


------解决方案--------------------
引用:
谢谢回复,但是我没有找到有关方面的记录规定不能连用,能给个出处吗?


有什么不能用的,试试不就知道了。项目里一直都用grouping判断应该“小计”,“合计”,还是“总计”。

with t as (
     select 1 id, '服装' ptype, '男装' stype, 78 amount, '2009-06-25' saledate from dual union all
     select 2 id, '服装' ptype, '男装' stype, 33 amount, '2009-03-21' saledate from dual union all
     select 3 id, '服装' ptype, '男装' stype, 22 amount, '2009-12-17' saledate from dual union all
  相关解决方案