2016-04-18 11 views
0

Ich habe bereits meine Tabellen voller Daten, ich versuche, eine Einschränkung hinzuzufügen, nur um Buchstaben in das Attribut, das ich als studentfname benannt habe eingegeben werden. Ich habe verschiedene REGEXP ausprobiert, kann aber anscheinend keine zum Funktionieren bringen, ohne einen Fehler beim Einfügen zu bekommen.Oracle Constraint Nur Buchstaben SQL REGEXP

Ich bin nicht sicher, ob es ein Syntaxfehler oder was ist!

Edit: Hier ist, was ich versucht habe und der Fehler Ich erhalte:

ALTER TABLE STUDENT 
ADD CONSTRAINT 
check_name 
CHECK(regexp_like(studentfname,'^[A-Za-z''-]+$')); 

Fehler:

QL Error: ORA-02293: cannot validate (JEIGH7.CHECK_NAME) - check constraint violated 
02293. 00000 - "cannot validate (%s.%s) - check constraint violated" 
*Cause: an alter table operation tried to validate a check constraint to 
      populated table that had nocomplying values. 
*Action: Obvious 
+1

Bearbeiten Sie Ihre Frage, um uns zu zeigen, was Sie versucht haben, einschließlich der vollständigen Anweisung, die Sie zum Hinzufügen der Einschränkung verwendet haben, sowie den Fehler beim Erstellen der Einschränkung oder Einfügen von Daten. Verfügen Sie über vorhandene Daten, die nicht mit dem Muster übereinstimmen? Wenn ja, was möchten Sie tun - korrigieren Sie diese Daten oder lassen Sie die Einschränkung ignorieren? –

+0

Hallo, ich habe alle vorhandenen Daten überprüft und keine stimmt nicht mit dem Muster überein. –

+3

Offenbar gibt es mindestens eine Zeile, die ** nicht ** validiert. Ich glaube Oracle ist mehr als dein Anspruch, dass es keine ungültigen Daten gibt. –

Antwort

1

Anscheinend können Sie versuchen, diese unter Abfrage auszuführen, wenn alle nicht integral überprüfen Daten befinden sich in der oben genannten Spalte, die Sie daran hindert, eine Prüfbeschränkung anzuwenden. Sobald Sie die Ausgabe von dieser Abfrage erhalten, versuchen Sie, die Zeile AKTUALISIEREN/ZU LÖSCHEN und wenden Sie dann die Einschränkung an. Hoffe das hilft.

+1

Ihre Antwort ist gut (und ich upvoted), aber ich bin mir nicht sicher, warum Sie eine Unterabfrage verwenden. Es ist nicht notwendig und könnte das OP verwirren. –

+0

Hoppla, mein Fehler. Ich habe beim Posten etwas anderes nachgedacht. Ich werde es korrigieren. Danke für den Fang. –

+0

Danke, stellte sich heraus, es gab einige Leerzeichen nach Daten, die eingegeben wurden, alle sortiert. –