Byg en Oracle APEX-applikation med ChatGPT o3-mini-modellen
Du skal beskrive de nødvendige skridt og den nødvendige kode for at lave en Oracle APEX-applikation, der kan modtage input fra en bruger i følgende felter: Navn, CPR-nummer og Firma - og CPR-nummeret skal checkes (den sædvanlige check for danske CPR-numre) ved hjælp af noget PL/SQL-kode. Du skal også spørge mig om de ting du mangler at vide for at kunne lave systemet.Nedenfor er en overordnet beskrivelse af, hvordan du kan opbygge en Oracle APEX-applikation, der modtager input for Navn, CPR-nummer og Firma og validerer CPR-nummeret med PL/SQL. Jeg vil først beskrive de nødvendige skridt og kodeeksempler, og derefter stiller jeg nogle opklarende spørgsmål, så jeg kan tilpasse løsningen præcist til dine behov.
Overordnede Skridt
-
Opret en database-tabel til at gemme data
Du skal have en tabel, hvor de indtastede oplysninger kan gemmes. For eksempel:CREATE TABLE PERSON_DATA ( ID NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, NAVN VARCHAR2(100), CPR_NUMMER VARCHAR2(10), FIRMA VARCHAR2(100) ); -
Opret en PL/SQL-funktion til validering af CPR-nummeret
Funktionens formål er at tjekke, at CPR-nummeret består af præcis 10 cifre og opfylder den sædvanlige modulus 11-validering (hvor vægtene typisk er 4,3,2,7,6,5,4,3,2,1). Et eksempel på sådan en funktion kunne se således ud:CREATE OR REPLACE FUNCTION validate_cpr(p_cpr VARCHAR2) RETURN BOOLEAN IS l_sum NUMBER := 0; l_digit NUMBER; -- Vægtene for de enkelte cifre i CPR-nummeret l_weights SYS.OdciNumberList := SYS.OdciNumberList(4,3,2,7,6,5,4,3,2,1); BEGIN -- Tjek at CPR-nummeret er præcis 10 cifre og kun består af tal IF LENGTH(p_cpr) != 10 OR NOT REGEXP_LIKE(p_cpr, '^\d{10}$') THEN RETURN FALSE; END IF; FOR i IN 1 .. 10 LOOP l_digit := TO_NUMBER(SUBSTR(p_cpr, i, 1)); l_sum := l_sum + l_digit * l_weights(i); END LOOP; IF MOD(l_sum, 11) = 0 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; EXCEPTION WHEN OTHERS THEN RETURN FALSE; END;Bemærk: Der er i dag diskussion om, hvorvidt modulus 11-tjekket er tilstrækkeligt eller altid gældende for CPR-numre – særligt efter 2007. Vi kan tilpasse funktionen, hvis du har særlige krav her.
-
Opret en Oracle APEX-applikation
- Opret en ny applikation: I Oracle APEX opretter du en ny applikation.
- Tilføj en formular-side: Vælg at oprette en formular, der binder til tabellen
PERSON_DATA, og som indeholder felterne NAVN, CPR_NUMMER og FIRMA.
-
Implementer validering i APEX
For at sikre, at kun gyldige CPR-numre accepteres, kan du tilføje en validering på CPR-feltet:- Gå til siden med formularen, og tilføj en validering af typen “PL/SQL Function (return error text)” på itemet
:CPR_NUMMER. - Brug følgende PL/SQL-kode som validering:
IF NOT validate_cpr(:CPR_NUMMER) THEN RETURN 'CPR-nummeret er ugyldigt. Tjek venligst formatet og kontrolcifret.'; ELSE RETURN NULL; END IF; - Denne validering kører, når brugeren forsøger at indsende formularen, og forhindrer indsættelsen, hvis CPR-nummeret ikke består valideringen.
- Gå til siden med formularen, og tilføj en validering af typen “PL/SQL Function (return error text)” på itemet
-
Gem data og test applikationen
- Når valideringen er bestået, indsættes dataene i tabellen.
- Test applikationen grundigt for at sikre, at alt fungerer som forventet, og at fejlmeddelelser vises korrekt ved ugyldigt input.
Spørgsmål til Afklaring
For at jeg kan hjælpe dig med en mere præcis løsning, mangler jeg nogle oplysninger:
-
Oracle APEX Version:
Hvilken version af Oracle APEX arbejder du med? Det kan have betydning for nogle af de anvendte funktioner og metoder. -
Database og Tabel:
- Har du allerede en eksisterende tabel, hvor data skal gemmes, eller skal vi oprette en ny som i eksemplet ovenfor?
- Er der andre felter eller constraints, der skal implementeres i tabellen?
-
Valideringskrav for CPR-nummer:
- Er det præcis modulus 11-validering, du ønsker, eller er der yderligere regler (f.eks. validering af fødselsdatoen udledt af CPR-nummeret)?
- Skal valideringen udelukkende ske ved hjælp af PL/SQL, eller skal der også være client-side (JavaScript) validering?
-
Brugergrænseflade og Feedback:
- Hvordan skal fejlhåndtering vises for brugeren? Ønsker du inline fejlmeddelelser, pop-up alerts eller noget andet?
- Er der specifikke designkrav eller temaer, der skal anvendes?
-
Yderligere Funktioner:
- Skal applikationen håndtere andre typer input eller processer (f.eks. opdatering og sletning af data)?
- Skal der implementeres adgangskontrol eller andre sikkerhedsforanstaltninger?
Med disse afklaringer kan jeg justere koden og vejledningen, så den passer præcist til dine krav. Lad mig vide, hvilke detaljer der er relevante for din situation!
Kommentarer
Send en kommentar