sql >> データベース >  >> RDS >> Oracle

SQLエラー:ORA-00907:右括弧がありません。

    あなたの発言には多くの間違いがあります。

    • A_EMP_ID CHAR 5 BYTE (..)がありません 長さの制約の周り
    • CHARを使用したくないことは間違いありません。 admin_titleの場合 。 VARCHAR2を使用します 代わりに。
    • DIVERSITY_TRAINING_CERT = 'N','Y' は有効な式ではありません。おそらくdiversity_training_cert IN ('N','Y')が必要です
    • FOREIGN KEY (a_emp_id) REFERENCES admin(a_emp_id) 構文的に正しいので、意味がありません。 manager_idが必要だと思います または同様のもの。そして、FOREIGN KEY (manager_id) REFERENCES admin(a_emp_id)のようなもの 。
      または、employeeを参照することを意図している場合もあります。 テーブル。その場合、a_emp_id データ型は、そのテーブルのPK列の型と一致する必要があります。
    • CONSTRAINT ADMIN_END_DATE CHECK (<= 'ADMIN_START_DATE'), 3つのエラーがあります:

      • 列を一重引用符で囲むことはできません。したがって、admin_start_dateである必要があります 'admin_start_date'ではありません
      • チェック制約には適切な条件が必要です。 <= admin_start_date は条件ではありません。列を何かと比較する必要があります。推定されるadmin_end_date
      • コンマがあります, その表現の後も間違っています。

    すべてをまとめると、次のようになります。

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

    無関係ですが、すべてを大文字で書く必要もまったくありません。



    1. どのMySQL照合を比較しますか? éとeは等しいですか?

    2. 1.22にアップグレードしようとしたときにMediaWikiDB接続エラーが発生しました

    3. Postgresデータベースからすべての関数を削除します

    4. SQL Serverで外部キーを作成する方法(T-SQLの例)