plsql oracle检查约束错误
Posted
技术标签:
【中文标题】plsql oracle检查约束错误【英文标题】:plsql oracle check in constraint error 【发布时间】:2011-02-24 22:14:53 【问题描述】:我收到此错误:ORA-00904: "M": invalid identifier --> if I put ('M','F') //single quotes 我得到这个错误信息:PLS-00103: Encountered the symbol "M" when expecting 以下之一: * & = - + ; > at in 是 mod 余数不是 rem 返回 返回 或 != 或 ~= >= 和 or 喜欢LIKE2_LIKE4_LIKEC_之间成使用||多组批量 成员 SUBMULTISET_ --> 如果我删除约束,表将正常创建
这是我的代码
EXECUTE IMMEDIATE 'CREATE TABLE dependents
( Id NUMBER(6)
, FirstName VARCHAR2(20)
, LastName VARCHAR2(25)
CONSTRAINT dep_last_name_nn NOT NULL
, Birthdate Date
, Relation VARCHAR2(20)
, Gender char(1)
, RelativeId Number(6)
, CONSTRAINT pk_dependent primary key (Id)
, CONSTRAINT ck_gender CHECK(Gender in("F","M"))
)';
【问题讨论】:
【参考方案1】:假设您使用的是相对较新的 Oracle 版本,我会使用新的字符串转义语法
EXECUTE IMMEDIATE q'[CREATE TABLE dependents
( Id NUMBER(6)
, FirstName VARCHAR2(20)
, LastName VARCHAR2(25)
CONSTRAINT dep_last_name_nn NOT NULL
, Birthdate Date
, Relation VARCHAR2(20)
, Gender char(1)
, RelativeId Number(6)
, CONSTRAINT pk_dependent primary key (Id)
, CONSTRAINT ck_gender CHECK(Gender in('F','M'))
)]';
如果您不想使用新语法,则需要两个连续的单引号,而不是双引号
EXECUTE IMMEDIATE 'CREATE TABLE dependents
( Id NUMBER(6)
, FirstName VARCHAR2(20)
, LastName VARCHAR2(25)
CONSTRAINT dep_last_name_nn NOT NULL
, Birthdate Date
, Relation VARCHAR2(20)
, Gender char(1)
, RelativeId Number(6)
, CONSTRAINT pk_dependent primary key (Id)
, CONSTRAINT ck_gender CHECK(Gender in(''F'',''M''))
)';
然而,我要提醒的是,动态创建对象通常是一个坏主意——通常有更好的方法来完成这类事情。
【讨论】:
【参考方案2】:oracle 引擎需要“F”、“M”。由于它嵌入在字符串中,因此您必须对引号使用类似 pascal 的转义,试试这个:
EXECUTE IMMEDIATE 'CREATE TABLE dependents
( Id NUMBER(6)
, FirstName VARCHAR2(20)
, LastName VARCHAR2(25)
CONSTRAINT dep_last_name_nn NOT NULL
, Birthdate Date
, Relation VARCHAR2(20)
, Gender char(1)
, RelativeId Number(6)
, CONSTRAINT pk_dependent primary key (Id)
, CONSTRAINT ck_gender CHECK(Gender in(''F'',''M''))
)';
它会随心所欲地运行。
【讨论】:
【参考方案3】:更改 CHECK 约束列表以使用单引号:
CONSTRAINT ck_gender CHECK(Gender in(''F'',''M''))
Oracle 中的字符常量用单引号括起来,而不是双引号。
【讨论】:
以上是关于plsql oracle检查约束错误的主要内容,如果未能解决你的问题,请参考以下文章