Oracle SQL-Inline-not NULL-Einschränkung benannt
wie kann ich festlegen, dass eine not NULL contraint am Ende meiner sql-Anweisung, wie kann ich mit einem EINDEUTIGEN
CREATE TABLE test (
WORKFLOW_CLASS_ID VARCHAR2(24),
DEPT_OWNER VARCHAR2(3),
NAME VARCHAR2(64),
PRODUCT_ID VARCHAR2(24),
CONSTRAINT WF_WORKFLOW_CLASS_pk PRIMARY KEY (WORKFLOW_CLASS_ID),
CONSTRAINT dup_workflow UNIQUE (DEPT_OWNER, NAME),
CONSTRAINT not_null NOT NULL(PRODUCT_ID))
Den oben erstellen Zeichenfolge erstellt, die dynamisch mit definierten schema in einem XML-Dokument definiert, die Einschränkungen in seinem eigenen tag, also ich Wende auf die Constraints werden am Ende des sql-Strings. Wenn ich versuche, geben Sie NICHT NULL ist, bekomme ich Ungültiger Bezeichner.
BEARBEITEN:
Unten ist die Stuktur von meinem xml-Dokument. Diese Datei hat sich weiterentwickelt und im Laufe der Zeit. Ich es verwenden, um zu generieren DAO-und Javabean-boilerplate-code, den ich Ausschneiden und einfügen in Eclipse und für die dynamische Erstellung von html-Formularen (xml-Feld, Größe und Beschriftung). Es ist auch für einen Admin CRUD-Anwendung für die Pflege der backend. Vor kurzem habe ich die <tableConstraints>
tag, da wollte ich hinzufügen, UNIQUE-Einschränkungen; UNIQUE-Einschränkung angegeben werden kann, am Ende der create-Anweisung. In hind-Sicht, ich sollte Hinzugefügt haben ein <contraint>
tag in meinem <column>
tag.
<!DOCTYPE schema PUBLIC "SchemaId" "../../schema.dtd">
<schema>
<tableName>WF_WORKFLOW_CLASS</tableName>
<javaBean>WorkflowClass</javaBean>
<tableAlias>wfc</tableAlias>
<tableTitle>Workflow process definitions by department</tableTitle>
<tableConstraints>, CONSTRAINT dup_workflow UNIQUE (DEPT_OWNER, NAME), CONSTRAINT not_null NOT NULL(PRODUCT_ID)</tableConstraints>
<oneToMany>
<attName>work_item_list</attName>
<attName>work_action_list</attName>
</oneToMany>
<column>
<name>WORKFLOW_CLASS_ID</name>
<type>VARCHAR2</type>
<size>24</size>
<label>Work flow Class Unique ID</label>
</column>
<primaryKey>
<name>WORKFLOW_CLASS_ID</name>
<type>timestamp</type>
</primaryKey>
<foreignKey>
<name>ADMIN_BY</name>
<table>EBITPSV.PS_NAMES_V009</table>
<lookUpKey>badge</lookUpKey>
<returnField>lname</returnField>
</foreignKey>
</schema>
- Sie können nicht erstellen Sie inline-am Ende der Erstellung der Tabelle. Sind Sie in der Lage zu tun, viele
alter table add constraint
am Ende?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen not null-constraint deklariert ist inline, nach jede einzelne Spalte-name:
Wenn Sie möchten, name der Einschränkung ausdrücklich du dann auch nach jeder Spalte:
Können Sie natürlich ändern Sie die Spalte, nach der die Tabelle erstellt wurde:
Update:
Beurteilung durch die kürzlich gepostete XML-Skript, das beste, was zu tun wäre, eine sub-tag
<notNull>
zu Ihrem<column>
tag. Mit 2 Werten - z.B.1, 0
man könnte hinzufügen einer not null-Einschränkung in der gleichen Weise, wie Sie sich entscheiden, ob etwas ein varchar oder nicht.Andere Weise würde es möglich sein wird, ist eine Schleife über die Werte in Ihrem
<tableConstraints>
tag und führen Sie mehrerealter table-add constraint ...
oderalter table ändern ...
nachdem Sie die Tabelle erstellt haben.Vorschlag, den Sie hinzufügen
<constraint>
sub-tag in<column>
und erstellen Sie alle in der Spalte Stufe wird nur für einzelne Spalten-Integritätsregeln nicht mehrere, wie Sie benötigen hier.