Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.misc -> Re: sql select sum stored procedure

Re: sql select sum stored procedure

From: Ken Chesak <datavector_at_hotmail.com>
Date: 11 Feb 2003 15:18:54 -0800
Message-ID: <3f2f39c4.0302111518.7e67b2bf@posting.google.com>


Karsten Farrell <kfarrell_at_belgariad.com> wrote in message news:<MPG.18b2e26b4ac7916f989699_at_news.la.sbcglobal.net>...
> datavector_at_hotmail.com said...
> > The following sql works stand alone in SQLPlus but wont work in a
> > stored procedure. The procedure fails at the line, gwsc.gws_seq =
> > (SELECT MAX(gws_seq). How can I make this work in a proc. Oracle
> > version 8.1.7.
> >
> > The error message is PLS-00103:Encountered the symbol "SELECT"..
> >
> >
> > select rh.case_no into v_ct
> > FROM w_wage_employer rwe, w_rg101 rh, w_wage_case rwc
> > WHERE rwe.cd_disposition = 'NONE' AND
> > rh.cd_case_category IN ('06','08','09') AND
> > rh.case_status = '2' AND
> > rwc.id_rg101 = rh.id_rg101 AND
> > rwc.id_wage = rwe.id_wage AND
> > rwe.amt_wages - (SELECT SUM(gwsc.amt_payment)
>
> (snip rest of sql statement)
>
> I don't know if this is the problem, but the pl/sql engine hasn't always
> kept up with the features available in sqlplus. Since inline views are
> fairly recent (relative to oracle history), I suspect this particular
> version of inline view might be one of those cases where the pl/sql
> engine lags behind. Make a simple, non-functional stored procedure and
> see if it compiles on your database ... something like (only did an
> eyeball syntax check on this):
>
> create or replace procedure xyz is
> v_ct number;
> begin
> for x in (
> select rh.case_no into v_ct
> from w_wage_employer rwe, w_rg101 rh
> where (rwe.amt_wages - (select count(*) from dual)) > 10
> )
> loop
> null;
> end loop;
> end xyz;
>
> Do NOT run it; just see if it compiles. That way, you don't have to deal
> with a very long sql just to find out that it wouldn't compile even if
> it were simpler.
>
> If it doesn't compile, you might be able to "trick" the pl/sql engine by
> wrapping your sql in an execute immediate (which I believe bypasses the
> pl/sql engine; but not sure about this).

By changing the order I was able to compile the stored procedure. This also works for my original SQL. Thanks for your help.

Your example changed to:

create or replace procedure xyz is
  v_ct number;
begin
  for x in (
    select rh.case_no
    from w_wage_employer rwe, w_rg101 rh     where 10 <= (select rwe.amt_wages - count(*) from dual)     )
  loop
    null;
  end loop;
end xyz; Received on Tue Feb 11 2003 - 17:18:54 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US