Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Mailing Lists -> Oracle-L -> RE: Can't code for s.... peanuts
You
are not performing a FETCH after you open your cursor, and you are falling
through your IF statements.
<SPAN
class=189292319-23072001>
<SPAN
class=189292319-23072001>Try
<SPAN
class=189292319-23072001>
<SPAN
class=189292319-23072001>loc_fname
names.fname%type;
names.lname%type;
class=189292319-23072001>ELSE
<FONT face=Tahoma
size=2>-----Original Message-----From:
oqij4ngfcrweuh001_at_sneakemail.com
[mailto:oqij4ngfcrweuh001_at_sneakemail.com]Sent: Monday, July 23,
2001 3:52 PMTo: Multiple recipients of list
ORACLE-LSubject: Re: Can't code for s....
peanuts
To all who offered there help :
A big thanks, I've got this about 70% licked now
:)
The winning combination was :
CREATE OR REPLACE FUNCTION check_for_name2
(p_name_to_check VARCHAR)RETURN VARCHAR2
ISv_data VARCHAR2(<FONT color=#0000f0
size=1>20);v_return_value
VARCHAR2(20<FONT color=#000000
size=1>);BEGINSELECT lname INTO v_data
FROM namesWHERE lname =
p_name_to_check;RETURN <FONT color=#0000f0
size=1>'Found'<FONT color=#000000
size=1>;EXCEPTIONWHEN no_data_found THEN
RETURN 'No Matches'<FONT
color=#000000 size=1>;END check_for_name2;
Thanks to Lisa for the help there. However, the
attempts to do the same with the cursor continue to fail:<FONT
color=#000000 size=1>
CREATE OR REPLACE FUNCTION check_for_name
(p_name_to_check VARCHAR)RETURN VARCHAR2
ISCURSOR c_namestbl ISSELECT lname,
fnameFROM namesWHERE lname =
p_name_to_check;v_return_value VARCHAR2(<FONT color=#0000f0
size=1>20<FONT color=#000000
size=1>);BEGINOPEN c_namestbl;IF
c_namestbl%NOTFOUND = TRUE THENv_return_value :=
'Not here'<FONT color=#000000
size=1>;ELSIF C_namestbl%FOUND = FALSE
THENv_return_value := 'In
Here'; END
IF;CLOSE c_namestbl;RETURN
v_return_value;EXCEPTIONWHEN no_data_found THEN
RETURN 'No Matches'<FONT
color=#000000 size=1>;END check_for_name;
While I can get it to execute
with "Select check_for_name('Cruise') FROM dual;" it returns no data, but
looks like it wants to:
SQL> SELECT
check_for_name('Cruise') FROM dual;
<FONT face=Arial
size=2>CHECK_FOR_NAME('CRUISE')------------------------------------------------SQL>
Hi again everybody,
I'll try to be as descriptive as possible,
sorry if I leave anything important out.
I have the following function which I'm
compiling using PL/SQL Developer (tnx Djordje).
CREATE OR REPLACE FUNCTION check_for_name
(p_name_to_check VARCHAR)RETURN BOOLEAN
ISCURSOR c_namestbl ISSELECT
lnameFROM namesWHERE lname =
p_name_to_check;v_return_value
BOOLEAN;BEGINOPEN c_namestbl;IF
c_namestbl%NOTFOUND THENv_return_value :=
FALSE;ELSIF C_namestbl%FOUND
THENv_return_value := TRUE; END
IF;RETURN v_return_value;CLOSE
c_namestbl;END check_for_name;
It compiles without errors (now).
The table 'names' is built like this :
SVRMGR> DESCRIBE names;Column
Name Null? Type------------------------------ -------- ----FNAME VARCHAR2(20)LNAMEVARCHAR2(20)SVRMGR>
LNAME-------------------- --------------------Bruce WillisSalma HayekTom CruiseElle
Received on Mon Jul 23 2001 - 14:39:27 CDT
![]() |
![]() |