8

私はオラクルを初めて使用します。次のクエリを使用して2つのテーブルを作成しました。

CREATE TABLE employee
(
 emp_name VARCHAR(20) NOT NULL,
 street VARCHAR(50) NOT NULL,
 city VARCHAR(20) NOT NULL,
 PRIMARY KEY(emp_name)
)

CREATE TABLE company
(
 comp_name VARCHAR(20) NOT NULL,
 city VARCHAR(20) NOT NULL,
 PRIMARY KEY(comp_name)
)

今、私はいくつかの外部キーを使用して別のテーブルを作成しようとしています、

CREATE TABLE works
(
emp_name varchar(20) NOT NULL,
comp_name varchar(20) NOT NULL,
salary  int(10) NOT NULL,
FOREIGN KEY(emp_name) REFERENCES employee(emp_name),
FOREIGN KEY(comp_name) REFERENCES company(comp_name)
)

エラーの取得:ORA-00907:右括弧がありません

私も試してみました

CREATE TABLE works
(
emp_name varchar(20) NOT NULL,
comp_name varchar(20) NOT NULL,
salary  int(10) NOT NULL,
constraint wemployee FOREIGN KEY(emp_name) REFERENCES employee(emp_name),
constraint wcompany FOREIGN KEY(comp_name) REFERENCES company(comp_name)
)

しかし、同じエラーが発生します。誰かが私がどこで間違いをしているのか教えてもらえますか?

4

4 に答える 4

6

私はオラクルの専門家ではありませんが、で指定することはできます(10)salary int(10) NOT NULL

于 2012-10-08T02:06:54.080 に答える
2

制約付きのテーブルを作成するには、次の2つの方法があります。

1)

   create table department(
   deptno number(5) primary key,
   deptname varchar2(30),
   empno number(5) references emp(empno));

2)

   create table department(
   deptno number(5),
   deptname varchar2(30),
   empno number(5),
   constraint pkey_deptno primary key(deptno),
   constraint fkey_empno foreign key(empno) references Emp(empno));  
于 2013-06-13T09:22:59.557 に答える
2

1:idとtestdataの2つの列を持つ「test」というテーブルが必要です。(これはばかげた簡単な例なので、idに制約を指定する必要はありません。)

create table test (id number, testdata varchar2(255));

2:次に、テストテーブルのID番号に使用するシーケンスを作成します。

create sequence test_seq 
start with 1 
increment by 1 
nomaxvalue;

「startwith1」を任意の番号に変更できます(たとえば、テーブルにすでに213エントリがあり、これを214番目のエントリに使用し始めたい場合は、「startwith214」に置き換えます)。「incrementby1」句がデフォルトであるため、省略できます。ID番号の間でn-1の数値をスキップする場合は、「nによる増分」に置き換えることもできます。「nomaxvalue」は、ある時点でリセットするのではなく、永久に増分し続けるように指示します。i(Oracleには、取得できるサイズに制限があると確信していますが、その制限が何であるかはわかりません)。

3:これで、シーケンスの次の番号をid列に自動的に挿入するトリガーを作成する準備が整いました。

create trigger test_trigger
before insert on test
for each row beginselect test_seq.nextval into :new.id from dual;
end;
/
于 2013-07-14T18:34:14.973 に答える
1

テーブル作成ステートメントの残りの部分とインラインでインデックスを作成するときは、次のFOREIGN KEY部分を削除してみてください。

CREATE TABLE works
(
emp_name varchar(20) NOT NULL,
comp_name varchar(20) NOT NULL,
salary  int(10) NOT NULL,
emp_name REFERENCES employee(emp_name),
comp_name REFERENCES company(comp_name)
)

詳細については、次の質問を参照してください。

ORA-00907:右括弧がありません

于 2012-10-08T02:06:36.593 に答える