Oracle SQL Inline NOT NULL命名约束

jef*_*eff 3 sql oracle11g

如何在我的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)

Ben*_*Ben 9

每个单独的列名称之后,内联声明非空约束:

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>并在列级别创建所有子标记仅适用于您需要的单列限制,而不是多个.