Oracle SQL内联非空命名约束
如何在sql语句末尾指定一个NOTNULL CONTAINT,就像使用唯一的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
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,我已经更新了我的答案,包括一些你可能会发现有用的链接。很好的建议。这个标签听起来是目前最有希望的。