InterBase クイック スタート:Part II - スクリプトを使用したテーブルの作成

提供: InterBase

InterBase クイック スタート:Part II - データ定義 へ戻る


ここまでで、テーブルの作成方法は理解しているはずです。残りのテーブルを、SQL スクリプトを使用して作成していきましょう。テーブルについての構文をさらに吟味したい場合には、TABLES.SQL スクリプトを参照してください。たとえば、Employee テーブルの定義には、salary 列のための複雑な CHECK 制約が含まれています。

CHECK ( salary >=
(
       SELECT min_salary
       FROM   job
       WHERE  job.job_code = employee.job_code
       AND    job.job_grade = employee.job_grade
       AND    job.job_country = employee.job_country)
AND
salary <=
(
       SELECT max_salary
       FROM   job
       WHERE  job.job_code = employee.job_code
       AND    job.job_grade = employee.job_grade
       AND    job.job_country = employee.job_country))

この制約は、社員の給与が、その社員の仕事の最低給与(job_codejob_gradejob_country で指定される)よりも大きく、最大給与より小さいことを保証するためのものです。

Image 025.jpg TABLES.SQL スクリプトを実行する

  1. TABLES.SQL スクリプトを読み込みます
  2. クエリを実行します
    メモ: エラーが表示された場合、ヘルプのためにトラブルシューティング セクションを参照してください。
  3. テーブルが今存在していることを確認するには、IBConsole の左ペインにある テーブル 項目をクリックします。次のようなテーブルが表示されます:
TutorialTables3.png

バックアップの時間です

TABLES.SQL スクリプトを正常に実行できたら、データベースをバックアップするのに良いタイミングでしょう。

トラブルシューティング

ドメイン定義を入力している際にミスを犯していると、TABLES.SQL スクリプトを実行したり、テーブルを手動で定義した際に、エラー メッセージが表示されます。

エラーを識別するには:

  • スクリプトを実行した場合: ログ ファイルを見ます。ログ ファイルは、スクリプト ファイルと同じディレクトリにあります。
  • クエリを実行した場合: SQL 出力領域に、発生したエラーが表示されます。

どの場合でも、特定のテーブルに問題がある場合、このようなエラー メッセージが現れます:


Statement failed, SQLCODE = -607 
Dynamic SQL Error
-SQL error code = -607
-Invalid command
-Specified domain or source column does not exist

問題を解決するには、次のステップを行います:

  1. エラー メッセージを読みます。 この例の場合、指定されたドメインが存在していない、と告げています。 つまり、ドメイン名を入力する際に、おそらくエラーを犯したのでしょう。
  2. IBConsole の左ペインで、ドメインを選択します。
  3. 手動で定義したドメインが 4 つあるのが確認できるはずです(FIRSTNAMELASTNAMEEMPNODEPTNO)。ドメインの名前が正しいか確認します。大抵の場合、名前のミススペルです。
  4. 次のコマンドを入力、実行して、誤ったドメインをドロップします:
    DROP DOMAIN domain_name
  5. 適切な CREATE DOMAIN 文を使用して、ドメインを再度作成します。
  6. TABLES.SQL スクリプトを再び実行します。

まだ、エラーが確認できます:

  1. エラーに関係しているテーブルを識別します。
  2. このテーブルに対して定義されているドメインがいずれも、データベース内に含まれており、存在していることを確認してください。ある場合には、問題はおそらくドメインの定義にあります。特定のドメインの定義を吟味するには、次の行います:
    1. IBConsole の左ペインで、ドメインを選択します。
    2. 右ペインにあるドメイン名を右クリックし、プロパティ を選択します。
    3. メタデータ タブに切り替えます。
    4. ドメイン定義が正確であることを確認します。エラーが参照しているドメインやテーブルに対して、これを行います。

たとえば、これは、COUNTRYNAME ドメイン用のメタデータ タブです。

TutorialDomainMetadata.png

テーブルの変更

Department テーブルの定義を見てみます。

  1. IBConsole の左ペインで、テーブルを選択します。
  2. 右ペインにある Department テーブルを右クリックし、プロパティ を選択します。
  3. メタデータ タブに切り替えます。 次の図のようなものが表示されているはずです:
    TutorialTableMetadata.png

既存のテーブルの構造は、ALTER TABLE 文で変更できます。 テーブルを変更するための、簡素化された構文は次の通りです:

ALTER TABLE table_name 
  <operation1> [, 
  <operation2>, ]
operation = ADD column 
| ADD table_constraint 
| ALTER [column] col_name <alt_col_clause>
| DROP column
| DROP CONSTRAINT constraint_name

制約は、作成時に名前を割り当てた場合、どのようにドロップできるか、注意してください。ALTER TABLE 文の定義の詳細については、「ALTER TABLE」を参照してください。

Image 025.jpg Department テーブルを変更する

このセクションでは、新しい列を 5 つと、外部キー制約 2 つを、Department テーブルに追加していきます。

  1. 対話型 SQL ウィンドウを開き、次の文を入力します:
    ALTER TABLE Department
      ADD head_dept DEPTNO,
      ADD mngr_no EMPNO,
      ADD budget BUDGET,
      ADD location VARCHAR(15),
      ADD phone_no PHONENUMBER DEFAULT '555-1234',
      ADD FOREIGN KEY (mngr_no) REFERENCES employee (emp_no) ON DELETE CASCADE ON
      UPDATE CASCADE,
      ADD CONSTRAINT fkdept FOREIGN KEY (head_dept) REFERENCES department (dept_no)
      ON DELETE CASCADE ON UPDATE CASCADE
    
  2. Department テーブルの メタデータ を再び開き(「テーブルを変更する」セクションのステップを参照)、定義における違いを確認します:
    TutorialTableMetadata2.png

さらなるトラブルシューティング

テーブルの変更時、またはデータの挿入時、エラー メッセージを受け取った場合、メタデータ タブを使用して調べます。

  • 手入力したテーブルそれぞれの定義を吟味し、このチュートリアルが提供しているコード スニペットと比較します。
  • 問題を見つけたら、テーブルをドロップしてそれを再構築するか、ALTER TABLE 文を使用して、列をドロップし(ALTER TABLE table_name DROP column_name)、それからその列を再び正しい定義を使用して追加します(ALTER TABLE table_name ADD column_name column_def)。テーブルそのものの名前を打ち間違えていた場合、テーブルをドロップして(DROP TABLE table_name)、再度作成します。

次は: