您的位置:首页 > 数据库

[PL/SQL] 关于pl/sql编译报ORA-00934此处不允许使用分组函数 [复制链接]

2017-03-17 12:23 537 查看
     今天在开发的过程中碰到一个奇怪的现象:pl/sql编译报ORA-00934此处不允许使用分组函数,但单独执行该语句是可以成功执行的,并且业务逻辑也是正确的

     举个例子

     1、创建两张表

          create table ABC

          (

            ID      NUMBER,

            NUM     NUMBER,

            CUST_NO VARCHAR2(20)

          );

        create table test

      (

          ID      NUMBER,

        NUM     NUMBER,

         CUST_NO VARCHAR2(20)

        );

    2、执行如下语句

         select count(1) , sum(num),sum(decode(cust_no,'a',1,0)) from abc;

        可以成功执行

    3、创建一个test1存储过程

        create or replace procedure test1 is

a number;

b number;

c number;

begin

select 

       count(1) into a,

       sum(num) into b,

       sum(decode(cust_no,'a',1,0)) into c

   from abc;

   

exception 

   when others then

   begin

     rollback;

   end;

end test1;

编译时报ORA-00934此处不允许使用分组函数 错误。

    4、若将该存储过程改成插入表结构,不用隐身游标

       create or replace procedure test1 is

a number;

b number;

c number;

begin

insert into test

select 

       count(1) ,

       sum(num) ,

       sum(decode(cust_no,'a',1,0)) 

   from abc;

   

exception 

   when others then

   begin

     rollback;

   end;

end test1;

该存储过程编译成功,执行也成功。或者是显示游标也是可以编译成功和执行成功的。

现在不是很理解为什么在使用隐形游标这种方式编译会报错,而单独拿出该语句执行或者用另外一种方式处理就不会报错呢?请各位大侠指点下
编译ORA-00934函数开发语句

相关帖子

本版精华

《JavaScript从入门到精通》课程循序渐进带你打通任督二脉,直至全面掌握前端开发利器

《Java魔鬼训练营》每课实战训练,深度讲解Java开发技巧,快速锻造Java高手

《Scala从基础到开发实战》Spark系列的前置课程,供大数据技术的同仁们进行热身运动

恭喜yingyifeng306上任oracle高可用版版主

《IT名人堂》采访Oracle开发大师:苏旭晖先生(ID:newkid)

《Zookeeper分布式系统开发实战》分布式系统开发利器,轻松的构建自己的分布式系统

《DataStage基础及开发实践》介绍业界领先的专业ETL工具,助你开启数据集成之门

《Openstack从基础到开发实践》深入浅出解读openstack使用与优化,支持者速进!

《Swfit语言开发从基础到实战》了解Swift核心知识,打造高富帅的移动应用!

【大话IT】查询结果要对其中一列的数值进行相加。

 使用道具 举报
回复

  
owen00sun





论坛徽章:
3







2#


 发表于
2012-2-20 22:34 | 只看该作者

select count(1) ,sum(num),sum(decode(cust_no,'a',1,0)) into a,b,c from abc;

第一个存储过程中有误
 
点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐