2

私は現在 SQL plus で実行しており、2 つのテーブルがあります。

部門 ( nm_employees ) に値を入力し、その値が部門 2 ( nm_departments ) にない場合、SQL で PL を記述して部門 2 に値を入力する必要があります。コードを書きましたが、正しくありません。何か案は?

CREATE TABLE nm_employees(
name varchar(20),
dept varchar(20),
CONSTRAINT empPK PRIMARY KEY (dept)
);

CREATE TABLE nm_departments(
dept2 varchar(20),
CONSTRAINT departments FOREIGN KEY (dept2) REFERENCES nm_employees(dept)
);

INSERT INTO nm_employees values ('nancy','engineer');
IF NOT EXISTS (SELECT dept FROM nm_employees where dept='engineer'
)
THEN    
INSERT INTO nm_departments values ('engineer');
END IF;
4

1 に答える 1

6

最初のポイントは、SQL に派手な逆コンマを使用しないことです。標準の一重引用符 ( ') を使用します。

2 番目のポイントは、IF..THEN がトリガーなどのプログラミング ブロックでのみ使用されることです。通常の SQL バッチでは、INSERT...SELECT.

CREATE TABLE nm_employees(
name varchar(20),
dept varchar(20),
CONSTRAINT empPK PRIMARY KEY (dept)
);

CREATE TABLE nm_departments(
dept2 varchar(20),
CONSTRAINT departments FOREIGN KEY (dept2) REFERENCES nm_employees(dept)
);


INSERT INTO nm_employees values ('nancy','engineer');

INSERT INTO nm_departments
select 'engineer' from dual
WHERE NOT EXISTS (SELECT dept FROM nm_departments where dept2='engineer');


また、 EXISTS テストに間違ったテーブルがあり、nm_employeesではなくnm_departmentsをチェックインする必要があります。

価値のあるものとして、これは演習のように見えるので、ここにいくつかの追加のポインタがあります:

  1. テーブル間の関係は次のようEmployee [M] ->--|- [1] Departmentになります。つまり、従業員は 1 つの部門に属し、各部門には多くの従業員がいます。
  2. 外部キーは、部門を参照する従業員テーブルにある必要があります。これは、従業員のレコードの前に部門テーブルのレコードを作成する必要があることも意味します
  3. 従業員の主キー (代理キーを使用しない場合) は、(name, dept) の組み合わせにする必要があります。現在定義されているように、部門ごとに 1 人の従業員しか持てません
于 2012-11-22T23:59:41.783 に答える