Oracle 9i에서 FK를 선언하는 데 문제가 있습니다. SO 및 일부 온라인 문서 (예 : http://www.techonthenet.com/oracle/foreign_keys/foreign_delete.php)에서 실제 운행없이 여러 가지 예를 살펴 보았습니다. 링크에서와 유사한 구문을 사용하면 동일한 오류가 발생합니다.Oracle의 외래 키 제약 문제
Error at Command Line:19 Column:4
Error report:
SQL Error: ORA-02253: constraint specification not allowed here
02253. 00000 - "constraint specification not allowed here"
*Cause: Constraint specification is not allowed here in the statement.
*Action: Remove the constraint specification from the statement.
SQL 자체의 발췌 내용은 다음과 같습니다. "선 (19)"는 CONSTRAINT
키워드없이 시도하는 것은 내가없는 볼 수없는 것있는 오른쪽 괄호에 대한 오류를 생성, 또는 CONSTRAINT
CREATE TABLE Flight (
flight_no varchar2(10) NOT NULL,
airplane_id varchar2(20) NOT NULL
CONSTRAINT flight_airplane_id_fk FOREIGN KEY (airplane_id) REFERENCES Airplane (airplane_id)
ON UPDATE RESTRICT ON DELETE RESTRICT,
dept_date date NOT NULL,
...
로 시작하는 라인을 의미합니다.
추 신 : 내가 알고있는 UP UP RESTRICT는 Oracle의 기본 동작이지만 가능하면 명시 적으로 선호합니다.
정말 고마워. 다른 문서 (예 : http://www.dba-oracle.com/bk_on_delete_restrict_on_delete_no_action_tips.htm)를 참조했지만 'RESTRICT'이 유효한 인수가 아닌 부분을 놓쳤습니다. 'NO ACTION '인 것처럼 보이지만, 나는 그것을 사용하려고 시도 할 때 여전히 오류가 발생합니다. 간단히 말해, 나는 아이가 존재할 경우 아무 것도 지울 수 없도록하고 싶다. 제약 조건의 일부로 명시 적으로 지정하지 않으면'ON DELETE CASCADE'가 기본 동작으로 간주됩니까? – elithrar
@elithrar -'ON DELETE' 절을 지정하지 않으면, 디폴트는 자식 행이 존재하면 부모 행이 삭제되는 것을 방지합니다. 'ON DELETE SET NULL'은 부모가 삭제되어 고아를 만들면 자식의 부모 키를 'NULL'로 설정합니다. 'ON DELETE CASCADE'는 부모가 삭제되면 자식 레코드를 완전히 삭제합니다. 기본 동작을 얻는 유일한 방법은'ON DELETE' 절을 생략하는 것입니다.'ON DELETE NO ACTION '이 유효한 문법으로 보이지 않습니다. –
이렇게 지워집니다. 필자는 Postgres에 익숙해 졌기 때문에 오라클의 특성 중 일부가 나를 얻습니다. 기본 동작은 내가 한 것입니다. – elithrar