
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" といったキーワードで色々検索しても、どうしても有用な情報に行き当たりませんでした。なにかしらのヒントを頂ければ幸いです。
宜しくお願いいたします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
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/s …
No.1
- 回答日時:
PosgreSQLのバージョンを、Postgre 8.3といったレベルまで最低限、明記するようにしてください。
検査制約は、
check(式)
という構文ですから、
(policyMax between -3 and 4)
とか、
(policyMax>=-3 and policyMax<=4)
といった条件を指定すればいいのでは?
この回答への補足
調べてみたところ、下記のとおりでした。
---
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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
postgreSQLのint型は桁数指定が...
-
PostgreSQLでのクエリ登録
-
新規作成したPostgresqlデータ...
-
sqlの中で、 例えば条件句で AN...
-
SQLにて指定日付より前、かつ最...
-
Windows10がインストールできま...
-
postgresqlでのトランザクショ...
-
select文の書き方で分からない...
-
SQLでUPSERTを一度に複数行やる...
-
エクセルVBAでUWSCを使う
-
エクセルで縦のカラムデータを...
-
PostgresSQLの環境設定について
-
postgresql についてです
-
列が存在しないと言われる
-
PostgreSQLの初期設定で質問で...
-
”テーブル”恐い
-
iPhoneのステータスバーのキャ...
-
iphoneのVRゴーグルについて
-
Postgreのupdateコマンドでエラー
-
postgresqlのtableのカラムの型...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
postgresql についてです
-
自治会総会の成立要件について
-
postgreSQLのint型は桁数指定が...
-
エクセルで縦のカラムデータを...
-
SQLにて指定日付より前、かつ最...
-
PostgreSqlでFunctionの作成に...
-
SQLでUPSERTを一度に複数行やる...
-
列が存在しないと言われる
-
PostgreSQLについて教えてくだ...
-
plgファイルの開き方
-
select文の書き方「半角カナ+...
-
postgresqlでのトランザクショ...
-
PostgresSQLの環境設定について
-
select文の書き方で分からない...
-
新規作成したPostgresqlデータ...
-
Windows10がインストールできま...
-
Windows10でQuickTimeがインス...
-
Postgreのupdateコマンドでエラー
-
PostgreSQL14.6のSSL対応について
-
PostgressからMySQL(MariaDB)...
おすすめ情報