Oracle SQL内联非空命名约束

Oracle SQL内联非空命名约束,sql,oracle11g,Sql,Oracle11g,如何在sql语句末尾指定一个NOTNULL CONTAINT,就像使用唯一的 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 (W

如何在sql语句末尾指定一个NOTNULL CONTAINT,就像使用唯一的

 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)) 
上面的create字符串是使用XML文档中定义的模式动态构建的,它在自己的标记中定义了约束,因此我在sql字符串的末尾添加了约束。当我尝试指定NOTNULL时,得到的标识符无效

编辑: 下面是我的xml文档的结构。随着时间的推移,此文件已不断演变。我使用它生成DAO和Javabean样板代码,将其剪切并粘贴到Eclipse中,并动态创建html表单(xml具有字段、大小和标签)。它还用于维护后端的管理CRUD应用程序。我最近添加了
标记,因为我想添加唯一的约束;可以在create语句的末尾指定UNIQUE约束。事后看来,我应该在我的
标签中添加一个
标签

<!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>

工作流类
工人阶级
世界粮食理事会
按部门划分的工作流流程定义
,约束重复工作流程唯一(部门所有者,名称),约束不为空不为空(产品ID)
工作项清单
工作行动清单
工作流\u类\u ID
瓦查尔2
24
工作流类唯一ID
工作流\u类\u ID
时间戳
管理员
EBITPSV.PS\U名称\U V009
徽章
名字

在列名之后内联声明NOTNULL约束:

CREATE TABLE test ( ... 
        NAME VARCHAR2(64), 
        PRODUCT_ID VARCHAR2(24) not null,
        ... )
如果您希望,则在每列之后也要这样做:

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脚本判断,最好的做法是在
标记中添加一个子标记
。对于2个值-例如
1,0
,您可以使用与确定某个内容是否为varchar相同的方式添加NOTNULL约束

另一种可能的方法是循环使用
标记中的值,并在创建表后多次运行


您建议在
中添加
子标记,并在列级别创建它们,这只适用于此处所需的非多个标记。

您不能在表创建结束时以内联方式创建它们。你能在最后做很多
altertableaddconstraint
吗?听起来我不能像唯一的constraint那样做。我编辑了我的问题,进一步解释了我为什么要在最后声明。@jeff,我已经更新了我的答案,包括一些你可能会发现有用的链接。很好的建议。这个标签听起来是目前最有希望的。