- ベストアンサー
SQLにおける変数の宣言と代入の仕方
- SQLで変数の宣言や代入を行う方法について説明します。
- PostgreSQL8.1を使用している場合、SQLで変数を宣言し、重複して記述を避ける方法を知りたいです。
- 関連キーワード: SQL assign, SQL variable
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
タイトルが悪すぎると思いますけど。 「同じような制約を何度も定義する必要がある」ということ自体が、問題なのでは? 同じような定義をたくさん行う必要があるというなら、SQLの動的実行(SQLを文字列で組み立てて前処理(prepare)して実行(execute))をすればいいのでは? その時に「星座名が必要」、「手作業でやったらタイプミスや重複して書き込むといった人員的なミスがある」といったことなら、事前に星座表(星座名で一意にしておく)を作っておいて、その検索結果をSQLの組み立てに利用(文字連結していく)すればいいと思いますよ。 そもそも、星座表を参照する参照制約にすれば、検査制約で星座名をだらだらと書く必要はないですけど。
その他の回答 (1)
- yamada59
- ベストアンサー率74% (29/39)
ドメインを使うといいと思います。 ドメインというのは既存のデータ型に対して制約を加えて別の名前を付けたものです。 CREATE DOMAIN zodiac AS text CHECK (VALUE IN ('Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo', 'Libra', 'Scorpio', 'Sagittarius', 'Capricorn', 'Aquarius', 'Pisces')); CREATE TABLE t ( c zodiac ); ---- => INSERT INTO t VALUES ('Aries'); INSERT 0 1 => INSERT INTO t VALUES ('foo'); ERROR: value for domain zodiac violates check constraint "zodiac_check" ---- もしくは、列挙型を使ってもいいと思います。こちらのほうがより適切かもしれないです。 CREATE TYPE zodiac AS ENUM ('Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo', 'Libra', 'Scorpio', 'Sagittarius', 'Capricorn', 'Aquarius', 'Pisces'); CREATE TABLE t ( c zodiac ); ---- => INSERT INTO t VALUES ('Aries'); INSERT 0 1 => INSERT INTO t VALUES ('foo'); ERROR: invalid input value for enum zodiac: "foo" LINE 1: INSERT INTO t VALUES ('foo'); ----
お礼
星座名自体も、別に表として保持するというのは、思いつきませんでした。今頃になってしまいましたが、ありがとうございました。