C'è molto di sbagliato nella tua affermazione.
A_EMP_ID CHAR 5 BYTE
manca il(..)
attorno al vincolo di lunghezza- Non vuoi assolutamente usare
CHAR
per iladmin_title
. UsaVARCHAR2
invece. DIVERSITY_TRAINING_CERT = 'N','Y'
non è un'espressione valida Probabilmente vuoidiversity_training_cert IN ('N','Y')
- Mentre
FOREIGN KEY (a_emp_id) REFERENCES admin(a_emp_id)
è sintatticamente corretto, non ha senso. Immagino tu voglia unmanager_id
o qualcosa di simile. E poi qualcosa comeFOREIGN KEY (manager_id) REFERENCES admin(a_emp_id)
.
In alternativa, potresti voler fare riferimento a unemployee
tavolo. In tal caso ila_emp_id
il tipo di dati deve corrispondere al tipo di colonna PK di quella tabella. -
CONSTRAINT ADMIN_END_DATE CHECK (<= 'ADMIN_START_DATE'),
ha tre errori:- una colonna non deve essere racchiusa tra virgolette singole. Quindi deve essere
admin_start_date
non'admin_start_date'
- un vincolo di controllo richiede una condizione adeguata.
<= admin_start_date
non è una condizione, devi confrontare la colonna con qualcosa. Presumibileadmin_end_date
- hai una virgola
,
dopo quell'espressione che è anche sbagliata.
- una colonna non deve essere racchiusa tra virgolette singole. Quindi deve essere
Mettendo tutto insieme ottieni:
CREATE TABLE admin
(
a_emp_id CHAR(5 BYTE) NOT NULL,
admin_start_date DATE DEFAULT SYSDATE NOT NULL,
admin_end_date DATE NULL,
diversity_training_cert CHAR(1 BYTE) DEFAULT 'N' NOT NULL,
admin_title VARCHAR2(40 BYTE) NULL,
CONSTRAINT admin_pk
PRIMARY KEY(a_emp_id),
CONSTRAINT admin_fk1
FOREIGN KEY (a_emp_id) REFERENCES admin(a_emp_id),
CONSTRAINT admin_diversity_cert
CHECK (diversity_training_cert IN ('N','Y')),
CONSTRAINT admin_end_date
CHECK ( admin_end_date <= admin_start_date)
);
Non correlato, ma:non c'è nemmeno assolutamente bisogno di scrivere tutto in maiuscolo.