• 締切済み

SQL における変数の宣言と代入の仕方

SQL における変数の宣言と代入の仕方 データベース言語でどの様なことが出来るものかと思い、postgreSQL を独りでいじり始めました。入力されたデータのチェックをきちんとしないといけないのだな、と思い、 --- CONSTRAINT rangeMin check (policyMin in (-3,-2,-1,0,1,2,3,4)), CONSTRAINT rangeMax check (policyMax in (-3,-2,-1,0,1,2,3,4)), --- と記述したのですが、「-3 から 4」という部分を重複して記述するのを避けたいので、 変数を宣言するなり何なりして何とかしたいのですが、 "SQL assign" やら "SQL variable" といったキーワードで色々検索しても、どうしても有用な情報に行き当たりませんでした。なにかしらのヒントを頂ければ幸いです。 宜しくお願いいたします。

みんなの回答

  • gacky-79
  • ベストアンサー率100% (14/14)
回答No.3

変数宣言というよりは、重複した制約の宣言を避けるという観点ですが、2案あります。 1. 制約の条件を関数で宣言しておいて、その関数を CHECK 制約で使う方法 CREATE FUNCTION check_policy(integer) RETURNS bool AS 'SELECT $1 in (-3,-2,-1,0,1,2,3,4)' LANGUAGE sql IMMUTABLE STRICT; CONSTRAINT rangeMin check (check_policy(policyMin)) 2. 条件込みの DOMAIN (定義域) を作成し、rangeMin/Max の型に、この DOMAIN を使う方法 CREATE DOMAIN checked_integer AS integer CHECK (VALUE in (-3,-2,-1,0,1,2,3,4));

参考URL:
http://www.postgresql.jp/document/current/html/sql-createdomain.html
回答No.2

参照制約を使い、外部キーにすればいいのでは?

回答No.1

PosgreSQLのバージョンを、Postgre 8.3といったレベルまで最低限、明記するようにしてください。 検査制約は、 check(式) という構文ですから、 (policyMax between -3 and 4) とか、 (policyMax>=-3 and policyMax<=4) といった条件を指定すればいいのでは?

uemurm
質問者

補足

調べてみたところ、下記のとおりでした。 --- Welcome to psql 8.3.1 (server 8.1.11), the PostgreSQL interactive terminal. WARNING: You are connected to a server with major version 8.1, but your psql client is major version 8.3. Some backslash commands, --- 失礼致しました。 > (policyMax>=-3 and policyMax<=4) なるほど、確かにこちらの方が素直な書き方ですね。ありがとうございます。 因みに、下記の場合は如何でしょうか? --- CONSTRAINT myZodiac check ( myZodiac in ('Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo', 'Libra', 'Scorpio', 'Sagittarius', 'Capricorn', 'Aquarius', 'Pisces') ), CONSTRAINT yrZodiac check (yourZodiac in ('Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo', 'Libra', 'Scorpio', 'Sagittarius', 'Capricorn', 'Aquarius', 'Pisces', 'Air', 'Water', 'Fire', 'Earth',) ) --- お知恵を貸して頂ければ幸いです。 宜しくお願いいたします。

関連するQ&A