如何在我的sql语句末尾指定NOT NULL约束,因为我可以使用UNIQUE
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))
上面的创建字符串是使用XML文档中定义的模式动态构建的,该文档在自己的标记中定义了约束,因此我在sql字符串的最后处的约束。当我尝试指定NOT NULL时,我得到无效的标识符。
编辑:
下面是我的xml文档的结构。随着时间的推移,这个文件已经发展。我用它来生成DAO和Javabean样板代码,我将其剪切并粘贴到Eclipse中,并动态创建html表单(xml具有字段,大小和标签)。它还用于管理CRUD应用程序以维护后端。我最近添加了<tableConstraints>
标记,因为我想添加UNIQUE约束;可以在create语句的末尾指定UNIQUE约束。在后面的视线中,我应该在<contraint>
标记中添加<column>
标记。
<!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>
答案 0 :(得分:9)
在each individual列名称之后声明内联的非空约束:
CREATE TABLE test ( ...
NAME VARCHAR2(64),
PRODUCT_ID VARCHAR2(24) not null,
... )
如果您希望name the constraint explicitly,那么您也可以在每列之后执行此操作:
CREATE TABLE test ( ...
NAME VARCHAR2(64),
PRODUCT_ID VARCHAR2(24)
CONSTRAINT PRODUCT_ID_NN NOT NULL,
... )
您可以在创建表后修改列:
ALTER TABLE test
MODIFY product_id varchar2(24) not null;
根据您最近发布的XML脚本判断,最好的办法是在您的<notNull>
标记中添加子标记<column>
。有2个值 - 例如1, 0
您可以使用与判断某些内容是否为varchar相同的方式添加非空约束。
另一种方法是循环浏览<tableConstraints>
代码中的值,并在创建表格后运行多个alter table add constraint ...
或alter table modify ...
。
您建议在<constraint>
中添加<column>
子标记并在列级别创建所有子标记仅适用于single column constraints而不是您需要的多个。