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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Access(アクセス) Access VBAで条件を追加する(書き込む)場所 2 2022/03/23 12:05
- SQL Server これをSQL文で出来るでしょうか? 1 2023/03/26 02:16
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP PHP MySql ページング 2 2022/09/20 06:38
- SQL Server SQL 期間内の実施数を合計したい 2 2023/03/03 22:28
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
postgreSQLのint型は桁数指定が...
-
列が存在しないと言われる
-
postgresql についてです
-
エクセルVBAでUWSCを使う
-
SQLにて指定日付より前、かつ最...
-
自治会総会の成立要件について
-
PostgreSqlでFunctionの作成に...
-
SQLでUPSERTを一度に複数行やる...
-
plgファイルの開き方
-
指定の日付以前かつ最新を取得...
-
数値が定期的にあらわれる文字...
-
SQL 複数条件での検索について
-
エクセルで縦のカラムデータを...
-
Windows10でQuickTimeがインス...
-
【PostgreSQL】行の値の並びを...
-
PostgreSQLについて教えてくだ...
-
【HTML】テーブルの中にテーブ...
-
shellからpostgresqlへの変数の...
-
Windows10がインストールできま...
-
python3.12のインストール方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
自治会総会の成立要件について
-
postgresql についてです
-
SQLにて指定日付より前、かつ最...
-
postgreSQLのint型は桁数指定が...
-
エクセルで縦のカラムデータを...
-
列が存在しないと言われる
-
SQLでUPSERTを一度に複数行やる...
-
plgファイルの開き方
-
PostgreSqlでFunctionの作成に...
-
PostgreSQLについて教えてくだ...
-
select文の書き方「半角カナ+...
-
新規作成したPostgresqlデータ...
-
Windows10でQuickTimeがインス...
-
shellからpostgresqlへの変数の...
-
数値が定期的にあらわれる文字...
-
postgresqlでのトランザクショ...
-
PostgreSQL レコードからアイテ...
-
Windows10がインストールできま...
-
select文の書き方で分からない...
-
エクセルVBAでUWSCを使う
おすすめ情報