Ugyldige tallene i Oracle tabeller kan være frustrerende og føre velformede kode for å oppføre seg i uventede og uønskede måter , noe som resulterer i Oracle ORA - 01722 feil . Den ugyldig antall feil i Oracle oppstår , noen ganger i en tilsynelatende tilfeldig måte , når SQL -koden er skrevet som bruker en karakter -basert kolonnen for matematiske operasjoner og en ikke- numerisk tegn oppstått . For å gjøre vondt verre, vil denne feilen ikke alltid oppstå selv om vilkårene for det er oppfylt. Dette er først og fremst på grunn av måten en tabell er krysset når det blir skannet til å sammenligne data . Du trenger
Oracle database
bord med en VARCHAR2 kolonne
Data for både numerisk og ikke- numerisk type i VARCHAR2 kolonne
Vis flere instruksjoner
Unngå feil før det skjer
en
Lag en tabell med skikkelig definerte kolonner . For eksempel : en
CREATE TABLE numbers_and_words
( number_col AS nummer , etter
word_col AS varchar2 ( 100 ) )
2
Program søknaden til bare plassere numeriske data i number_col kolonne og karakter data i word_col kolonnen.
3
Lag en sjekk tilstand i applikasjonen som sikrer numeriske data blir ikke sendt til number_col kolonnen. Oracle vil tillate tegnet representasjon av en rekke som skal lagres i en karakter kolonne .
Omgå den
4
Skriv en funksjon for å fange ikke-numeriske data . Et eksempel : en
CREATE FUNCTION is_numeric (str I VARCHAR2 )
RETURN NUMMER
ER
num NUMMER ;
BEGIN
num : = TO_NUMBER (str ) ;
RETURN 1;
UNNTAK
NÅR andre så
return 0 ;
< p> END ;
5
Skriv en visning som bruker funksjonen for å lage en representasjon av bordet uten ikke-numeriske data . Forutsatt at tabellen navn er t1 og kolonnen med blandet data kalles " mixed_col ", en numerisk -visningen kan skrives slik : en
Opprett visning numbersonly AS
SELECT mixed_col FRA t1
HVOR is_numeric ( mixed_col ) = 1
6
Bruk numbersonly syn i spørsmål som trenger å gjøre numerisk - baserte operasjoner på kolonnen. For eksempel : en
SELECT * FROM numbersonly
HVOR mixed_col > 35