Hi all,

Thank you for all who responded to my range checking
question.  I created a function check_range with in
parameter varchar2, and return varchar2.

This works fine:
select check_range('301') from FRANCHISE_AREA;

But when I select the column, I got:
select check_range(FRANCHISE_NAME) from FRANCHISE_AREA
       *
ERROR at line 1:
ORA-20599: ORA-06502: PL/SQL: numeric or value error:
character to number
conversion error
ORA-06512: at "ICSS.CHECK_RANGE", line 69
ORA-06512: at line 1

The table structure shows FRANCHISE_NAME is varchar2:
SQL> desc  FRANCHISE_AREA;
 Name                                      Null?   
Type
 ----------------------------------------- --------
----------------------------
 FRANCHISE_ID                              NOT NULL
NUMBER(10)
 FRANCHISE_NAME                            NOT NULL
VARCHAR2(32)
 FRANCHISE_AUTHORITY                       NOT NULL
VARCHAR2(100)
 FRANCHISE_CONTACT_ADDRESS_ID              NOT NULL
NUMBER(10)
 FRANCHISE_CONTACT_PHONE_ID                        
NUMBER(10)
 FRANCHISE_CONTACT_NAME                            
VARCHAR2(32)
 FRANCHISE_CUI_NUMBER                      NOT NULL
VARCHAR2(10)
 FRANCHISE_EFFECTIVE_DATE                  NOT NULL
DATE
 FRANCHISE_EXPIRATION_DATE                         
DATE
 REMITTANCE_SERVICE_CENTER_ID              NOT NULL
NUMBER(5)
 BILLING_SERVICE_CENTER_ID                 NOT NULL
NUMBER(5)
 RETURN_ADDR_SERVICE_CENTER_ID             NOT NULL
NUMBER(5)
 CUI_SERVICE_CENTER_ID                             
NUMBER(5)
 COMPANY_ID                                NOT NULL
NUMBER(10)


The code for function is:
CREATE OR REPLACE FUNCTION check_range(
franchise_name  varchar2)
return
varchar2
as
        ifranchise_name number;
        franchise_code  varchar2(2);
        StoO_error      number;
        StoO_errmsg     VARCHAR2(255);
begin
        ifranchise_name := to_number(franchise_name);
        if ifranchise_name >= 301 and  ifranchise_name
<= 390 then
                franchise_code := 'QD';
        elsif ifranchise_name >= 391 and 
ifranchise_name <= 392 then
                franchise_code := 'NW';
        elsif ifranchise_name >= 393 then
                franchise_code := 'SA';
        elsif ifranchise_name >= 394 then
                franchise_code := 'NT';
        elsif ifranchise_name >= 415 and 
ifranchise_name <= 420 then
                franchise_code := 'NW';
        elsif ifranchise_name >= 421 then
                franchise_code := 'NT';
        elsif ifranchise_name >= 422 and 
ifranchise_name <= 434 then
                franchise_code := 'NW';
        elsif ifranchise_name >= 435 and 
ifranchise_name <= 437 then
                franchise_code := 'SA';
        elsif ifranchise_name >= 439 and 
ifranchise_name <= 455 then
                franchise_code := 'NW';
        elsif ifranchise_name >= 456 then
                franchise_code := 'SA';
        elsif ifranchise_name >= 457 then
                franchise_code := 'NW';
        elsif ifranchise_name >= 459 then
                franchise_code := 'SA';
        elsif ifranchise_name >= 460 then
                franchise_code := 'NW';
        elsif ifranchise_name >= 465 and 
ifranchise_name <= 467 then
                franchise_code := 'SA';
        elsif ifranchise_name >= 473 then
                franchise_code := 'NT';
        elsif ifranchise_name >= 475 and 
ifranchise_name <= 476 then
                franchise_code := 'SA';
        elsif ifranchise_name >= 477 and 
ifranchise_name <= 479 then
                franchise_code := 'NW';
        elsif ifranchise_name >= 483 then
                franchise_code := 'SA';
        elsif ifranchise_name >= 487 and 
ifranchise_name <= 498 then
                franchise_code := 'NW';
        elsif ifranchise_name >= 505 and 
ifranchise_name <= 510 then
                franchise_code := 'VC';
        elsif ifranchise_name >= 511 and 
ifranchise_name <= 515 then
                franchise_code := 'TA';
        elsif ifranchise_name >= 516 and 
ifranchise_name <= 582 then
                franchise_code := 'VC';
        elsif ifranchise_name >= 701 and 
ifranchise_name <= 799 then
                franchise_code := 'NW';
        else
                franchise_code := NULL;
        end if;
        return franchise_code;

EXCEPTION
        WHEN NO_DATA_FOUND THEN
                NULL;
        WHEN  OTHERS THEN
                StoO_error := SQLCODE;
                StoO_errmsg := SQLERRM;
               
raise_application_error(-20599,substr(StoO_errmsg,1,100));
end;


Any idea ??? Thank you !!

Leslie


__________________________________________________
Do You Yahoo!?
Find the one for you at Yahoo! Personals
http://personals.yahoo.com
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Leslie Lu
  INET: [EMAIL PROTECTED]

Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051
San Diego, California        -- Public Internet access / Mailing Lists
--------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).

Reply via email to