如何在我的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))
Run Code Online (Sandbox Code Playgroud)
上面的create字符串是使用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>
Run Code Online (Sandbox Code Playgroud)
在每个单独的列名称之后,内联声明非空约束:
CREATE TABLE test ( ...
NAME VARCHAR2(64),
PRODUCT_ID VARCHAR2(24) not null,
... )
Run Code Online (Sandbox Code Playgroud)
如果您希望明确命名约束,那么您也可以在每列之后执行此操作:
CREATE TABLE test ( ...
NAME VARCHAR2(64),
PRODUCT_ID VARCHAR2(24)
CONSTRAINT PRODUCT_ID_NN NOT NULL,
... )
Run Code Online (Sandbox Code Playgroud)
您可以在创建表后修改列:
ALTER TABLE test
MODIFY product_id varchar2(24) not null;
Run Code Online (Sandbox Code Playgroud)
您最近发布的XML脚本来看做的最好的事情将是一个子标签添加<notNull>
到您的<column>
标签.使用2个值 - 例如,1, 0
您可以使用与判断某些内容是否为varchar相同的方式添加非空约束.
另一种方法是循环<tableConstraints>
标记中的值并运行多个alter table add constraint ...
或alter table modify ...
在创建表之后.
您建议在列级别添加<constraint>
子标记<column>
并在列级别创建所有子标记仅适用于您需要的单列限制,而不是多个.