with references poner modificar constraint como check oracle plsql ora-00904 check-constraints

oracle - references - unique constraint plsql



plsql orĂ¡culo check in constraint error (3)

Cambie la lista de restricciones CHECK para usar comillas simples:

CONSTRAINT ck_gender CHECK(Gender in(''''F'''',''''M''''))

Las constantes de caracteres en Oracle están encerradas en comillas simples, no en comillas dobles.

Obtengo este error: ORA-00904: "M": identificador inválido -> si puse (''M'', ''F'') // cita simple, recibí este mensaje de error: PLS-00103: Encontré el símbolo "M" cuando se espera uno de los siguientes: * & = - +; </> en in es mod remainder no rem return return <> o! = o ~ => = <= <> y / o LIKE2_ LIKE4_ LIKEC_ entre en usando || miembro masivo multiset SUBMULTISET_ -> si elimino la restricción, la tabla se creará normalmente

este es mi código

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")) )'';


El motor de oráculo espera ''F'', ''M''. Dado que está incrustado en una cadena, debe usar escape pascal para comillas, intente esto:

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'''')) )'';

Se ejecutará como lo desee.


Suponiendo que está utilizando una versión relativamente reciente de Oracle, utilizaría la nueva sintaxis de escape de cadenas

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'')) )]'';

Si no desea utilizar la nueva sintaxis, necesitará dos comillas simples consecutivas, no una comilla doble

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'''')) )'';

Sin embargo, advertiría que la creación dinámica de objetos generalmente es una mala idea; en general, hay mejores formas de lograr este tipo de cosas.