oracle - plsql oracle检查约束错误

标签 oracle plsql ora-00904 check-constraints

我收到此错误:ORA-00904:“M”:无效标识符 --> 如果我输入 ('M','F')//singlequote 我收到此错误消息:PLS-00103:在预期以下情况之一时遇到符号“M”: * & = - + ; 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")) 


    )';         

最佳答案

假设您使用的是相对较新版本的 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'')) 
    )';         

但是,我要提醒大家,动态创建对象通常是一个坏主意——通常有更好的方法来完成此类事情。

关于oracle - plsql oracle检查约束错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5111180/

相关文章:

oracle - Pragma UDF 如何工作?

.net - 更改连接字符串 .NET Oracle 错误

oracle - PL/SQL 函数返回无值

sql - 错误(11,1): PLS-00103: Encountered the symbol “DECLARE”

sql - Oracle 包含提供无效的标识符 ORA-00904

sql - 对分区表使用分区索引

java - 如何从oracle数据库获取信息到java bean?

sql - 在 sqlplus 中访问绑定(bind)变量

sql - 这个合并语句有什么问题?