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

     今天在开发的过程中碰到一个奇怪的现象: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;
该存储过程编译成功,执行也成功。或者是显示游标也是可以编译成功和执行成功的。

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

论坛徽章:
3
2012新春纪念徽章日期:2012-01-04 11:58:44 咸鸭蛋日期:2012-04-20 11:44:02 2013年新春福章日期:2013-02-25 14:51:24
2#
  发表于 2012-2-20 22:34  |  只看该作者
select count(1) ,sum(num),sum(decode(cust_no,'a',1,0)) into a,b,c from abc;
第一个存储过程中有误
 
点击打开链接
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值