Re: Missing Parenthese Error: ORA-00907

From: <sybrandb_at_yahoo.com>
Date: 6 Apr 2004 00:55:43 -0700
Message-ID: <a1d154f4.0404052355.15aab005_at_posting.google.com>


Terry Coccoli <request_at_ifneeded.com> wrote in message news:<Krlcc.1556222$iA2.185342_at_news.easynews.com>...
> Terry Coccoli wrote:
>
> > Anyone see anything wrong with this:
> >
> >
> > create or replace function HourParser(DayTimeValue In Integer) return
> > varchar2 is
> > Result varchar2(20);
> > begin
> > Execute Immediate
> > 'SELECT CASE (WHEN :x > 1) THEN "YES" END
> > FROM DUAL' Into Result Using DayTimeValue;
> >
> > Return(result);
> > end HourParser;
> >
>
>
> I fixed this one. The double quotes were replaced by consecutive single
> quotes, and for a reason unknown to me, I had to remove the parentheses.
>
> But I have another question now. I expanded on the above CASE statement
> so that I now reference :x 10 times. It seems that the USING clause has
> to look something like
>
> USING DayTimeValue, DayTimeValue, DayTimeValue....,DayTimeValue (10th
> iteration) or else I get an 'ORA-01008:not all bind variables bound' error.
>
> Is there any way to simplify the Using clause for a situation where I
> need to continually reference the bind variable ?

Sure, you can, but it would require you to stop misusing dynamic sql, and *Learn* Pl/sql, instead of just hacking away. Actually you don't need it all for this statement, and an ordinary select into will just do fine. In that case you can refer directly to DayTimeValue.
Note: EXECUTE IMMEDIATE statements are always parsed. Using dynamic sql everywhere is the safest method to get awful performance. Seems you, without extensive reading and understanding the PL/SQL documentation, you are heading directly into a disaster.

Sybrand Bakker
Senior Oracle DBA Received on Tue Apr 06 2004 - 09:55:43 CEST

Original text of this message