Terry Coccoli <re*****@ifneeded.com> wrote in message news:<Kr**********************@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