Ongeldige getallen in Oracle tabellen kan frustrerend zijn en de oorzaak goed gevormd code te gedragen in onverwachte en ongewenste manieren , wat resulteert in de Oracle ORA - 01722 fout . De ongeldige aantal fouten in Oracle ontstaat soms een schijnbaar willekeurige manier , wanneer SQL code wordt geschreven dat gebruik maakt van een karakter gebaseerde kolom voor wiskundige bewerkingen en een niet - numeriek teken wordt aangetroffen . Om de zaken nog erger te maken , zal deze fout niet altijd voorkomen , hoewel de voorwaarden voor het tevreden . Dit is voornamelijk te wijten aan de manier waarop een tabel wordt doorlopen wanneer het wordt gescand voor het afstemmen van data . Wat je nodig hebt Oracle-database Tafel met een VARCHAR2 kolom Gegevens van zowel numerieke en niet- numerieke waarde is in de VARCHAR2 kolom Toon Meer Aanwijzingen Vermijd de fout Vóór it Happens 1 Maak een tabel met goed gedefinieerde kolommen . Bijvoorbeeld : CREATE TABLE numbers_and_words ( number_col AS nummer , word_col AS varchar2 ( 100 ) ) op Twitter Programma 2 de aanvraag om alleen plaatsen numerieke gegevens in de number_col kolom en karakter gegevens in de word_col kolom . 3 Maak een cheque voorwaarde in de applicatie die ervoor zorgt numerieke gegevens niet wordt doorgegeven aan de number_col kolom . Oracle zal het karakter representatie van een getal te worden opgeslagen in een kolom karakter . Werk Eromheen 4 Schrijf een functie voor niet - numerieke gegevens te vangen . Een voorbeeld : CREATE FUNCTIE is_numeric ( str IN VARCHAR2 ) RETURN NUMMER IS num AANTAL ; BEGIN < br num > : = TO_NUMBER ( str ) ; RETURN 1 ; UITZONDERING wanneer anderen dan RETURN 0 ; END ; 5 Schrijf een standpunt dat de functie gebruikt om een representatie van de tabel te maken zonder niet- numerieke gegevens . Ervan uitgaande dat de naam van de tabel is t1 en de kolom met de gemengde data wordt " mixed_col , " een numerieke -only view geschreven kon worden als volgt genoemd : Weergave maken numbersonly AS SELECT mixed_col FROM t1 WAAR is_numeric ( mixed_col ) = 1 6 Gebruik de numbersonly mening in queries die moeten numerieke - based activiteiten doen op de kolom . Bijvoorbeeld : SELECT * FROM numbersonly WAAR mixed_col > 35
|