# SQL Datenbank Tabelle insert



## labelleamelie (11. Mai 2021)

habe wieder folgendes Problem, kann mir eventuell jemand helfen?

CREATE TABLE Land(
    LandID                  INTEGER NOT NULL UNIQUE,
    LandName                VARCHAR2(30) NOT NULL,

    CONSTRAINT size_Land CHECK (LandName >= 2),
    CONSTRAINT Land_pk PRIMARY KEY(LandName)
);


Fehler beim Start in Zeile: 128 in Befehl -
INSERT INTO Land (LANDID, LandName)
VALUES (3, 'Japan')
Fehlerbericht -
ORA-01722: Ungültige Zahl


----------



## LimDul (11. Mai 2021)

CONSTRAINT size_Land CHECK (LandName >= 2),

DIe Constraint überprüft, dass der LandName einen Wert größer/gleich 2 hat. Japan ist aber keine Zahl, daher geht die Constraint auf die Bretter. Die Constraint rausschmeißen oder umformulieren, dass das korrekte prüft (Dafür je nach eingesetzter DB die entsprechende String Funktion suchen).


----------



## labelleamelie (11. Mai 2021)

LimDul hat gesagt.:


> CONSTRAINT size_Land CHECK (LandName >= 2),
> 
> DIe Constraint überprüft, dass der LandName einen Wert größer/gleich 2 hat. Japan ist aber keine Zahl, daher geht die Constraint auf die Bretter. Die Constraint rausschmeißen oder umformulieren, dass das korrekte prüft (Dafür je nach eingesetzter DB die entsprechende String Funktion suchen).


Ergibt Sinn, danke


----------



## labelleamelie (11. Mai 2021)

CREATE TABLE Land(
    LandID                  INTEGER NOT NULL UNIQUE,
    LandName                VARCHAR2(30) NOT NULL,

    CONSTRAINT size_Land CHECK (LandName >= 2),
    CONSTRAINT Land_pk PRIMARY KEY(LandName)
);

ALTER TABLE Land 
MODIFY CONSTRAINT size_Land CHECK (LENGTH(LandName) >= 2);

Noch eine Frage

Muss ich MODIFY dann spalten name und dann datentyp 
oder komplett was ich ändern möchte wie oben, leider bekomme ich wieder eine Fehlermeldung.

Fehler beim Start in Zeile: 9 in Befehl -
ALTER TABLE Land 
MODIFY CONSTRAINT size_Land CHECK (LENGTH(LandName) >= 2)
Fehlerbericht -
ORA-00933: SQL-Befehl wurde nicht korrekt beendet
00933. 00000 -  "SQL command not properly ended"
*Cause:    
*Action:


----------



## kneitzel (11. Mai 2021)

Ein Constraint muss man mit DROP löschen und dann neu erzeugen.


----------



## labelleamelie (11. Mai 2021)

Sorry, habe noch eine Frage 

Ich habe das jetzt so gemacht, nun taucht der folgende Fehler auf:

Fehler beim Start in Zeile: 128 in Befehl -
INSERT INTO Land (LANDID, LANDNAME)
VALUES (01, 'Deutschland')
Fehlerbericht -
ORA-00001: Unique Constraint (DBSYS22.LAND_PK) verletzt

Verstehe nicht ganz genau was verletzt wird, sollte eigentlich stimmen


----------



## kneitzel (11. Mai 2021)

Vermutlich gibt es bereits einen Eintrag mit ID 1. Mach mal einfach ein:
SELECT * FROM Land WHERE LANDID = 1;


----------



## mihe7 (11. Mai 2021)

In dem Zusammenhang: es ist eher ungewöhnlich, eine ID eindeutig und den Namen als Primary Key zu deklarieren. Sicher, dass das so sein soll?


----------

