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

  1. 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)
    );
    
  2. 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.

  3. 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.
  4. 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.
  5. 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:

  1. Oracle APEX Version:
    Hvilken version af Oracle APEX arbejder du med? Det kan have betydning for nogle af de anvendte funktioner og metoder.

  2. 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?
  3. 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?
  4. 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?
  5. 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

Populære opslag fra denne blog

Lav verdens bedste prompt i o3 og brug den til Deep Research

En tidligere OpenAI-medarbejder taler ud (positivt, men meget interessant)

Valg af den rigtige AI og den rigtige AI-model (Ethan Mulllicks seneste opslag)