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